我正在创建一个推荐系统,根据来自同一地区的其他用户的数据为用户推荐产品。
我的数据集如下
UserId Product Region Rating
1 A R1 1.23
2 A R1 1.23
3 A R1 1.24
4 B R1 1.45
5 B R1 1.23
我正在使用NearestNeighbour算法来找到 k 个最近的邻居
首先对于准备步骤,我确实得到了假人
dummies = pd.get_dummies(df)
这将热列 (userId和Product)
应用最近邻
不是确切的代码..只是写了一部分。
neigh = NearestNeighbors(algorithm="euclidean")
neigh.fit(dummies)
使用kneighbours方法获取 5 个最近的邻居
neigh.kneighbors(input_1,5, return_distance=True)
我通过了第一排假人input_1。
我确实收到了结果。但建议是行索引 [2,3 5]
这也是有道理的。地区、评级和产品几乎相同,因此它返回索引 2、3 和 5。
在这种情况下,前两个邻居是相同的产品(Product A)。只有第三个是不同的产品(Product B)。
在我的数据集中,我有超过 60k 行。即使 k=50,我也得到了相同产品的所有索引。
我尝试了另一种方法,
生成假人后,我取第一行(用于输入)并删除所有包含product A相关的行,然后运行 fit 和 kneighbors。- 但它似乎没有效率。这更像是对每一行一次又一次的训练模型。
问题:
方法或算法完全错误吗?如何使用 NearestNeighbour 推荐不同的产品。