Prediction 利用效用矩阵SVD训练推荐系统时,如何对测试集进行预测?

Prediction 利用效用矩阵SVD训练推荐系统时,如何对测试集进行预测?,prediction,svd,test-data,recommender-systems,Prediction,Svd,Test Data,Recommender Systems,这听起来可能很愚蠢,但我没有通过效用矩阵构建推荐系统的工作流:X[I,j]=第I个用户对第j个对象的喜爱程度。关于实际问题,我参考 假设仅从训练集创建的X是一个稀疏矩阵,其条目大多未知/缺失。通过某种方法,我们设法找到U和V,使X的已知条目与UV的相应条目之间的差异最小化。现在是对测试集进行预测的时候了 如果一对(用户、对象)已包含在X的未知条目中,我们是否应该信任位于UV相同位置的值?我以为这就是效用矩阵和SVD的全部要点,直到Simon写了很多关于“SVD算法倾向于把稀疏观察的电影或用户

这听起来可能很愚蠢,但我没有通过效用矩阵构建推荐系统的工作流:X[I,j]=第I个用户对第j个对象的喜爱程度。关于实际问题,我参考

假设仅从训练集创建的X是一个稀疏矩阵,其条目大多未知/缺失。通过某种方法,我们设法找到UV,使X的已知条目与UV的相应条目之间的差异最小化。现在是对测试集进行预测的时候了

  • 如果一对(用户、对象)已包含在X的未知条目中,我们是否应该信任位于UV相同位置的值?我以为这就是效用矩阵和SVD的全部要点,直到Simon写了很多关于“SVD算法倾向于把稀疏观察的电影或用户弄得一团糟”,然后我就迷路了
对于一个训练集来说,2000万个免费参数仍然是相当多的 只有一亿个例子。虽然这看起来是个好主意 忽略隐式评分矩阵中的所有空格 事实上,我们对其中的内容有一些期望,我们可以 利用这一点对我们有利。这样,这种改进的SVD算法倾向于 把很少观看的电影或用户弄得一团糟。举个例子,, 假设你有一个用户只对一部电影进行了评级,比如说美国电影 美女假设他们给它打2分,而平均值(仅为 4.5,而且它们的偏移量只有-1,所以我们 甚至在雇佣SVD之前,他们都会将其评级为3.5。所以 给SVD的误差为-1.5(真实额定值小于1.5 我们期望)。现在想象一下当前的电影侧功能,基于 在更广泛的背景下,培训是否能够衡量行动的数量,以及 假设这对美国美女来说是微不足道的0.01(意味着它只是 略高于平均水平)。SVD,recall,正在尝试优化 我们的预测,它可以通过最终设置用户的 对行动的偏好超过了巨大的-150.0。也就是说,算法很幼稚 查看该用户偏好的唯一示例, 在目前为止它所知道的唯一一个特性的上下文中 (动作),并确定我们的用户非常讨厌 即使是美国美女最微小的动作也会让它变得很糟糕 比其他情况下可能发生的还要多。这对我们的用户来说不是问题 因为这些随机的明显的相关性,所以有大量的观察结果 平均,真正的趋势占主导地位

  • 如果用户已包含在培训集中,但对象未包含在培训集中(或相反),我们是否使用用户在培训集中给出的平均分数进行预测?或者Simon的博客中的改进者是必需的?更重要的是,我们应该使用XUV来计算(原始或混合)平均值吗
然而,这并不像看上去那么简单。你会认为一部电影的平均收视率是。。。它的平均评级!唉,奥卡姆的剃须刀那天有点生锈了。问题是,用一个极端的例子来说,如果有一部电影只在训练集中出现一次,比如评级为1,那该怎么办。它的平均评分是1吗?可能不会!事实上,你可以把这个单一的观察看作是从真实概率分布中得出的,你想要的平均值。。。你可以把真实的平均值看作是从平均值的概率分布中提取出来的——基本上是平均电影收视率的直方图。如果我们假设两个分布都是高斯分布,那么根据我拙劣的数学,实际的最佳猜测平均值应该是观测平均值和先验平均值之间的线性混合,混合比等于方差比。也就是说:如果Ra和Va是所有电影平均收视率的均值和方差(平方标准差)(它定义了您在观察任何实际收视率之前对新电影平均收视率的预期),Vb是单个电影收视率的平均方差(这告诉你每一个新的观察结果对真实平均值有多大的指示作用——例如,如果平均方差较低,则评级往往接近电影的真实平均值,而如果平均方差较高,则评级往往更随机,指示性较低),然后:

博格斯平均值=总和(观测值)/计数(观测值)

K=Vb/Va

Betterman=[GlobalAverage*K+和(观察到的情况)]/[K+计数(观察到的情况)]