MLlib MatrixFactorizationModel RecommendationProducts(user,num)还返回训练数据产品项

时间:2018-08-10 03:33:28

标签: scala apache-spark apache-spark-mllib collaborative-filtering matrix-factorization

我已经使用Spark MLib创建了ALS模型:

import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel

// Build the recommendation model using ALS
val rank = 10
val numIterations = 10
val model = ALS.train(trainingGrid, rank, numIterations)

我的训练网格的结构是这样的:

+-----------+----------+---------+--------+---------+
|.  Bought|cidIndex|productIndex|
+-----------+----------+---------+--------+---------+
|     true|    38.0| 113959.0|
|    false|    38.0| 193806.0|
|     true|    38.0| 260716.0|
|     true|    38.0|   7038.0|
|    false|   107.0|  93949.0|
|    false|    38.0|  13484.0|
|    false|    38.0|  59290.0|
|    false|    38.0|  76696.0|
|    false|   107.0|  71311.0|
|     true|    38.0|  92553.0|
+-----------+----------+---------+--------+---------+

它有大约2万条这样的记录。

培训结束后,我打电话给

val products = model.recommendProducts(38,5)

这将使我返回以下项目:

Rating(38,260716,0.9800308437967447)
Rating(38,219601,0.9800308437967447)
Rating(38,61616,0.9800308437967447)
Rating(38,113959,0.9800308437967447)
Rating(38,92553,0.9800308437967447)

这5项问题中的3项已经存在于训练数据中。 260716、113959和92553。

当我致电ALS推荐产品时,我所期望的只是推荐用户尚未购买的产品。但是令我惊讶的是,为什么模型会返回训练数据中已经存在的数据。

有人可以帮助我如何避免训练数据本身得到预测吗?

0 个答案:

没有答案