在实践中,人们如何处理推荐矩阵中的缺失值,这是进行计算的重点?通过阅读 Simon 的博客文章,我猜想他只使用非缺失项来构建模型。
没错——这就是他和你的模型的重点,预测缺失的项,对吗?这是许多人实际上忘记的关键点。他们认为他们可以“假设”为丢失的数据预先分配一个常量,而无需关心世界,并且事情会神奇地从 SVD 中很好地解决。垃圾进,垃圾出:这是真的,你最好看。如果您希望得到有用的结果,最好不要将垃圾数据提供给模型。
在多数稀疏数据集上“最好推断出任何缺失值”当然不是“最好的”,然后在其上运行 SVD,希望能为您估算值(在运行 SVD 之前您已经估算过,对吧?)。你怎么看,模型是魔法?克服大多数垃圾数据既没有魔法也没有技术。当数据根本不真实时,您不能对模型说数据是真实数据,而实际上只是一些您凭空捏造的垃圾。
SVD 还做了其他有用的事情,所以我当然不是说 SVD 至少一文不值。继续并仅在完整数据集上使用 SVD,也许您已经在已经使用机器学习模型的情况下智能地估算了缺失值,并在其开发过程中充分注意偏差误差和方差误差。
机器学习是方法。因此,如果您仍然想知道如何使用矩阵分解设计来估算值,那么使用机器学习肯定有很好的方法可以做到这一点,而且重要的是它们不会将任何垃圾数据提供给模型以无意义地尝试学习。
斯坦福在线课程挖掘海量数据集的讲师在模块 5 中很好地介绍了这种机器学习矩阵分解模型。他们向您展示了数学并解释了模型。不过,他们不会为您编写代码。
没关系,因为如果您了解基本的机器学习,您可以自己编写代码。你知道什么是损失函数和成本函数吗?正则化?梯度下降?你对矩阵乘法和加法好吗?偏差误差和方差误差?如果是这样,那么你很好。如果没有,那么您应该考虑在 Coursera 上学习 Andrew Ng 的在线课程机器学习,这是许多好的起点之一。然后还可以参加在线课程挖掘海量数据集,该课程准确地讨论了矩阵分解和机器学习以制作推荐模型。
可以这么说,您可以完全设计和编写自己的分解模型,该模型可以很好地处理丢失的数据,就像 Simon Funk 所做的那样,您可以从头开始,但不再像以前那样难了在他那个时代,因为现在您可以使用 TensorFlow 或 Microsoft CNTK 之类的工具,这对您有很大帮助。定义损失函数和成本函数,选择优化器,从实际可用的数据(标记数据)中将数据集划分为训练、开发、测试并让它运行。说真的,它有效。调试 TF 及其图形构建错误并不容易,但它最终可以很好地工作,并且只需要不到一页的代码。
具体来说,不将虚假数据提供给矩阵分解机器学习模型的一种方法是在损失函数和成本函数中跳过缺失数据的矩阵元素。