我在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/

10-12 05:39