Я пытаюсь добавить компонент, который будет выполнять регрессионный анализ данных в нашем приложении. Я написал сервис, который использует 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 хорошо работали для того, для чего они мне нужны, поэтому я хотел бы иметь возможность их дублировать. Я подозреваю, что это может быть из-за того, что оба эти столбца все 1s?