【发布时间】:2014-05-26 15:40:56
【问题描述】:
我正在尝试在 python/pandas/numpy/sklearn 中构建基于内容的推荐系统。
以下是所涉及的矩阵及其大小:
X: n_customers * n_features(包含每个客户的特征)
Y: n_customers *n_products(包含每个客户对每个产品的评分)
Theta:n_features * n_products
目的是学习 Theta,以便能够预测客户对所有产品的评分 (X*Theta)。实际上,Y 是一个稀疏矩阵,客户得分仅占产品总量的很小百分比。这就是 Y 包含很多 NaN 值的原因。
这是我的问题:
这是一个包含许多目标的回归问题(此处目标 = 产品)。但我只想对非空值进行回归。因为 NaN 的数量因一种产品而异,我该如何对其进行矢量化?
假设有 1000 种产品和 100 000 名客户,每个产品都有 20 个功能。
对于每个产品,我需要对非空值进行回归。所以如果没有向量化,我需要 1000 个不同的回归器,每个回归器学习一个长度为 20 的 Theta 向量。
如果可能的话,我想用 sklearn 解决这个问题。例如,岭回归考虑了多个目标(Y 作为矩阵)
我希望它足够清楚。
感谢您的帮助。
【问题讨论】:
-
我不知道为什么你有空值,任何
scipy.sparce矩阵都表示缺失值为0。另外,你不知道有多少产品功能,对吧? -
实际上 Y 是我从 pandas 中的 pivot 命令构建的 DataFrame。我使用稀疏这个词来强调这样一个事实,即每个客户只对少数产品(例如从 2 到 6)进行评分,而产品却超过 1000 种。我为每个客户提供功能(比如说 20 个)。这在 X DataFrame (n_customers*n_features) 中表示。关于客户的所有特征都是已知的
-
从你的问题来看,我不推荐
sklearn.linear_model.ridge回归对象。是的,它们是多目标,但截至目前,这些目标不能通过例如任何方式链接或共享信息。协方差矩阵。由于您的问题有许多缺失值,因此隐式或显式使用目标产品之间共享的信息至关重要。您是否研究过矩阵完成技术?这不完全是您想要做的,但可能会有所帮助。例如,您可以将 X 和 Y 水平粘贴在一起并尝试估算缺失值。
标签: python numpy machine-learning scikit-learn recommendation-engine