scala - MLlib MatrixFactorizationModel RecommendationProducts(user, num) 还返回训练数据产品项
问题描述
我使用 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 推荐商品时,我所期望的只是推荐用户尚未购买的产品。但令我惊讶的是,为什么模型返回的数据已经存在于训练数据中。
有人可以帮我如何避免训练数据本身被预测吗?
解决方案
推荐阅读
- python - 用于访问用户 OneDrive 的 Microsoft Graph API 代码库解决方案
- javascript - 如何从javascript代码执行点击事件
- mongodb - Robo 3T:无法连接到 MongoDB
- sql - 尝试从 POSTGRES 中的数组解包值时,UNNEST 不起作用
- python-3.x - PyQt5:Qstyle.CC_ScrollBar 呈现在错误的位置
- c# - 在 C# 中创建一个 ErrorProvider 数组
- cuda - cudaGetDeviceCount 返回错误:1 个无效参数
- python - 如何在循环浏览包含不同页数的 URL 时抓取分页表
- ios - React Native:图像 uri 不加载(仅在 iOS 中)
- neo4j - 在非常大的图上收集和排序节点的查询优化