我在使用 sklearn.neighbors
的 KNeighborsClassifier
时遇到了一些问题
我有一个巨大的电影评分文件,其中每一行代表一个用户,每一列代表一部电影。
我想根据他评价过的电影和其他用户的评价向他推荐一部电影(他还没有看过)。
我试过:
model = KNeighborsClassifier(n_neighbors=3)
model.fit(user_rated, others_rated)
suggestList = model.predict_proba(others_unrated)
user_rated 是( float )评级列表 others_rated 是 2d 列表,具有相同的电影评级用户已评级,但由不同的用户 others_unrated 是二维列表,其中包含当前用户尚未观看的其他用户对电影的评分
我认为问题在于,因为 others_rated 是二维列表,但如果我只将它与其他用户进行比较(使用 others_rated[user_num]
),我将一事无成。
使用 model.predict_proba(others_unrated)
如果仅为一个或多个用户插入,我会得到同样的错误,Incompatible dimension for X and Y matrices
。
有什么建议吗?
最佳答案
我不确定你希望完成什么,但让我推断一些事情。
- 首先,others_rated 是 N_movies_rated_by_this_user 长度的 float 列表的 N_users 长度列表。
- 其次,others_unrated 是 N_movies_not_rated_by_this_user 长度的 float 列表的 N_users 长度列表。
根据这些陈述,在无法访问您的数据文件/数组的情况下,我猜这是您尝试做的正确事情:
import numpy as np
model = KNeighborsClassifier(n_neighbors=3)
model.fit( np.transpose(others_rated),user_rated)
suggestList = model.predict_proba(np.transpose(others_unrated))
我所做的两个更改如下:首先,我几乎可以肯定您在调用 .fit()
时必须交换 X 和 y。如果你不这样做,你的问题就太糟糕了(在数学上)它几乎肯定会失败:你正在尝试训练一个模型来从一个向量中预测一个矩阵(从不多的信息中预测大量的信息)。
其次,按照您提出问题的方式,n_users 应该是列 维度。这是唯一在数学上有意义的事情。调用KNeighborsClassifier.predict_proba(X)
时X的列数必须与之前调用KNeighborsClassifier.fit(X,y)
时X的列数相同>.
关于Python KNeighbors 分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30739262/