学习机器学习时,我们可能接触到KNN算法,这是一中间的算法,是利用距离来表征两者之间的相似度。这一算法最经典的应用就是给相似人群做推荐系统。这里对算法内容不做详细解释,只是引发两个疑问,和大家一起思考一下。
首先,假设,这是一个电影平台,如果你是Netflix用户,Netflix将不断提醒你:多给电影评分吧,你评论的电影越多,给你的推荐就越准确。现在你明白了其中的原因:你评论的电影越多,Netflix就越能准确地判断出你与哪些用户类似。
第一个问题:在Netflix示例中,你使用距离公式计算两位用户的距离,但给电影打分时,每位用户的标准并不都相同。假设你有两位用户——Yogi和Pinky,他们欣赏电影的品味相同,Yogi给喜欢的电影都打5分,而Pinky更挑剔,只给特别好的电影打5分。他们的品味一致,但根据距离算法,他们并非邻居。如何将这种评分方式的差异考虑进来呢?
第二个问题:假设Netflix指定了一组意见领袖(类似专业的影评)。例如,Quentin Tarantino和Wes Anderson就是Netflix的意见领袖,因此他们的评分比普通用户更重要。请问你该如何修改推荐系统,使其偏重于意见领袖的评分呢?
第三个问题:K指的是邻居的数量,那我该选几个比较合适呢?
解答第一个问题,需要用到数据的预处理手段,就是对两者的数据进行归一化处理(normalization)。你可计算每位用户平均评分,并据此来调整用户的评分。例如,你可能发现Pinky的平均评分为星3,而Yogi的平均评分为3.5星。因此,你稍微调高Pinky的评分,使其平均评分也为3.5星。这样就能基于同样的标准比较他们的评分了。至于什么是归一化处理,可以参考我的另一篇博客
https://blog.csdn.net/weixin_42575020/article/details/82944291
解答第二个问题,可在使用KNN时给意见领袖的评分更大权重。假设有3个邻居——Joe、Dave和意见领袖Wes Anderson,他们给Caddyshack的评分分别为3星、4星和5星。可不计算这些评分的平均值 (3 + 4 + 5) / 3 = 4星,而给Wes Anderson的评分更大权重:(3 + 4 + 5 + 5 + 5) /5 = 4.4星。(类似于我们平时说的一票顶三票)
解答第三个问题:如果考虑的邻居太少,结果很可能存在偏差。一个不错的经验规则是:如果有N位用户,应考虑sqrt(N)个邻居。,但也不是绝对,具体可根据实际工作中的需要自己把握。