我刚刚为基于项目的协作过滤创建了一个算法,该算法可以获取表单[username]=>[item]=>[rating]中的一组数据,并通过计算用户使用该项目并对其进行评级时将给予该项目的评级的预测,基于用户已评级/购买的当前项目来推荐其他项目。
我的问题是,我如何检查我的推荐系统的准确性?
发布于 2011-09-14 08:35:42
选择一些随机的用户和项目,并尝试使用您的算法来预测评级。计算您的预测和实际评分之间的RMSE。值越低越好。
根据你的算法,你对项目进行评级的事实可能会给你的RMSE带来很大的偏差。在这种情况下,就像你不知道评级一样进行计算(例如:将所有内容移动到一个单独的数据库,并丢弃你试图“预测”的记录)。
有趣的阅读:The Netflix Prize
发布于 2011-10-21 09:02:16
像Apache Mahout这样的库提供了一个框架来自动完成这项工作。
但让我假设您想要编写自己的解决方案。
通常,您使用cross-validation测试准确性。因此,获取一个评级数据集。将其分为两个集合,一个集合是训练集,另一个集合是“测试集”。通常,这是通过随机挑选80%的用户并将他们放入训练测试中,并将剩余的20%用于测试集来完成的。
一个接一个地选择测试集中的用户。为了测试你的准确性,你可以使用一个除了一个之外的所有指标:从这次使用中隐藏一个评级,并尝试预测它。(一些作者称它为leave-one-out,而不是all-but-one。)只使用训练集和来自这个用户的数据(当然,除了您隐藏的评级)。每次你这样做,你都会得到一个错误,你可以把它们加起来,除以你所做的预测的数量。这是平均平均误差。
当然还有其他方法可以做到这一点。
发布于 2014-09-04 11:12:29
我喜欢均方根误差,但另一个可能有帮助的方法是“Mean Average Precision @K”,也就是“MAPK”。
MAPK的“平均精确度”部分仅仅是前K个推荐的相关性。所以基本上,看看你的模型对推荐的预测,看看在实际的结果集中有多少是“命中”(在这种情况下,实际的结果集=用户为其提供评级的项目集)
这个like给出了我正在讨论的一个很好的例子:http://makarandtapaswi.wordpress.com/2012/07/02/intuition-behind-average-precision-and-map/
https://stackoverflow.com/questions/7410030
复制相似问题