1

私はSpark ALSで構築されたコラボレーションシステムを持っています。評価の代わりに、私は彼らが購入したものに基づいてユーザーにセット製品を推薦したいと思っていました。だから私は、ユーザーが購入したすべての製品に対して1を設定しています。 ALSシステムを構築しました。予測はスコアとして1を超え、rmseは0.99である。 implicitprefs = Trueを設定しました。以下のコードを見つけてください。 rmseを0.99とするには高すぎますか?それは正しいアプローチですか?バイナリ入力のあるALS

注:forループで反復とランクパラメータを改善しました。

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)) 

答えて

0

あなたのアプローチについて考える必要があります。データセットにバイナリのフィードバックしかない場合、使用するメトリックは適切ではありません。 RMSEは、回帰(すなわち、連続値の予測)に使用される。暗黙のフィードバックで動作する推奨システムでは、適切なメトリックは精度またはリコールとなります。 Cremonsesi et al。トップN推奨システム(https://dl.acm.org/citation.cfm?id=2507225)の評価に関する素晴らしい論文を書いた。

関連する問題