mllib中的ALS vs ml中的ALS ---- spark

时间:2016-04-27 03:00:14

标签: apache-spark apache-spark-mllib apache-spark-ml

我想使用ALS(交替最小二乘矩阵分解)从训练数据中获得一些预测。在我之前的理解中,mllibml包中的ALS执行相同的工作,这意味着当训练数据和测试数据相同时,两种方法都具有相同的输出。

然而,也许我很担心。请查看以下代码:

from pyspark import SparkContext

sparkC = SparkContext()
sqlC = SQLContext(sparkC)
trainData = sparkC.textFile("Data/trainData.txt").map(lambda line:line.split("\t"))
testData = sparkC.textFile("Data/testData.txt").map(lambda line: line.split("\t"))
print(testData.count())  # output1

#---------when use ml package----------------
from pyspark.ml.recommendation import ALS

als = ALS(rank = 10,maxIter = 20)
model = als.fit(trainDataFrame)
predTestData = model.transform(testDataFrame)
print(predTestData.count())  ####  output2
#----------------------------------------------

#---------when use mllib package----------------
from pyspark.mllib.recommendation import ALS
model = ALS.train(trainData, 10, seed=3, iterations=20)

predTestData = model.predictAll(testData).\
map(lambda r: (r.user, r.product, r.rating))
print(predTestData.count())   ####   output3

在上面的代码中,当我分别使用mlmllib时,训练数据和测试数据是相同的。但是输出是不同的。此外,预测的数量应该等于测试数据的数量。但是,在我的情况下, input1 = input2 ,这是好的,但是 input3< input1 ,这意味着一些预测消失了!!

这是什么原因造成的?或ml中的ALS与' mllib`中的ALS不同?

0 个答案:

没有答案