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

귀하의 접근 방법에 대해 생각해보십시오. 데이터 세트에 2 진 피드백 만있는 경우 사용하는 메트릭이 적합하지 않습니다. RMSE는 회귀 (즉, 연속적인 값의 예측)에 사용된다. 암시 적 피드백과 함께 작동하는 권장 시스템의 경우 적합한 측정 항목은 정밀도 또는 리콜입니다. Cremonsesi et al. Top-N Recommender Systems (https://dl.acm.org/citation.cfm?id=2507225) 평가에 대한 훌륭한 논문을 썼습니다.