Spark Der lineare MLLib-Regressionsmodellabschnitt ist immer 0.0?

8

Ich beginne gerade mit ML und Apache Spark, also habe ich die lineare Regression basierend auf den Spark-Beispielen getestet. Ich kann nicht scheinen, ein richtiges Modell für irgendwelche Daten außer dem Beispiel in dem Beispiel zu erzeugen, und der Schnittpunkt ist immer 0.0, unabhängig von den Eingabedaten.

Ich habe einen einfachen Trainingsdatensatz basierend auf der Funktion vorbereitet:

y = (2 · x1) + (3 · x2) + 4

d. Ich würde erwarten, dass der Schnittpunkt 4 ist und die Gewichte (2, 3).

Wenn ich LinearRegressionWithSGD.train (...) für die Rohdaten verwende, lautet das Modell:

%Vor%

Und die Vorhersagen sind alle NaN:

%Vor%

usw.

Wenn ich die Daten zuerst skaliere, bekomme ich:

%Vor%

usw.

Entweder mache ich etwas falsch, oder ich verstehe nicht, was die Ausgabe von diesem Modell sein soll, also kann jemand vorschlagen, wo ich hier vielleicht falsch liege?

Mein Code ist unten:

%Vor%     
Chris Webster 08.10.2014, 14:42
quelle

2 Antworten

8

Die train -Methode, die Sie verwenden, ist eine Verknüpfung, die den Schnittpunkt auf Null setzt und nicht versucht, einen zu finden. Wenn Sie die zugrunde liegende Klasse verwenden, können Sie einen Nicht-Null-Abschnitt erhalten:

%Vor%

Soll jetzt ein Abfangen geben.

    
Noah 08.10.2014, 15:03
quelle
10

@Noah: Danke - Ihr Rat hat mich dazu veranlasst, mir das nochmal anzusehen, und ich fand hier ein Beispielcode , mit dem Sie den Schnittpunkt generieren und auch andere Parameter wie die Anzahl der Iterationen über den Optimierer festlegen können.

Hier ist mein überarbeiteter Code zur Modellgenerierung, der auf meinen Dummy-Daten OK zu sein scheint:

%Vor%

Es scheint immer noch, skalierte Daten zu benötigen, anstatt die rohen Daten als Eingabe, aber das ist für meine Zwecke hier in Ordnung.

    
Chris Webster 09.10.2014 09:52
quelle