2016-06-24 20 views
3

Ich verwende das ALS-Modell von spark.ml, um ein Empfehlungssystem mit impliziten Feedback für eine bestimmte Sammlung von Elementen zu erstellen. Ich habe bemerkt , dass die Ausgabe Vorhersagen des Modells viel niedriger als 1 sind und sie in der Regel im Intervall von [0,0,1] liegen. Daher macht die Verwendung von MAE oder MSE in diesem Fall keinen Sinn.Spark: Messung der Leistung von ALS

Daher verwende ich die AreaUnderROC (AUC), um die Leistung zu messen. Ich mache das, indem ich die BinaryClassificationEvaluator des Funkens benutze, und ich bekomme etwas nahe zu 0.8. Aber ich kann nicht klar verstehen, wie das möglich ist, da die meisten Werte in [0,0,1] liegen.

Zu meinem Verständnis wird der Evaluator nach einem bestimmten Punkt alle Vorhersagen berücksichtigen, die zur Klasse 0 gehören. Was würde im Wesentlichen bedeuten, dass AUC gleich dem Prozentsatz negativer Proben wäre?

Wie würden Sie im Allgemeinen solche niedrigen Werte behandeln, wenn Sie die Leistung Ihres Modells im Vergleich zur logistischen Regression testen müssen?

Ich trainiere das Modell wie folgt:

rank = 25 
alpha = 1.0 
numIterations = 10 
als = ALS(rank=rank, maxIter=numIterations, alpha=alpha, userCol="id", itemCol="itemid", ratingCol="response", implicitPrefs=True, nonnegative=True) 
als.setRegParam(0.01) 
model = als.fit(train) 

Antwort

2

Mit BinaryClassificationEvaluator auf ein Recommender falsch ist. In der Regel wählt ein Empfehler einen oder mehrere Artikel aus einer Sammlung als Vorhersage aus. Aber BinaryClassificationEvaluator befasst sich nur mit zwei Etiketten, daher Binary.

Der Grund, warum Sie immer noch ein Ergebnis von BinaryClassificationEvaluator erhalten, ist, dass es eine prediction Spalte in Ihrem Ergebnisdatenrahmen gibt, die dann zur Berechnung der ROC verwendet wird. Die Zahl bedeutet in Ihrem Fall nichts, nehmen Sie es nicht als Maß für die Leistung Ihres Modells.

Ich habe festgestellt, dass die Ausgangsvorhersagen des Modells viel niedriger als 1 sind und sie normalerweise im Intervall von [0,0,1] liegen. Daher macht die Verwendung von MAE oder MSE in diesem Fall keinen Sinn.

Warum MSE macht keinen Sinn? Sie bewerten Ihr Modell, indem Sie den Unterschied (Fehler) der vorhergesagten Bewertung und die wahre Bewertung betrachten. [0, 0.1] bedeutet einfach, dass Ihr Modell vorhersagt, dass die Bewertung in diesem Bereich liegt.

+0

In diesem Fall bedeutet es im Wesentlichen, dass ALS keine Muster in den Daten erfassen konnte. Ich würde erwarten, Ergebnisse im Bereich von [0, 1] zu bekommen, allerdings bekomme ich nur sehr niedrige Werte <0.1. Daher wird der Fehler für positive Proben sehr hoch sein. –

+0

Es ist das trainierte Modell, das keinen Sinn macht, nicht die Metriken :) – ShuaiYuan

+0

Ja, Sie haben Recht. Ich möchte keine falschen Interpretationen verursachen. Ich habe mich aufgrund der Ergebnisse des Modells für eine andere Metrik entschieden, die offensichtlich nicht sehr sinnvoll ist. –

3

Was @shuaiyuancn erklärt über BinaryClassificationEvaluator ist nicht vollständig korrekt. Offensichtlich mit dieser Art von Evaluator, wenn Sie keine binären Bewertungen haben und eine ordnungsgemäße Schwelle ist nicht korrekt.

Daher können Sie ein Empfehlungssystem als binäre Klassifizierung betrachten, wenn Ihre Systeme binäre Bewertungen berücksichtigen (click-or-not, like-or-not).

In diesem Fall definiert die Recommender ein logistisches Modell, in dem wir, dass das Rating (-1,1) gehen davon aus, dass der Benutzer u Artikel v gibt auf einem logistischen Antwortmodell generiert:

y_{uv} \sim Bernoulli((1 + exp[-score_{uv}])^1)

wo Score uv die Partitur von u zu v gegeben ist.

weitere Informationen über Logistische Modelle können Sie auf Hastie et al beziehen. (2009) - Abschnitt 4.4

Dies besagt, dass ein Empfehlungssystem auch als Mehrklassenklassifizierungsproblem betrachtet werden kann. Und das hängt immer von Ihren Daten und dem Problem ab, aber es kann auch einem Regressionsmodell folgen.

Manchmal wähle ich mein Empfehlungssystem mit RegressionMetrics dachte sogar, Text Bücher RankingMetrics -ähnlichen Auswertungen zu nutzen empfehlen bewerten Metriken wie durchschnittliche Genauigkeit bei K oder MAP zu berechnen, etc. Es hängt immer von der Aufgabe und Daten zur Hand. Dafür gibt es kein allgemeines Rezept.

Dennoch rate ich Ihnen dringend, die offizielle Dokumentation Evaluation Metrics zu lesen. Es wird Ihnen helfen, besser zu verstehen, was Sie in Bezug darauf zu messen versuchen, was Sie erreichen möchten.

Referenzen

EDIT: Ich lief in this answer heute. Es ist eine Beispielimplementierung eines binären ALS in Python. Ich rate Ihnen dringend, einen Blick darauf zu werfen.