Python KNeighbors 分类器

标签 python scikit-learn

我在使用 sklearn.neighborsKNeighborsClassifier 时遇到了一些问题

我有一个巨大的电影评分文件,其中每一行代表一个用户,每一列代表一部电影。

我想根据他评价过的电影和其他用户的评价向他推荐一部电影(他还没有看过)。

我试过:

    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/

相关文章:

python - 如何用 Python 覆盖文件中间的一些字节?

python - 用于 token 安全的 urllib2 自定义处理程序

python - 创建原型(prototype)向量进行比较

python - 用 scipy.sparse 计数

python - sklearn fit_predict不接受二维numpy数组

machine-learning - 使用 scikit-learn Logistic 回归获取特征权重

python - 如何替换参数给定的字符串中的特定元素

python - 如何在 Shapely 中找到一组 2D 点的最小包围矩形?

python - CSRF 攻击是否适用于 API?

python - 对 Python 列表语法感到困惑