有谁知道在 C# 中进行多重线性回归的有效方法,其中联立方程的数量可能在 1000 个(具有 3 或 4 个不同的输入)。在阅读了这篇关于多元线性回归的文章后,我尝试使用矩阵方程来实现它:
Matrix y = new Matrix(
new double[,]{{745},
{895},
{442},
{440},
{1598}});
Matrix x = new Matrix(
new double[,]{{1, 36, 66},
{1, 37, 68},
{1, 47, 64},
{1, 32, 53},
{1, 1, 101}});
Matrix b = (x.Transpose() * x).Inverse() * x.Transpose() * y;
for (int i = 0; i < b.Rows; i++)
{
Trace.WriteLine("INFO: " + b[i, 0].ToDouble());
}
然而,由于矩阵求逆运算,它不能很好地扩展到 1000 个方程的规模。我可以调用 R 语言并使用它,但是我希望有一个纯 .Net 解决方案可以扩展到这些大型集合。
有什么建议么?
编辑#1:
我暂时已经使用 R 解决了。通过使用 statconn(在此处下载),我发现使用此方法既快速又相对容易。即这里是一个小代码片段,使用 R statconn 库的代码并不多(注意:这不是全部代码!)。
_StatConn.EvaluateNoReturn(string.Format("output <- lm({0})", equation));
object intercept = _StatConn.Evaluate("coefficients(output)['(Intercept)']");
parameters[0] = (double)intercept;
for (int i = 0; i < xColCount; i++)
{
object parameter = _StatConn.Evaluate(string.Format("coefficients(output)['x{0}']", i));
parameters[i + 1] = (double)parameter;
}