Kennt jemand eine effiziente Methode zur Durchführung multipler linearer Regression in C#, wo die Anzahl der simultanen Gleichungen in den 1000ern liegen kann (mit 3 oder 4 verschiedenen Eingängen). Nach this article auf mehreren linearen Regressions Lesen habe ich versucht, es mit einer Matrixgleichung Umsetzung:Effiziente multiple lineare Regression 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());
}
jedoch es auf das Ausmaß der 1000 von Gleichungen aufgrund der Matrixinversionsoperation nicht gut skalieren. Ich kann die R-Sprache aufrufen und diese verwenden, aber ich hatte gehofft, dass es eine reine .Net-Lösung geben würde, die auf diese großen Sets skaliert.
Irgendwelche Vorschläge?
EDIT # 1:
Ich habe mit R entschied sich für den Augenblick. Durch die Verwendung von statconn (heruntergeladen here) habe ich festgestellt, dass es sowohl schnell & relativ einfach ist, diese Methode zu verwenden. I.e. Hier ist ein kleines Code-Snippet, es ist wirklich nicht viel Code, um die R statconn-Bibliothek zu benutzen (Anmerkung: das ist nicht der ganze Code!).
_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;
}
Verwendung einer GPU Bibliothek vielleicht? –
Wollen Sie die Matrix-Operationen schneller laufen lassen? Ich denke nicht, dass dies der beste Ansatz sein wird. Ich denke, der beste Ansatz wird darin bestehen, einen nicht-matrixartigen Ansatz zu verwenden (oder etwas, das die Umkehrung vermeidet). – mike
Ich hatte Erfolg mit http://www.codeproject.com/KB/recipes/LinReg.aspx Sehr einfach zu bedienen und Open Source! – BoroDrummer