如何评估不完整数据的预测,而不是所有数据都不完整

时间:2012-09-01 11:45:27

标签: machine-learning evaluation prediction least-squares collaborative-filtering

我使用非负矩阵分解和非负最小二乘进行预测,我想根据给定的数据量来评估预测的好坏程度。例如,原始数据是

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部电影的情况下只能取得好成绩,那么我的应用程序就不会那么好了。

1 个答案:

答案 0 :(得分:1)

我认为首先要明确你要衡量的是什么,以及你的意见是什么。

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

FWIW我正在商业化这个 - 基于矩阵分解的CF--为Myrrix。它基于我在Mahout的工作。您可以阅读有关tests like Area under curve (AUC) in the product的基本支持的文档。

这里的“原始”是输入矩阵中可能是一个用户的一行示例吗?当你谈到一半,并排除,你指的是什么训练/测试分裂?拆分每个用户,或跨用户分组?因为你似乎在谈论测量重建错误,但这并不需要排除任何东西。您只需将矩阵因子重新加倍,看看它们与输入的接近程度。 “关闭”意味着低L2 / Frobenius标准。

但是对于常规推荐测试(如AUC或精确回忆),这些测试完全不同,您可以按时间将数据分成测试/训练(最近的数据是测试数据)或值(最喜欢的或相关的)项目是测试数据)。如果我理解0是缺少输入矩阵的元素,那么它们实际上不是“数据”。你不会遇到测试数据都是0的情况,因为它们不是一开始就输入的。问题是,哪一个用于培训,哪一个用于测试。