2017-12-27 6 views
2

Ich habe eine MathNet Matrix und Vektor-Typ wie folgt deklariert ...MultipleRegression

Matrix<double> X = Matrix<double>.Build.Dense(sampleSize,2); 
Vector<double> yObserved = Vector<double>.Build.Dense(sampleSize); 

aber wenn ich rufe ...

Vector<double> p = MultipleRegression.NormalEquations(X, yObserved, true); 

Visuelle Studio gibt dem Fehler

Fehler CS0411 die Typargumente für die Methode 'MultipleRegression.NormalEquations (T [] [], T [], bool)' kann nicht aus der Nutzung zu entnehmen. Versuchen Sie, die Typargumente explizit anzugeben.

Also wie soll ich die MultipleRegression-Klasse mit Matrix und Vector Argumente aufrufen, wenn nicht so? Und warum findet Visual Studio meine Typenkodierung mehrdeutig?

Ich habe meinen Code gut mit einem gezackten Array für die Matrix arbeiten; Jetzt möchte ich es stattdessen mit den Matrix/Vector-Typen laufen lassen.

+0

Versuchen Sie dies: 'double [] p = MultipleRegression.NormalEquations (X.ToColumnArrays(), yObserved.ToArray(), true);' – jsanalytics

+0

Ihre Lösung funktioniert, aber die Ziel ist es, ** native ** MathNet-Datentypen (wie Matrix und Vector) zu verwenden, um die Leistung zu maximieren. Wir versuchen daher, Arrays als Argumente in dieser Lösung zu vermeiden. Einfach das dritte Argument entfernen, wie in der Antwort unten vorgeschlagen, löst das Problem. – superticker

+1

Bitte markieren Sie diese Antwort als ** akzeptiert **, damit die Leute wissen, dass Ihr Problem gelöst wurde. Lesen Sie dies: [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Https://stackoverflow.com/help/someone-answers). – jsanalytics

Antwort

1

Die Überlast für MultipleRegression.NormalEquations() hat nur 2 Parameter für die Matrix und Vector Parametersatzkombination.

Wenn Sie den booleschen Parameter hinzufügen, verwirren Sie ihn und glauben, dass Sie versuchen, die Parameter T[][], T[], bool anstelle von Matrix, Vector anzugeben.

Ich weiß nicht, was abfangen bedeutet, aber Sie müssen schauen, was es ohne es tut. Entweder konvertieren Sie Ihre Parameter in T[][] und T[] oder nennen Sie es ohne den boolean (siehe unten).

var p = MultipleRegression.NormalEquations(X, yObserved); 

ODER

var p = MultipleRegression.NormalEquations<double>(X, yObserved); 
+0

Danke. Ja, offensichtlich sind die APIs für die (Matrix, Vector) Argumentüberladung gegenüber der (T [] [], T []) gezackten Array-Überladung verschieden. Der Boolean = true sagt dem letzteren, dass er den x^0 (intercept) -Begriff enthält. Mit der früheren Überladung müssen Sie eine Spalte von 1s in die Matrix einfügen, wenn Sie den x^0 Begriff haben wollen, was zu schade ist, weil Sie jetzt einige Male mit 1 multiplizieren. (Recall, x^0 ergibt immer 1.) – superticker