我正在阅读维基百科上的推荐系统,"算法"一节似乎暗示K最近邻和基于协同过滤的用户算法是两回事.它是否正确?鉴于我的理解,他们俩都不一样吗?如果没有,它们之间有什么区别?谢谢.
ffr*_*end 15
不完全是.它们是相似的(它们有相同的想法),但它们之间有几个主要的区别.事实上,维基百科上的文章仅描述了实现推荐系统的两种最不同的方式,但是有更多的方法使用这两种方式的想法.
所以这就是我理解维基百科文章的方式.
首先,KNN不是第一种方法的主要特征.它只是一个在整个集合中查找最近项的算法,因此它也可以用于协同过滤.最重要的想法在于术语"相似性".要向相关用户推荐某些内容,您会发现他所在社区的人员具有相似的个人资料.例如,您想在Facebook上为用户John推荐.你看看他的Fb个人资料,然后是他朋友的个人资料.你找到10个有相似个人资料的人,并检查他们喜欢什么.如果10个人中有8个像新电影一样有类似的配置文件,那么John很可能也喜欢它.
所以,这里有两点重要:
维基百科的文章没有涉及如何找到相似性度量的问题,但有很多方法,包括在配置文件的文本中搜索常用术语,找到最好的朋友(我之间的消息数量,连接图分析等)和许多其他.
在第二种方法中,您不需要分析邻域并找到类似的配置文件,但您需要收集用户选择.让我们回想一下Facebook用户John的一个例子.想象一下,我们可以获得所有Fb用户的所有"喜欢",包括John的用户.使用它们,您可以构建非常大的相关矩阵,其中行是用户ID,列是他们可能"喜欢"的所有可能项目.如果实际上"喜欢"了一个项目,则当前用户和当前项目的单元格设置为1,否则为0.
使用这样的矩阵(构建或抽象),您可以使用关联挖掘来查找最强大的关联.例如,喜欢"加勒比海盗2"的10000人也喜欢"加勒比海盗3",但只有500人喜欢"Saw".所以我们可以假设2集"海盗"之间的联系更强.请注意,我们既没有分析用户,也没有分析电影本身(我们没有考虑电影名称,情节,演员或类似的东西 - 只有"喜欢").这是协同过滤相对于基于相似性的方法的主要优点.
最后,为了向用户John推荐电影,你只需迭代他的"喜欢"并找到与当前关联最强的其他项目.
所以,重要的一点是:
这两种方法都有其优点和缺点.第一种方法是基于人们之间的某种联系(例如Facebook上的朋友),几乎不能用于像亚马逊这样的服务.同时,第二种方法基于所有用户的平均偏好,因此对于具有高度不同优惠的系统而言不是好的选择.
我将举例说明两种方法:
这两种方法之间的区别与向邻居寻求建议与向朋友寻求建议几乎相同:
此外,在第一种情况下,您查看 K 个邻居(这是一个固定数字),在第二种情况下,您查看所有数据集。
在某些情况下, 可以提供比其他更好的建议:
例如:
如果我想买一台电视,我问住在大房子里的朋友,他会建议我买大屏幕。但是住在我隔壁公寓的邻居会建议我买一个小的,因为大的不适合他的公寓。(与我的类似)。所以在这种情况下我邻居的建议更好。
如果我想买一部电影,我最好的朋友显然会比我的邻居给我更好的建议。