1

Ich habe ein kollaboratives System mit Spark ALS gebaut. Anstatt zu bewerten, wollte ich dem Benutzer basierend auf dem, was er gekauft hat, empfohlene Produkte empfehlen. Also habe ich für alle Produkte, die der Benutzer gekauft hat, 1 gesetzt. und baute ein ALS-System. Die Vorhersage hat mehr als 1 als Ergebnis und auch RMSE ist 0,99. Ich habe implicyprefs = True gesetzt. Bitte finden Sie den Code unten. Ist es nicht zu hoch, um 0,99 zu haben? Ist es ein richtiger Ansatz?ALS mit Binäreingang

Hinweis: Ich habe Iteration und Rang-Parameter mit For-Schleife verbessert.

Ratings = Ratings.withColumn("Ordered",Ratings["Ordered"].cast('int')) 
    Ratings = Ratings.withColumn("UserId", Ratings["UserId"].cast('int')) 
    Ratings = Ratings.withColumn("ProductId", Ratings["ProductId"].cast('int')) 
    Ratings = Ratings.na.drop() 
(train, test) = Ratings.randomSplit([0.8, 0.2]) 
Model = (ALS(maxIter=3,regParam=0.01,rank=4, 
userCol="UserId",itemCol="ProductId",ratingCol="Ordered", 
implicitPrefs=True,nonnegative=True)) 
    Fit = Model.fit(train) 
    print(Model.getImplicitPrefs) 
    Pred = Fit.transform(test) 
    Pred = Pred.na.drop() 
    Pred.toPandas().to_csv("Prediction.csv") 
    print("before printing") 
    #print(Pred.show(100)) 
    Evaluator = RegressionEvaluator(metricName="rmse",labelCol="Ordered",predictionCol="prediction") 
    rmse = Evaluator.evaluate(Pred) 
    print("rmse is",str(rmse)) 

Antwort

0

Sie sollten über Ihre Vorgehensweise nachdenken. Wenn Ihr Datensatz nur eine binäre Rückmeldung enthält, ist die von Ihnen verwendete Metrik nicht geeignet. Der RMSE wird für Regressionen verwendet (d. H. Für die Vorhersage von kontinuierlichen Werten). Für Empfehlungssysteme, die mit implizitem Feedback arbeiten, wäre eine geeignete Metrik die Genauigkeit oder der Rückruf. Cremonsesi et al. schrieb ein großartiges Papier über die Bewertung von Top-N Recommender Systems (https://dl.acm.org/citation.cfm?id=2507225).