C / C ++中的最小二乘回归

时间:2010-02-04 05:55:02

标签: c++ c math

如何在C / C ++中实施因子分析的最小二乘回归?

7 个答案:

答案 0 :(得分:5)

金标准为LAPACK。你想要的是xGELS

答案 1 :(得分:2)

当我不得不处理用于非线性参数拟合的大型数据集和大型参数集时,我使用了RANSAC和Levenberg-Marquardt的组合。我正在用成千上万的数据点来讨论数以千计的参数。

RANSAC是一种强大的算法,可通过使用减少的数据集来最小化由于异常值引起的噪声。它不是严格的最小二乘法,但可以应用于许多拟合方法。

Levenberg-Marquardt是一种在数值上求解非线性最小二乘的有效方法。 在大多数情况下,收敛率介于最速下降和牛顿法之间,而不需要计算二阶导数。在我检查过的情况下,我发现它比Conjugate梯度更快。

我这样做的方法是将RANSAC设置为围绕LM方法的外环。这非常强大但很慢。如果您不需要额外的稳健性,您可以使用LM。

答案 2 :(得分:1)

获取ROOT并使用TGraph::Fit()(或TGraphErrors::Fit())?

为安装人员安装的大而重的软件。适合我,因为我已经安装了它。

或使用GSL

答案 3 :(得分:1)

如果您想自己实施优化算法,Levenberg-Marquard似乎很难实现。如果不需要真正的快速收敛,请看一下Nelder-Mead单纯形优化算法。它可以在几个小时内从头开始实施。

http://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method

答案 4 :(得分:0)

看一看 http://www.alglib.net/optimization/

他们有L-BFGS和Levenberg-Marquardt的C ++实现。

您只需计算出目标函数的一阶导数即可使用这两种算法。

答案 5 :(得分:0)

我使用TNT/JAMA进行线性最小二乘估计。它不是很复杂,但相当快速+容易。

答案 6 :(得分:0)

让我们先谈谈因子分析,因为上面的大部分讨论都是关于回归的。我的大多数经验都是使用SAS,Minitab或SPSS等软件来解决因子分析方程,因此我在直接求解这些方面的经验有限。也就是说,最常见的实现不使用线性回归来求解方程。根据{{​​3}},最常用的方法是主成分分析和主成分分析。在应用多变量分析(达拉斯约翰逊)的文本中,记录了七种方法,每种方法各有利弊。我强烈建议您找一个能够为您提供因子分数的实现,而不是从头开始编写解决方案。

有不同方法的原因是你可以准确选择你想要最小化的东西。对方法的广度进行了非常全面的讨论this