2014-09-03 12 views
9

So baue ich ein implizites Feedback recommender Modell Spark 1.0.0 und ich versuche, das Beispiel, das sie auf ihrer Collaborative Filtering Seite zu folgen: http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html#explicit-vs-implicit-feedbackFunken MLlib - Collaborative Filtering Implicit-Feed

Und ich habe sogar der Test-Datensatz geladen, die sie im Beispiel Referenz: http://codesearch.ruethschilling.info/xref/apache-foundation/spark/mllib/data/als/test.data

jedoch bei dem Versuch, das implizite Rückkopplungsmodell auszuführen: val alpha = 0,01 val model = ALS.trainImplicit (Bewertungen, Rang, numIterations, alpha)

(die Ratings waren die Bewertungen genau aus ihren Daten-Set und rank = 10, numIterations = 20) ich die folgende Störung erhalte:

scala> val model = ALS.trainImplicit(ratings, rank, numIterations, alpha) 
<console>:26: error: overloaded method value trainImplicit with alternatives: 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and> 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,alpha: Double)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and> 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,blocks: Int,alpha: Double)org.apache.spark.mllib.recommendation.MatrixFactorizationModel <and> 
(ratings: org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating],rank: Int,iterations: Int,lambda: Double,blocks: Int,alpha: Double,seed: Long)org.apache.spark.mllib.recommendation.MatrixFactorizationModel 
cannot be applied to (org.apache.spark.rdd.RDD[org.apache.spark.mllib.recommendation.Rating], Int, Int, Double) 
val model = ALS.trainImplicit(ratings, rank, numIterations, alpha) 

Interessanterweise ist dieses Modell ganz gut läuft, wenn nicht trainImplicit tun (d ALS.train)

Antwort

4

Das Beispiel scheint mit der Implementierung nicht synchron zu sein, da es keine Überlastungen von trainImplicit mit vier Parametern gibt - was die Fehlermeldung Ihnen sagt. Wenn Sie jedoch die Scala source code for ALS sehen Sie werden sehen, dass die drei Parameter Überlastung ist in Bezug auf die sechs Parameter Überlastung über einige ‚magische Zahlen‘ umgesetzt:

def trainImplicit(ratings: RDD[Rating], rank: Int, iterations: Int) 
    : MatrixFactorizationModel = { 
    trainImplicit(ratings, rank, iterations, 0.01, -1, 1.0) 
} 

Dies deutet darauf hin, dass 0,01 ist ein anständiger Standardwert für Lambda. (Vielleicht ist es gut, jemanden zu Rate zu ziehen, der ein tiefergehendes Verständnis von ML hat.) Dies kann Ihnen genügend Informationen geben, um einen vernünftigen Aufruf zu der Überlastung mit fünf oder sechs Parametern zusammenzustellen. (Natürlich, wenn Sie genug wissen, bessere Werte zu holen, das ist großartig!)

Zum Beispiel:

val model = ALS.trainImplicit(ratings, rank, numIterations, 0.01, alpha) 

oder

val model = ALS.trainImplicit(ratings, rank, numIterations, 0.01, -1, alpha) 

Schließlich können Sie nicht erkennen, dass es recht gut ist API documentaiton for ALS.

+0

Perfekt, scheint die 'magische Zahlen' Berechnung gut zu funktionieren! Vielen Dank für die Hilfe !! – atellez

+0

Ja 0,01 ist ein feiner Standardwert für Lambda. –