我在KNeighborsClassifier
中遇到sklearn.neighbors
的问题
我有一个庞大的电影收视率文件,其中每一行代表一个用户,每一列代表一部电影。
我想根据他给其他用户评分和评分的电影向他推荐一部电影(他还没看过)。
我尝试过:
model = KNeighborsClassifier(n_neighbors=3)
model.fit(user_rated, others_rated)
suggestList = model.predict_proba(others_unrated)
user_rated是(浮动)等级列表
others_rated是2d列表,用户已对其电影评级相同,但由不同用户
others_unrated是2d列表,其中包含当前用户尚未观看的其他用户的电影评分
我认为问题是,因为others_rated是2D列表,但是如果我仅将其与另一个用户(使用
others_rated[user_num]
)进行比较,我将一事无成。如果只为一个或多个用户
model.predict_proba(others_unrated)
插入,使用Incompatible dimension for X and Y matrices
会出现相同的错误。有什么建议么?
最佳答案
我不确定您希望完成什么,但是让我推断一些事情。
首先,others_rated是浮点数的N_movies_rated_by_this_user长度列表的N_users长度列表。
其次,others_unrated是浮点数的N_movies_not_rated_by_this_user长度列表的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 - Python KNeighborsClassifier,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30739262/