¿Alguien sabe de una manera eficiente de hacer regresiones lineales múltiples en C#, donde el número de ecuaciones simultáneas puede estar en los 1000 (con 3 o 4 entradas diferentes). Después de leer this article de regresión lineal múltiple Probé implementarlo con una ecuación matricial:Regresión Lineal Múltiple Eficiente en C#/.Net
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());
}
Sin embargo, no se adapta bien a la escala de 1000 de ecuaciones debido a la operación de matriz de inversión. Puedo llamar al lenguaje R y usar eso, sin embargo, esperaba que hubiera una solución .Net pura que se escalaría a estos grandes conjuntos.
¿Alguna sugerencia?
editar # 1:
que se han asentado usando R por el momento. Al usar statconn (descargado here) he encontrado que es rápido & relativamente fácil de usar este método. Es decir. Aquí hay un pequeño fragmento de código, realmente no es mucho código para usar la biblioteca R statconn (nota: ¡esto no es todo el código!).
_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;
}
uso de una biblioteca GPU tal vez? –
¿Quiere hacer que las operaciones matriciales se ejecuten más rápido? No creo que sea el mejor enfoque, creo que el mejor enfoque será utilizar un enfoque de estilo no matricial (o algo que evite lo contrario). – mike
Tuve éxito con http://www.codeproject.com/KB/recipes/LinReg.aspx ¡Muy fácil de usar y de código abierto! – BoroDrummer