私はSpark MLib ALSを使用しており、trainImplicit()
インターフェイスを使用して、暗黙の設定としてユーザが購入したアイテムの番号を入力しようとしています。私は私のモデルを検証する方法を知らない。私の入力はドメイン[1、inf]にありますが、出力予測は(0,1)の浮動小数点のようです。Spark MLib ALSの入出力ドメイン
コードの通常の種類:
from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
from pyspark.sql import HiveContext
from pyspark import SparkContext
sc = SparkContext(appName="Quantity Prediction Model")
hive = HiveContext(sc)
d = hive.sql("select o.user_id as user, l.product_id as product, sum(l.quantity) as qty from order_line l join order_order o ON l.order_id = o.id group by o.user_id, l.product_id")
d.write.save('user_product_qty')
ratings = d.rdd.map(tuple)
testdata = ratings.map(lambda t: (t[0], t[1]))
for rank in (4, 8, 12):
model = ALS.trainImplicit(ratings, rank, 10, alpha=0.01)
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)
# Error is pretty bad because output raitings aren't in the same domain as quantity
ratesAndPreds = ratings.map(lambda r: ((r[0], r[1]), r[2])).join(predictions)
MSE = ratesAndPreds.map(lambda r: (r[1][0] - r[1][1])**2).mean()
print("Rank: {} MSE: {}".format(rank, MSE))
エクストラクレジット:train()
を使用する場合は、入力/出力ドメインは何ですか? 「格付け」は5ポイントスケールになると予想されますか?これはどこにも書かれていません。