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等人撰写了评估Top-N推荐系统(https://dl.acm.org/citation.cfm?id=2507225)的优秀论文。