【发布时间】:2022-07-24 04:47:15
【问题描述】:
我需要计算斜率,线的截距,以便在 2 个向量与数据之间进行回归。所以我用python下面的代码做了一个原型:
A = [1,2,5,7,14,17,19]
b = [2,14,6,7,13,27,29]
A = sm.add_constant(A)
results = sm.OLS(A, b).fit()
print(\"results: \", results.params)
输出:[0.04841897 0.64278656]
现在我需要在
C++中使用Eigenlib 复制它,据我所知,我需要在A的矩阵中传递1列。如果这样做,我得到的回归结果与不使用第二列或0列时完全不同。C++代码如下:Eigen::VectorXd A(7); Eigen::VectorXd b(7); A << 1,2,5,7,14,17,19; b << 2,14,6,7,13,27,29; MatrixXd new_A(A.rows(), 2); VectorXd d = VectorXd::Constant(A.rows(), 1); new_A << A, d; Eigen::MatrixXd res = new_A.bdcSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(b); cout << \" slope: \" << res.coeff(0, 0) << \" intercept: \" << res.coeff(1, 0) << endl; cout << \"dbl check: \" << (new_A.transpose() * new_A).ldlt().solve(new_A.transpose() * b) << endl;将 \'1\' 列添加到 new_A -> 斜率的输出:1.21644 截距: 2.70444 输出带有 \'0\' 或未添加列 -> 斜率:0.642787 截距:0
如何在
C++中获得相同的结果?哪一个是正确的,我似乎更信任 python 一个,因为当我使用 0 列时我得到了相同的结果。谢谢你,
梅林
标签: python c++ linear-regression eigen statsmodels