題:
回歸中所有可能的子集選擇中的軟件限制是什麼?
Levon
2011-03-01 09:09:40 UTC
view on stackexchange narkive permalink

如果我有一個因變量和$ N $個預測變量,並希望我的統計軟件檢查所有可能的模型,那麼將有$ 2 ^ N $個可能的結果方程式。

我很好奇地發現,對於主要/受歡迎的統計軟件,$ N $有什麼局限性,因為隨著$ N $變大,就會出現組合爆炸。已經在各個網頁上搜索了軟件包,但找不到此信息。我會懷疑$ N $的值是10-20?

如果有人知道(並有鏈接),我將不勝感激。

除了R,Minitab,我能想到這些軟件包SAS,SPPS,Stata,Matlab,Excel(?),還有我應該考慮的其他軟件包嗎?

@levon9這個問題產生了很多合理的答案和評論,所以我+1了。但是,請忘了Excel在模型選擇方面做得很認真...
@levon9-我能夠使用SAS中的50個變量生成所有可能的子集。我不相信除了內存和CPU速度外沒有其他硬性限制。-RalphWinters
數據集的大小是多少?
感謝非常有用的信息。只是好奇,這花了很長時間嗎?
@chl ..是因為Excel速度慢,或者僅僅是因為它沒有能力(即會給出不准確的結果?)。
@levon9, @chl Excel(原則上)能夠正確實現模型選擇算法。它不是開箱即用的。有人在考慮特定的加載項嗎?
-1
四 答案:
cardinal
2011-03-01 09:19:54 UTC
view on stackexchange narkive permalink

我懷疑30--60是您將獲得的最好成績。標準方法是 leap-and-bounds 算法,它不需要擬合所有可能的模型。在$ R $中, leaps 包是一個實現。

regsubsets 函數的文檔> leaps 軟件包指出,它將處理多達50個變量而不會抱怨。通過設置適當的布爾標誌,可以“強制”執行50個以上的操作。僅根據您可用的CPU內核數線性擴展。因此,如果50個變量是單個內核的上限,並且您有1000個內核可供使用,則可以將其增加到大約60個變量。

**跳動**很棒,我喜歡其中的劇情,+ 1。在實際應用中,某些平均技術比甚至從所有回歸模型中發現的預測估計器都更快(更好)地工作。因此,我建議採用貝葉斯模型平均(BMA軟件包)或我最喜歡J.R. Magnus等人開發的加權平均最小二乘法(WALS [1])的算法。 Matlab代碼很容易轉換為R代碼。對於WALS來說,好處是$ N $的計算難度,而不是$ 2 ^ N $。 [1]:http://www.tilburguniversity.edu/research/institutes-and-research-groups/center/staff/magnus/wals/
@Dmitrij,感謝您的評論。對於所有子集回歸的效用,我一直試圖保持與自己不可知的態度。在我看來,幾乎總是有一個更好的解決方案,但是我覺得對OP的問題的回答似乎過於陳詞濫調。
與主要影響模型相比,@Dmitrij, BMA仍具有與所有子集回歸相同的計算複雜性。沒有?在我看來,BMA的主要優勢在於試圖找出哪些協變量可能會影響響應。 BMA通過實質上對$ 2 ^ {n-1} $子模型上的對數似然度進行平均來完成此操作。
感謝您提供指向R軟件包的指針!我不知道,將來可能會派上用場。如果我可以得到其他流行軟件包對N的特定限制的信息,那將非常有幫助。
我懷疑@levon9,會因封裝而有所不同。 ** leap **使用的算法至少已有20多年了。即使您發現實現“快”兩倍的實現,這也意味著您必須將可以處理的變量數量增加一個。每增加一倍的速度,您就會得到一個變量。在這種情況下,硬件限製而非算法限制是您的瓶頸。
-1
Dikran Marsupial
2011-03-01 19:01:36 UTC
view on stackexchange narkive permalink

請注意,但特徵選擇是一項冒險的業務,擁有的特徵越多,用於優化特徵選擇標準的自由度就越高,因此,過度擬合特徵的風險就越大選擇標準,從而獲得泛化能力差的模型。通過高效的算法和仔細的編碼,您可能會執行具有大量功能的所有子集選擇,但這並不意味著這樣做是一個好主意,尤其是在您觀察較少的情況下。如果確實使用所有子集選擇,那麼對整個模型擬合過程進行正確的交叉驗證至關重要(這樣,在交叉驗證的每一步中,所有子集的選擇都將獨立執行)。在實踐中,沒有特徵選擇的嶺回歸通常要優於具有特徵選擇的線性回歸(這在Millar的專著中提供了有關特徵選擇的建議)。

@Dikran,(+1)好的評論。我試圖避免去那裡,因為它沒有直接解決OP的問題。但是,我同意。全子集很少走。而且,如果您這樣做,則需要了解所有含義。
@Dirkan感謝您的評論,我是一名真正的統計新手。我意識到有太多變量在起作用時過擬合模型的危險,所以我只是在考慮各種自動化方法(即,沒有太多的見解優勢),例如逐步方法(可能會陷入局部最大值)和詳盡的所有子集模型-及其面臨的計算限制(以及程序包施加的外部限制)
在選擇功能部件時,@levon9,可能會導致嚴重過度擬合,因此,功能選擇並不能防止過度擬合。考慮用於預測拋擲公平硬幣結果的邏輯回歸模型。潛在的投入是翻轉大量其他公平硬幣的結果。這些輸入中的一些將與目標呈正相關,因此最佳的全子集模型將選擇輸入(即使它們沒有用),您將獲得一個似乎具有技能的模型,但實際上並不比猜測更好。
@Dikran(+1)與@cardinal,相同我先寫了一篇類似的文字,但後來決定這不是@levon9的要求,因為他只是對複雜性感到好奇:)
@Dikran +1,因為我喜歡這樣的建議。
@Dikran感謝您的其他澄清/評論-並對您之前輸入的錯字表示抱歉。
Ralph Winters
2011-03-01 20:56:20 UTC
view on stackexchange narkive permalink

我能夠使用SAS中的50個變量生成所有可能的子集。我不相信除了內存和CPU速度以外沒有其他硬性限制。 p>

@ levon9-不,運行了不到10秒。我從(0,1)

-Ralph Winters

生成了50個隨機變量
數據集的大小是多少?
感謝非常有用的信息。只是好奇,這花了很長時間嗎?
我取消刪除了這篇文章(並在編輯中合併了您的另一條評論),因為OP認為它很有用,其他人也可能有用。感謝您的貢獻;請繼續努力! (如果您確實認為應該刪除它,請繼續這樣做;我不會再違反您的意願。)
看來您正在使用兩個不同的未註冊帳戶。我已經將它們合併,但是您仍然需要註冊。
probabilityislogic
2011-03-01 16:17:03 UTC
view on stackexchange narkive permalink

隨著$ N $變大,您使用數學的能力變得至關重要。 “低效”數學將使您花費PC。上限取決於您要求解的方程式。避免矩陣求逆或行列式計算是一個很大的優勢。

幫助提高極限的一種方法是使用定理將大型矩陣求逆分解為較小的矩陣求逆。這通常意味著可行與不可行之間的區別。但這涉及一些艱苦的工作,並且常常是相當複雜的數學操作!但這通常是值得的。做數學或做時間!

貝葉斯方法可能能夠提供另一種獲取結果的方法-可能更快,這意味著您的“上限”將會增加(如果僅僅是因為它給您計算相同答案的兩種替代方法-較小的兩個,總是小於其中一個!)。

如果您可以在不求矩陣求逆的情況下計算回歸係數,那麼您可能會節省一個很多時間。這在貝葉斯情況下可能特別有用,因為在“正常邊緣化積分內部”,不需要倒置$ X ^ {T} X $矩陣,您只需計算平方和即可。此外,行列式矩陣將構成歸一化常數的一部分。因此,從理論上講,您可以使用採樣技術對積分進行數值評估(即使它具有解析表達式),這比嘗試評估矩陣逆和行列式的“組合爆炸”要快得多。 (這仍然是數值積分的“組合爆炸”,但這可能更快)。

以上建議是我的“思想泡沫”。我想實際測試一下,看看是否有好處。我認為應該是這樣(5,000個模擬+計算exp(平方和)+計算加權平均beta應該比矩陣反演更快,因為矩陣足夠大。)

成本是近似的,而不是確切的估計。沒有什麼可以阻止您使用同一組偽隨機數來對整數進行數字求值,這將再次為您節省大量時間。

也沒有什麼可以阻止您使用組合任何一種技術。矩陣較小時,請使用精確;矩陣較大時,請使用仿真。這是因為在這部分分析中。只是不同的數字技術-選擇最快的技術!

當然,這只是一些“手搖的”參數,我不完全知道要使用的最佳軟件包-更糟糕的是,試圖找出它們實際使用的算法。

@probabilityislogic,雖然您的回答很有趣,但也許可以將其重點放在更好地解決OP的問題上。而且,用於計算最小二乘解的*** no ***軟件可以執行矩陣求逆,而行列式要少得多。曾經除非它是將1美元乘以1美元的矩陣。
@probabilityislogic,快速有效地處理$ 2 ^ n $案例遠遠超過了有效最小二乘法的$ O(n ^ 3)$問題。這就是* leaps-and-bounds *算法的來歷。
感謝您的帖子。 “做數學或做時間!” :-) ..實際上,我什至沒有試圖弄清楚這些軟件包所使用的底層算法(這是很有趣的想法),在這一點上,我確實在尋找有關主要軟件包中N限制的特定信息。
@cardinal還存在用於各種矩陣分解過程的更新和降級算法,我懷疑這是“矩陣逆”等的含義。
@Dikran,存在幾種有效且數值穩定的最小二乘方法,包括一次增加或減少一列設計矩陣的方法。有時,最好是了解表面下正在發生的事情,即使在大多數情況下,您無需在意。
@cardinal-我很好奇您對從未執行矩陣求逆的“最小二乘”的評論。估計的主要公式為$ \ beta =(X ^ {T} X)^ {-1} X ^ {T} Y $。此外,這些估計的方差由$ \ sigma ^ {2}(X ^ {T} X)^ {-1} $給出。矩陣逆是至少在數學上典型的最小二乘回歸的基礎。儘管我在接下來的實際計算過程中表現出我的無知。
@probabilityislogic,一種常見的方法是使用$ QR $分解(的某種變體)。因此,我們寫$ X = Q R $,其中$ Q $是具有正交列的矩陣,而$ R $是方形三角形矩陣。可以很容易地看到殘差可以寫成$ \ hat {y} = QQ ^ T y $並且參數估計值是解,因此方程的三角形系統$ R \ hat {\ beta} = Q ^ T y $。三角系統非常有效。使用Householder反射或Givens旋轉的$ Q R $分解在數值上非常穩定。無需矩陣求逆。
@cardinal-謝謝。所以我想我的“思想泡泡”可以簡化為將QR分解速度與數值積分進行比較
@probabilityislogic, $ QR $的分解永遠不會比$ O(n p ^ 2)$差,並且可以提供精確的答案(在數值精度內)。要將其與蒙特卡洛積分進行比較,需要您至少指定幾個期望精度的概念。
@cardinal-我建議根據需求的精度,MC方法可以“按比例放大”(更多模擬)或“按比例縮小”(更少)。使用QR方法,儘管精確,但您在一定程度上陷入了相同的計算時間。對於所有子集回歸之類的問題,答案的準確性可能不是第一要務。再一次,如果您有兩種方法-其中一種會更快。擴大我的思想泡泡將包括使一種方法比另一種方法更快所需的條件,以及所需的成本。
-1
@cardinal-不需要“重新估計”數字積分。您只需忽略模型中那些被排除的後驗樣本。您只需要對整個模型進行1次仿真,並且不需要更新1級-我認為這將節省大量時間。一個這樣的問題可能是“ $ \ beta_j $是否與我的模型相關,*,不管模型中還有其他什麼參數?*”。很快就可以決定這一點-只需查看$ \ beta_j $的邊際模擬分佈即可。
@cardinal-補充一點,假設您有一個“拒絕區”,例如$ \ frac {| \ beta_j |} {SE(\ beta_j)} \ leq 1 $,您準備聲明該係數為“零”並將其從模型中刪除。然後,在模擬數據集上的$ 2 ^ n $所有子集回歸歸結為n向列聯表的問題,每種方法都有2個結果-是否在該區域中。該表中的“最佳模型”具有最高的概率
@probabilityislogic,您的評論確實與所有子集回歸沒有任何關係,我也不會試圖將其納入該框架。他們似乎與回歸中的“模型選擇”有更多關係。有許多這樣的方法,包括古典和現代方法,包括您所描述的閾值方法。套索就是一個例子,甚至具有貝葉斯解釋。通常,您需要接近設計矩陣正交性的條件以保證良好的性能(甚至漸近!)。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...