如何评估来自不完整数据的预测,其中并非所有数据都是不完整的

我使用非负矩阵分解和非负最小二乘法进行预测,我想评估预测的质量取决于所提供数据的数量。例如,原始数据是

original = [1, 1, 0, 1, 1, 0]

现在我想看看当给定的数据不完整时,我能在多大程度上重建原始数据:

incomplete1 = [1, 1, 0, 1, 0, 0],incomplete2 = [1, 1, 0, 0, 0, 0],incomplete3 = [1, 0, 0, 0, 0, 0]

我想对大数据集中的每个示例都进行这样的操作。现在的问题是,原始数据中正数据的数量是变化的,上面例子中有4个,但在数据集的其他示例中可能更多或更少。假设我进行了一轮评估,给定了4个正数据,但我的数据集有一半只有4个正数据,另一半有5、6或7个。我应该排除那有一半只有4个正数据的部分吗,因为它们没有缺失数据,这使得“预测”效果更好?另一方面,如果我排除数据,我会改变训练集。我该怎么办?或者在这种情况下我根本不应该用4个进行评估吗?

编辑:

基本上我想看看我能在多大程度上重建输入矩阵。为了简化,假设“原始”代表一个观看了4部电影的用户。然后我想知道,基于用户实际观看的一部电影,我能在多大程度上预测每个用户。我会得到很多电影的预测。然后我会绘制ROC和精确度-召回率曲线(使用预测的前k个)。我将用用户实际观看的n部电影重复所有这些操作。我将为每个n在我的图表中得到一个ROC曲线。当我使用用户实际观看的4部电影来预测他观看的所有电影时,但如果他只观看了这4部,效果会变得太好。

我这样做的原因是想看看我的系统需要多少“观看的电影”来做出合理的预测。如果它在已经观看了3部电影时才返回好的结果,那在我的应用中就不那么好了。


回答:

我认为首先要明确你试图测量什么,以及你的输入是什么,这一点很重要。

你真的是在测量重建输入矩阵的能力吗?在协同过滤中,输入矩阵本身本质上是非常不完整的。推荐系统的整个工作就是填补一些空白。如果它完美地重建了输入,它将不会给出任何答案。通常,当使用NNMF进行协同过滤时,你的评估指标与此完全不同。

顺便说一下,我正在商业化这个——基于矩阵分解的协同过滤——作为Myrrix。这是基于我在Mahout的工作。你可以阅读关于产品中对像曲线下面积(AUC)这样的测试的初步支持的文档,已经在产品中

这里的“原始”是否是你输入矩阵中一行的示例,可能是针对一个用户的?当你谈到一半和排除时,你指的是什么训练/测试分割?是分割每个用户,还是跨用户取一个子集?因为你似乎在谈论测量重建误差,但这不需要排除任何东西。你只需将你的矩阵因子重新乘在一起,看看它们与输入有多接近。“接近”意味着低的L2/弗罗贝尼乌斯范数。

但是对于常规的推荐系统测试(如AUC或精确度-召回率),这完全是另一回事,你要么按时间将数据分割成测试/训练(最近的数据是测试数据),要么按值(最喜欢或相关的项目是测试数据)。如果我理解0是输入矩阵中缺失的元素,那么它们实际上不是“数据”。你永远不会有测试数据都是0的情况,因为它们一开始就不是输入。问题是,哪些1是用于训练的,哪些1是用于测试的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注