我的方法是检测矩阵分解中的过度拟合吗?

时间:2017-08-25 08:15:46

标签: machine-learning recommendation-engine mahout-recommender matrix-factorization

我使用矩阵分解作为基于用户点击行为记录的推荐系统算法。我尝试了两种矩阵分解方法:

第一个是基本SVD,其预测只是用户因子向量 u 和项目因子 i 的乘积:r = u *

我使用的第二个是具有偏置分量的SVD。

r = u * i + b_u + b_i

其中 b_u b_i 表示用户和项目偏好的偏差。

我使用的其中一个型号的性能非常低,另一个是合理的。我真的不明白为什么后者表现更差,我怀疑它是否过度拟合。

我用google搜索过度拟合的方法,发现学习曲线是一种好方法。但是,x轴是训练集的大小,y轴是精度。这让我很困惑。如何更改训练集的大小?从数据集中挑出一些记录?

另一个问题是,我试图绘制迭代 - 损失曲线(损失是)。似乎曲线是正常的:

enter image description here

但我不确定这种方法是否正确,因为我使用的指标是精确和回忆。我应该绘制迭代精度曲线???或者这个已经告诉我的模型是正确的?

有人可以告诉我,我是否朝着正确的方向前进?非常感谢。 :)

1 个答案:

答案 0 :(得分:0)

我会反过来回答:

所以你正在尝试两种不同的模型,一种使用直接矩阵分解r = u * i而另一种使用输入偏差的模型,r = u * i + b_u + b_i。

您提到您正在为推荐系统进行矩阵分解,该系统会查看用户的点击次数。所以我的问题是:这是一个隐含的评级案例吗?还是明确的?如果是关于点击,我认为这是一个隐含的评级问题。

这是您需要非常清楚的第一件重要事情,无论您的问题是关于明确或隐含的评分。因为它们的使用和实施方式存在一些差异。

如果你在这里查看: http://yifanhu.net/PUB/cf.pdf

隐含评级的处理方式是,例如,某人点击或购买给定项目的次数用于推断置信度。如果检查错误功能,您可以看到置信水平几乎用作权重因子。所以整个想法是在这种情况下,偏见没有意义。

在显式评分的情况下,其中一个评分作为分数,例如1-5,可以计算用户和产品的这些偏差(这些有界分数的平均值),并将其引入评级公式中。他们在他的场景中有意义。

重点是,根据您是在一个场景还是另一个场景,您可以使用或不使用偏见。

另一方面,你的问题是关于过度拟合,因为你可以用测试错误绘制训练错误,根据数据的大小,你可以有一个保持测试数据,如果错误差异很大,那么你是过度拟合。

另一件事是矩阵分解模型通常包括正则化术语,请参阅此处发布的文章,以避免过度拟合。

所以我认为在你的情况下你遇到的问题与我之前提到过的问题不同。