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

C++ C/C+中的最小二乘回归+;,c++,c,math,C++,C,Math,如何在C/C++中实现因子分析的最小二乘回归?这方面的黄金标准是。您尤其想要xGELS获取并使用TGraph::Fit()(或TGraphErrors::Fit()) 不过,这是一个大而重的软件,只为装配工安装。适合我,因为我已经安装了它 或者使用。当我不得不处理大型数据集和大型参数集进行非线性参数拟合时,我使用了RANSAC和Levenberg-Marquardt的组合。我说的是成千上万的参数和成千上万的数据点 RANSAC是一种稳健的算法,通过使用简化的数据集来最小化异常值引起的噪声。它不是

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

这方面的黄金标准是。您尤其想要
xGELS

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

不过,这是一个大而重的软件,只为装配工安装。适合我,因为我已经安装了它


或者使用。

当我不得不处理大型数据集和大型参数集进行非线性参数拟合时,我使用了RANSAC和Levenberg-Marquardt的组合。我说的是成千上万的参数和成千上万的数据点

RANSAC是一种稳健的算法,通过使用简化的数据集来最小化异常值引起的噪声。它不是严格意义上的最小二乘法,但可以应用于许多拟合方法

Levenberg-Marquardt是数值求解非线性最小二乘问题的有效方法。 在大多数情况下,收敛速度介于最速下降法和牛顿法之间,无需计算二阶导数。我发现在我所研究的例子中,它比共轭梯度要快

我这样做的方式是围绕LM方法设置RANSAC外部循环。这是非常强大但缓慢的。如果不需要额外的健壮性,可以使用LM

看一看

他们有C++实现,用于L- BFGS和Levenberg Marquardt。


使用这两种算法,只需求出目标函数的一阶导数

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


我用过线性最小二乘估计。它不是很复杂,但相当快+简单。

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


之所以有不同的方法,是因为你可以选择你想要最小化的。关于方法的广度有一个相当全面的讨论

这是一个FORTRAN解决方案,尽管是一个很好的解决方案。不过,有一点是正确的,即c语言中现有的库和统计软件包比使用自己的要容易得多。@Captn:有c/c++端口的LAPACK。KennyTM是这么说的。大多数提供LAPACK的平台也提供C接口。看起来dmckee提到的GSL库支持Levenberg Marquardt。如果你想沿着这条路走下去,这将是一个很好的起点。我认为GSL可能因为它的GPL许可证而无法使用。提到RANSAC+1,因为它是一个漂亮的算法,没有得到它所失去的曝光。你说的“实现”是什么意思?你是在寻找一个现有的软件包,里面有各种各样的东西,还是在尝试为一个对附加功能(比如家庭作业)需求最少的应用程序编写一些软件?