Qualcuno sa di un modo efficiente per fare regressione lineare multipla in C#, dove il numero di equazioni simultanee può essere negli anni 1000 (con 3 o 4 ingressi diversi). Dopo aver letto this article sulla regressione lineare multipla Ho provato a realizzarlo con un equazione matriciale:Efficiente regressione lineare multipla in 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());
}
Tuttavia non si adatta bene alla scala di 1000 di equazioni dovuti all'operazione inversione di matrice. Posso chiamare il linguaggio R e usarlo, tuttavia speravo che ci sarebbe stata una soluzione .Net pura che si sarebbe estesa a questi grandi set.
Qualche suggerimento?
EDIT # 1:
ho risolto utilizzando R per il momento. Utilizzando statconn (scaricato here) ho trovato che sia veloce sia & relativamente facile da usare questo metodo. Cioè qui c'è un piccolo frammento di codice, in realtà non c'è molto codice per usare la libreria statconn R (nota: questo non è tutto il codice!).
_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;
}
utilizzare una libreria GPU forse? –
Intendi rendere le operazioni della matrice più veloci? Non penso che questo sia l'approccio migliore, penso che l'approccio migliore sarà quello di utilizzare un approccio di stile non matrice (o qualcosa che eviti l'inverso). – mike
Ho avuto successo con http://www.codeproject.com/KB/recipes/LinReg.aspx Molto facile da usare e open source! – BoroDrummer