将 trainImplicit 用于推荐系统
Using trainImplicit for a Recommendation system
假设我有一个用户购买产品的数据库(没有评级或类似的东西),我想为他们推荐其他产品。我正在使用 ATL.trainImplicit
,其中训练数据具有以下格式:
[Rating(user=2, product=23053, rating=1.0),
Rating(user=2, product=2078, rating=1.0),
Rating(user=3, product=23, rating=1.0)]
因此训练数据集中的所有评分始终为 1。
预测评分给出最小值 -0.6
和最大评分 1.85
是否正常?我希望介于 0 和 1 之间。
是的,很正常。 ALS 的隐式版本本质上是试图重建二元偏好矩阵 P
(而不是显式评分矩阵 R
)。在这种情况下,"ratings" 被视为置信水平 - 更高的评级等于更高的置信度,即二元偏好 p(ij)
应该重建为 1
而不是 0
.
但是,ALS 本质上解决了一个(加权的)最小二乘回归问题,以找到重构矩阵 P
的用户和项目因子矩阵。因此,不能保证预测值在 [0, 1] 范围内(尽管实际上它们通常 接近 到该范围)。将预测解释为 "opaque" 值就足够了,其中较高的值等同于用户购买该产品的可能性更大。这足以按预测分数对推荐产品进行排序。
(注意项目-项目或用户-用户相似度通常是使用因子向量之间的余弦相似度计算的,因此这些分数将位于 [-1, 1]。该计算在 Spark 中不直接可用,但可以自己做)。
假设我有一个用户购买产品的数据库(没有评级或类似的东西),我想为他们推荐其他产品。我正在使用 ATL.trainImplicit
,其中训练数据具有以下格式:
[Rating(user=2, product=23053, rating=1.0),
Rating(user=2, product=2078, rating=1.0),
Rating(user=3, product=23, rating=1.0)]
因此训练数据集中的所有评分始终为 1。
预测评分给出最小值 -0.6
和最大评分 1.85
是否正常?我希望介于 0 和 1 之间。
是的,很正常。 ALS 的隐式版本本质上是试图重建二元偏好矩阵 P
(而不是显式评分矩阵 R
)。在这种情况下,"ratings" 被视为置信水平 - 更高的评级等于更高的置信度,即二元偏好 p(ij)
应该重建为 1
而不是 0
.
但是,ALS 本质上解决了一个(加权的)最小二乘回归问题,以找到重构矩阵 P
的用户和项目因子矩阵。因此,不能保证预测值在 [0, 1] 范围内(尽管实际上它们通常 接近 到该范围)。将预测解释为 "opaque" 值就足够了,其中较高的值等同于用户购买该产品的可能性更大。这足以按预测分数对推荐产品进行排序。
(注意项目-项目或用户-用户相似度通常是使用因子向量之间的余弦相似度计算的,因此这些分数将位于 [-1, 1]。该计算在 Spark 中不直接可用,但可以自己做)。