我想使用ALS(交替最小二乘矩阵分解)从训练数据中获得一些预测。在我之前的理解中,mllib
和ml
包中的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
在上面的代码中,当我分别使用ml
和mllib
时,训练数据和测试数据是相同的。但是输出是不同的。此外,预测的数量应该等于测试数据的数量。但是,在我的情况下, input1 = input2 ,这是好的,但是 input3< input1 ,这意味着一些预测消失了!!
ml
中的ALS与' mllib`中的ALS不同?