2010-02-04 143 views
2

如何在C/C++中實施最小二乘迴歸因子分析?C/C++中的最小二乘迴歸問題

+0

你是什麼意思的「實施」?你是在尋找一個現有的軟件包嗎?或者你是否正在嘗試爲一個應用程序編寫一些軟件,而不需要額外的功能(例如作業分配)? – gary 2010-02-10 19:16:51

回答

5

這個黃金標準是LAPACK。你想要的,特別是,xGELS

+0

這是一個FORTRAN解決方案,雖然很好。然而,這一點是有效的,因爲現有的庫和統計軟件包比使用自己的庫更容易使用。 – captncraig 2010-02-04 06:00:10

+5

@Captn:有LAPACK的C/C++端口。 KennyTM說什麼? – kennytm 2010-02-04 06:02:40

+2

大多數提供LAPACK的平臺也提供C接口。 – 2010-02-04 15:29:37

1

獲取ROOT並使用TGraph::Fit()(或TGraphErrors::Fit())?儘管如此,大型,重型軟件只能安裝在裝配工上。適用於我,因爲我已經安裝了它。

或使用GSL

2

當我不得不處理大數據集和大參數集用於非線性參數擬合時,我使用了RANSAC和Levenberg-Marquardt的組合。我正在談論成千上萬個數據點的數千個參數。

RANSAC是一種可靠的算法,用於通過使用簡化數據集來最小化異常值造成的噪音。它不是嚴格的最小二乘法,但可以應用於許多擬合方法。

Levenberg-Marquardt是一種非常有效的解決非線性最小二乘數值的方法。 大多數情況下的收斂速度在最速下降和牛頓法之間,不需要計算二階導數。我發現它在我檢查過的案例中比共軛梯度更快。

我這樣做的方法是在LM方法周圍設置RANSAC外環。這非常強大但很慢。如果你不需要額外的健壯性,你可以使用LM。

+0

看起來像dmckee提到的GSL庫支持Levenberg-Marquardt。如果你想要走這條路線,這將是一個很好的起點。我認爲GSL可能因其GPL許可證而無法使用。 – 2010-02-04 06:30:43

+1

+1提到RANSAC,因爲它是一個漂亮的算法,沒有得到它所接受的曝光度 – Kena 2010-02-05 15:04:42

0

我使用TNT/JAMA線性最小二乘估計。這不是很複雜,但相當快捷+容易。

0

讓我們首先談論因素分析,因爲上面的大部分討論都是關於迴歸的。我的大部分經驗是使用SAS,Minitab或SPSS等軟件來解決因子分析方程,所以我直接解決這些問題的經驗非常有限。也就是說,最常見的實現不使用線性迴歸來解決方程式。根據this,最常用的方法是主成分分析和主因子分析。在應用多變量分析(達拉斯約翰遜)的文本中,不少於7種方法都有自己的優缺點。我會強烈建議找到一個實現給你的因子分數,而不是從頭開始編寫解決方案。

爲什麼有不同的方法的原因是,你可以選擇正是你想盡量減少。有關方法廣度的相當全面的討論here.