在 Apache Spark 中使用 ALS 的结果不一致
Inconsistent results using ALS in Apache Spark
总的来说,我对 Apache Spark 和大数据还很陌生。我正在使用 ALS 方法根据用户、项目和评级矩阵创建评级预测。令人困惑的部分是,当我 运行 计算预测的脚本时,结果每次都不同,输入或请求的预测没有改变。这是预期的行为,还是结果应该相同?下面是Python代码供参考。
from pyspark import SparkContext
from pyspark.mllib.recommendation import ALS
sc = SparkContext("local", "CF")
# get ratings from text
def parseRating(line):
fields = line.split(',')
return (int(fields[0]), int(fields[1]), float(fields[2]))
# define input and output files
ratingsFile = 's3n://weburito/data/weburito_ratings.dat'
unratedFile = 's3n://weburito/data/weburito_unrated.dat'
predictionsFile = '/root/weburito/data/weburito_predictions.dat'
# read training set
training = sc.textFile(ratingsFile).map(parseRating).cache()
# get unknown ratings set
predictions = sc.textFile(unratedFile).map(parseRating)
# define model
model = ALS.train(training, rank = 5, iterations = 20)
# generate predictions
predictions = model.predictAll(predictions.map(lambda x: (x[0], x[1]))).collect()
这是预期的行为。 ALS中的因子矩阵是随机初始化的(实际上一个是,另一个是根据第一步的初始化解决的)。
所以不同的运行结果会略有不同。
总的来说,我对 Apache Spark 和大数据还很陌生。我正在使用 ALS 方法根据用户、项目和评级矩阵创建评级预测。令人困惑的部分是,当我 运行 计算预测的脚本时,结果每次都不同,输入或请求的预测没有改变。这是预期的行为,还是结果应该相同?下面是Python代码供参考。
from pyspark import SparkContext
from pyspark.mllib.recommendation import ALS
sc = SparkContext("local", "CF")
# get ratings from text
def parseRating(line):
fields = line.split(',')
return (int(fields[0]), int(fields[1]), float(fields[2]))
# define input and output files
ratingsFile = 's3n://weburito/data/weburito_ratings.dat'
unratedFile = 's3n://weburito/data/weburito_unrated.dat'
predictionsFile = '/root/weburito/data/weburito_predictions.dat'
# read training set
training = sc.textFile(ratingsFile).map(parseRating).cache()
# get unknown ratings set
predictions = sc.textFile(unratedFile).map(parseRating)
# define model
model = ALS.train(training, rank = 5, iterations = 20)
# generate predictions
predictions = model.predictAll(predictions.map(lambda x: (x[0], x[1]))).collect()
这是预期的行为。 ALS中的因子矩阵是随机初始化的(实际上一个是,另一个是根据第一步的初始化解决的)。
所以不同的运行结果会略有不同。