【发布时间】:2016-08-03 04:19:59
【问题描述】:
我需要一些建议来构建一个好的模型来使用 spark 的Collaborative Filtering 进行推荐。 official website 中有一个示例代码。我也过去了:
from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
# Load and parse the data
data = sc.textFile("data/mllib/als/test.data")
ratings = data.map(lambda l: l.split(','))\
.map(lambda l: Rating(int(l[0]), int(l[1]), float(l[2])))
# Build the recommendation model using Alternating Least Squares
rank = 10
numIterations = 10
model = ALS.train(ratings, rank, numIterations)
# Evaluate the model on training data
testdata = ratings.map(lambda p: (p[0], p[1]))
predictions = model.predictAll(testdata).map(lambda r: ((r[0], r[1]), r[2]))
ratesAndPreds = ratings.map(lambda r: ((r[0], r[1]), r[2])).join(predictions)
RMSE = ratesAndPreds.map(lambda r: ((r[1][0] - r[1][1])**2).mean())**.5)
print("Root Mean Squared Error = " + str(RMSE))
一个好的模型需要 RMSE 尽可能小。
是不是因为我没有给
ALS.train方法设置合适的参数,比如rand numIterations等等?还是因为我的数据集太小而无法使 RMSE 变大?
那么任何人都可以帮助我找出导致 RMSE 大的原因以及如何解决它。
补充:
正如@eliasah 所说,我需要添加一些细节来缩小答案范围。让我们考虑一下这种特殊情况:
现在,如果我想构建一个推荐系统来向我的客户推荐音乐。我有他们的曲目、专辑、艺术家和流派的历史率。显然,这4个类构建了一个层次结构。曲目直接属于专辑,专辑直接属于艺人,艺人可能属于几个different流派。最后,我想利用所有这些信息来选择一些推荐给客户的曲目。
那么,为这些情况构建一个好的模型并确保使 RMSE 尽可能小以进行预测的最佳做法是什么。
【问题讨论】:
-
有太多可能的答案,而好的答案对于这种格式来说太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。
-
@eliasah 我添加了一个给定的情况。也许更容易回答。
标签: apache-spark pyspark apache-spark-mllib collaborative-filtering