Python KNeighborsClassifier

时间:2015-06-09 17:47:38

标签: python scikit-learn

我对来自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是当前用户尚未观看的其他用户的电影评级的第二列表

我认为问题在于,因为others_rated是2D列表,但如果我将其与其他一个用户(使用others_rated[user_num])进行比较,我将无所作为。 使用model.predict_proba(others_unrated)如果只为一个或多个用户插入Incompatible dimension for X and Y matrices,我会收到同样的错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不确定你希望完成什么,但让我推断一些事情。

  • 首先,others_rated是一个N_users长度的N_movies_rated_by_this_user长度列表的浮动列表。
  • 其次,others_unrated是一个N_users长度的N_movies_not_rated_by_this_user长度列表。

从这些陈述中,如果没有访问您的数据文件/数组,我猜这是正确的做法:

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列数相同。