Кто-нибудь знает об эффективном способе выполнения множественной линейной регрессии в С#, где число одновременных уравнений может быть в 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;
}