首先将输入的用户购买历史转换为用户–商品的二值矩阵。行表示用户,列表示商品,如果用户购买过该商品则对应位置为1,否则为0。
使用 scikit-learn 的 NearestNeighbors
,设置
metric='cosine'
(返回的距离为 1−cosine_similarity)algorithm='brute'
某电子商务平台希望使用机器学习来改善用户的购物体验。他们收集了用户的购买历史数据,希望你 能构建一个推荐系统,为用户推荐他们可能喜欢的商品。
你的任务是,使用scikit−learn库,基于用户的购买历史数据,构建一个基于K最近邻(KNN)的推荐系统,并使用Cosine相似度来评估模型的性能。
要求:
1.首先要计算用户之间的Cosine相似度矩阵,然后在推荐系统中使用基于KNN的方法,并且将 KNN的距离度量设置为cosine。
2.KNN的邻居数量n_neighbors参数设为4,其中包括用户自己,最后在生成推荐时排除自己(即实 际使用3个邻居)。
3.推荐的商品必须是用户尚未购买过的商品(即排除已购买的商品)。
4.如果没有合适的商品推荐(例如用户的邻居没有新商品),输出结果中应显示None和相似度为0.0。
5.相同相似度情况下,取ID最小的商品。
输入是一个list,每个元素是一个包含两个元素的list,第一个元素是用户ID,第二个元素是该用户 购买过的商品ID的列表。
输出是一个list,包含三个元素,第一个元素是用户ID,第二个元素是预测的用户可能喜欢的商品 ID,第三个元素是预测的Cosine相似度,保留小数点后3位有效数字。
(1)可以使用形如numpy、pandas、sklearn的第三方代码库。
(2)为了保证唯一性,请严格遵循输入输出描述进行作答。
(3)形如 sys.stdin等方法结合for循环和eval函数即可读取并还原输入数据。
(4)算法使用brute,最近邻数量设置为3。
输入
[[1, [101, 102, 103]], [2, [101, 104]], [3, [102, 103, 105]], [4, [101, 103, 105]]]
输出
[1, 105, 0.667]
[2, 102, 0.408]
[3, 101, 0.667]
[4, 102, 0.667]