![]() |
1
6
在我看来,你的例子有几点不正确。首先,当您没有特定用户/电影组合的可用排名时,则不应将其填充为零。这将告诉SVD或任何其他类型的主成分分析(PCA),这些是排名(人为较低)。此外,用零填充数据计算的协方差将基于不正确的观测数量计算。
Netflix奖得主(
link for more info
)使用SVD方法的也必须使用某种缺失数据PCA例程。在这种情况下,非值不应为零,而是
我的第二个问题是,您提供的“答案”是否真的基于您在示例中提供的相当小的数据集。给定3个用户乘3个电影数据集,用于计算用户之间相关性的位置非常少,因此任何预测都将非常差。尽管如此,我还是得出了一个结果,但它与你的预期答案不符。 该方法被称为“递归减去经验正交函数”(RSEOF),是专门设计的PCA方法,用于处理缺失数据。也就是说,如果没有更大的训练数据集,我不会对预测有太多信心。
因此,我首先加载原始数据集和预测数据集,然后使用
然后使用
的预测值
对象
我个人认为,这些价值观比你的预期结果更有意义(都在7左右)。例如当查看用户(列)的电影(行)矩阵时,
我希望用户“0”更喜欢电影“2”而不是电影“1”,因为这是用户“1”的趋势。我们之间只有电影“1”的共同排名,以此作为我们预测的基础。您的预期值为7.05,可能低于电影“1”(即8),而RSEOF预测值为9.2。 我希望这对你有所帮助——但是,如果你的预期答案是你想要的,那么我会怀疑“真相持有者”所使用的方法。更可能的是,您只是提供了数据集的一个较小版本,因此我们不会得出与您的较小可复制示例相同的答案。 |
![]() |
2
3
这是一个经典的矩阵完成问题,我们将数据矩阵中的未知值替换为零。您需要首先对数据矩阵进行本征分解(因为它是对称的,但SVD是等效的,请注意U==V)。然后得到A_pred=UEU^T,其中A_pred是A(数据矩阵)的预测完整版本。因此,A[i][j]的预测值简单地为A_pred[i][j]。 |
![]() |
ep84 · Python中处理扩展线性序列的快速(最快)方法 11 月前 |
![]() |
Makogan · 为什么使用`extern`允许运行时链接? 12 月前 |
![]() |
Taylor Fang · 优化此涉及矩阵反转的Python代码 1 年前 |
![]() |
IBArbitrary · 如何使numpy数组启动更快? 1 年前 |
![]() |
I Like Algebra · 在Julia中交换行的最简单方法 1 年前 |
![]() |
smellerbee · numpy表示是列向量吗? 1 年前 |
![]() |
mins · Numpy和线性代数:如何对Axêy进行编码? 1 年前 |
![]() |
John Marston · 如何创建三个角度相等的三维矢量? 1 年前 |