Ich habe versucht, eine Markierung für jede Zeile in DataFrame
vorherzusagen , aber ohne LinearRegressionModel % transform
-Methode, aufgrund von Hintergründen, stattdessen habe ich versucht, es manuell zu berechnen Mit der klassischen Formel 1 / (1 + e^(-hθ(x)))
beachte ich, dass ich den Code aus dem Repository von Apache Spark
kopiert habe und fast alles von private
object BLAS
in eine öffentliche Version kopiert habe.
PD: Ich benutze keine regParam
, ich habe das Modell einfach angepasst.
Nach dem Definieren solcher Funktionen und dem Erhalten von Modellparametern habe ich UDF
erstellt, um die Vorhersage zu berechnen (sie erhält die gleichen Merkmale wie DenseVector
), später vergleiche ich meine Vorhersagen mit denen des realen Modells und sie sind ganz anders! Was habe ich vermisst? Was mache ich falsch?
Ich habe sogar versucht, solche Funktionen innerhalb von udf
zu definieren und habe nicht funktioniert.
Es ist sehr peinlich, aber eigentlich lag das Problem daran, dass ich ein Pipeline
verwendet und ein MinMaxScaler
als Bühne hinzugefügt habe, also wurde das Dataset vor dem Training des Models skaliert, also wurden beide Parameter coefficients
und intercept
gebunden zu diesen skalierten Daten , also wenn ich die Vorhersage mit ihnen berechnete, war das Ergebnis total verzerrt. Um das Problem zu lösen, habe ich das Trainingsdatenset einfach aufnormalisiert, um die coefficients
und intercept
zu erhalten. Nachdem ich den Code erneut ausgeführt habe, habe ich das gleiche Ergebnis wie Spark
. Andererseits habe ich @ zero323 gehört und die Definitionen margin
und score
in die erste udf
-Deklaration von lambda
verschoben.
Tags und Links scala apache-spark logistic-regression