0

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

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

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

r = u * i + b_u + b_i

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

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

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

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

在此处输入图像描述

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

谁能告诉我我是否朝着正确的方向前进?太感谢了。:)

4

1 回答 1

0

我反过来回答:

因此,您正在尝试两种不同的模型,一种使用直接矩阵分解 r = u * i,另一种使用偏差 r = u * i + b_u + b_i。

您提到您正在为查看用户点击的推荐系统进行矩阵分解。所以我的问题是:这是一个隐式评级案例吗?还是显式的?如果它与点击有关,我认为这是一个隐式评级问题。

这是您需要非常注意的第一件重要事情,无论您的问题是关于显式评级还是隐式评级。因为它们的使用和实现方式存在一些差异。

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

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

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

关键是,取决于您是在一种情况下还是在另一种情况下,您是否可以使用偏见。

另一方面,您的问题是关于过度拟合的,因为您可以绘制带有测试错误的训练错误,这取决于数据的大小,您可以拥有一个保留测试数据,如果错误差异很大,那么您就过度拟合了。

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

因此,我认为在您的情况下,您遇到的问题与我之前提到的问题不同。

于 2017-08-28T14:57:33.373 回答