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