首页 > 解决方案 > MathNet 中的回归给出了与 Excel 不同的结果

问题描述

我正在尝试添加一个组件,该组件将对我们应用程序中的数据进行回归分析。我编写了一个服务,它使用 MathNet Numerics 执行回归以计算各种特征的系数。我通过将与 Excel 中的回归分析相同的数据传递给它来对其进行测试。我正在使用的数据以 CSV 格式显示如下:

Accuracy,Age,Boundary Lines,Distance,Unit,County,Similarity,Size,Quality
0.894556528,0.301,1,1,1,1,0.753,0.76,0.625
0.870692849,0.234,1,0.737,1,1,0.598,0.804,0.625
1.044444444,0.49,1,1,1,0,0.714,0.933,0.833
1.04120514,0.165,1,1,1,1,0.224,0.268,0.833
1.157635468,0.179,1,1,1,1,0.224,0.268,0.8
1.080750408,1,1,1,1,1,0.826,0.536,0.833
1.100041511,1,1,1,1,1,0.569,0.5,0.833
0.932113964,1,1,1,1,1,0.78,0.25,0.625
0.966800438,0.267,1,1,1,1,0.916,0.408,0.625
0.941051136,0.212,1,0.713,1,1,0.755,0.667,0.625
0.932835821,0.429,1,1,1,1,1,0.999,1
1.689189189,0.12,1,1,1,1,1,0.941,1
1.199451679,0.292,1,1,1,1,1,0.6,1
0.7,0.188,1,0.981,1,1,1,1,0.333
0.795454545,1,1,1,1,1,1,0.364,0.5

“准确度”是从属值,我正在计算其他列的系数,将它们用作独立值。当我在 Excel 中进行回归时,我得到以下结果:

在此处输入图像描述

当我在代码中测试我的数据时,除了边界线和单位系数之外,我得到了相同的值,而在 Excel 中它们是 0,在我的代码中它们分别是 -0.581 和 0.876

我正在通过创建评级列的矩阵和准确度列的向量并使用DirectRegressionMethod.NormalEquations.

Matrix<double> ratingsMatrix = DenseMatrix.OfRowVectors(ratingsVectors);
Vector<double> accuracyVector = DenseVector.OfEnumerable(accuracyRatings);
Vector<double> coefficientVector = MultipleRegression.DirectMethod(ratingsMatrix, accuracyVector, DirectRegressionMethod.NormalEquations);

我试图找出差异的原因。Excel 的结果非常适合我的需要,所以我希望能够复制它。我怀疑这可能是因为这两列都是1?

标签: c#excellinear-regressionmathnet-numerics

解决方案


推荐阅读