如何在C / C ++中实施因子分析的最小二乘回归?
答案 0 :(得分:5)
金标准为LAPACK。你想要的是xGELS
。
答案 1 :(得分:2)
当我不得不处理用于非线性参数拟合的大型数据集和大型参数集时,我使用了RANSAC和Levenberg-Marquardt的组合。我正在用成千上万的数据点来讨论数以千计的参数。
RANSAC是一种强大的算法,可通过使用减少的数据集来最小化由于异常值引起的噪声。它不是严格的最小二乘法,但可以应用于许多拟合方法。
Levenberg-Marquardt是一种在数值上求解非线性最小二乘的有效方法。 在大多数情况下,收敛率介于最速下降和牛顿法之间,而不需要计算二阶导数。在我检查过的情况下,我发现它比Conjugate梯度更快。
我这样做的方法是将RANSAC设置为围绕LM方法的外环。这非常强大但很慢。如果您不需要额外的稳健性,您可以使用LM。
答案 2 :(得分:1)
答案 3 :(得分:1)
如果您想自己实施优化算法,Levenberg-Marquard似乎很难实现。如果不需要真正的快速收敛,请看一下Nelder-Mead单纯形优化算法。它可以在几个小时内从头开始实施。
答案 4 :(得分:0)
看一看 http://www.alglib.net/optimization/
他们有L-BFGS和Levenberg-Marquardt的C ++实现。
您只需计算出目标函数的一阶导数即可使用这两种算法。
答案 5 :(得分:0)
我使用TNT/JAMA进行线性最小二乘估计。它不是很复杂,但相当快速+容易。
答案 6 :(得分:0)
让我们先谈谈因子分析,因为上面的大部分讨论都是关于回归的。我的大多数经验都是使用SAS,Minitab或SPSS等软件来解决因子分析方程,因此我在直接求解这些方面的经验有限。也就是说,最常见的实现不使用线性回归来求解方程。根据{{3}},最常用的方法是主成分分析和主成分分析。在应用多变量分析(达拉斯约翰逊)的文本中,记录了七种方法,每种方法各有利弊。我强烈建议您找一个能够为您提供因子分数的实现,而不是从头开始编写解决方案。
有不同方法的原因是你可以准确选择你想要最小化的东西。对方法的广度进行了非常全面的讨论this