我使用矩阵分解作为基于用户点击行为记录的推荐系统算法。我尝试了两种矩阵分解方法:
第一个是基本SVD,其预测只是用户因子向量 u 和项目因子 i 的乘积:r = u * 我
我使用的第二个是具有偏置分量的SVD。
r = u * i + b_u + b_i
其中 b_u 和 b_i 表示用户和项目偏好的偏差。
我使用的其中一个型号的性能非常低,另一个是合理的。我真的不明白为什么后者表现更差,我怀疑它是否过度拟合。
我用google搜索过度拟合的方法,发现学习曲线是一种好方法。但是,x轴是训练集的大小,y轴是精度。这让我很困惑。如何更改训练集的大小?从数据集中挑出一些记录?
另一个问题是,我试图绘制迭代 - 损失曲线(损失是)。似乎曲线是正常的:
但我不确定这种方法是否正确,因为我使用的指标是精确和回忆。我应该绘制迭代精度曲线???或者这个已经告诉我的模型是正确的?
有人可以告诉我,我是否朝着正确的方向前进?非常感谢。 :)
答案 0 :(得分:0)
我会反过来回答:
所以你正在尝试两种不同的模型,一种使用直接矩阵分解r = u * i而另一种使用输入偏差的模型,r = u * i + b_u + b_i。
您提到您正在为推荐系统进行矩阵分解,该系统会查看用户的点击次数。所以我的问题是:这是一个隐含的评级案例吗?还是明确的?如果是关于点击,我认为这是一个隐含的评级问题。
这是您需要非常清楚的第一件重要事情,无论您的问题是关于明确或隐含的评分。因为它们的使用和实施方式存在一些差异。
如果你在这里查看: http://yifanhu.net/PUB/cf.pdf
隐含评级的处理方式是,例如,某人点击或购买给定项目的次数用于推断置信度。如果检查错误功能,您可以看到置信水平几乎用作权重因子。所以整个想法是在这种情况下,偏见没有意义。
在显式评分的情况下,其中一个评分作为分数,例如1-5,可以计算用户和产品的这些偏差(这些有界分数的平均值),并将其引入评级公式中。他们在他的场景中有意义。
重点是,根据您是在一个场景还是另一个场景,您可以使用或不使用偏见。
另一方面,你的问题是关于过度拟合,因为你可以用测试错误绘制训练错误,根据数据的大小,你可以有一个保持测试数据,如果错误差异很大,那么你是过度拟合。
另一件事是矩阵分解模型通常包括正则化术语,请参阅此处发布的文章,以避免过度拟合。
所以我认为在你的情况下你遇到的问题与我之前提到过的问题不同。