KNN算法是机器学习里面比较简单的一个分类算法了,整体思想比较简单:计算一个点A与其他所有点之间的距离,取出与该点最近的k个点,然后统计这k个点里面所属分类比例最大的,则点A属于该分类。
这次我就打算用knn来实现物品的推荐,还记得前面写的用协同过滤来做商品推荐吗?是不是和knn的实现有点一样呢,都是计算每个实体的与其他实体之间的距离,来实现n个相似的推荐。在这里Knn的实现和协同过滤有点不同,协同过滤里面各个实体的特征并不是都相同的,比如a用户看过x1电影、x2、x3电影,b看过x2、x3电影,c看过x2、x1电影,这样要为b推荐电影,这种特征之间距离的计算必须一一对应,没有相同的特征则会作为推荐的内容。而knn实现的推荐,更多是基于分类的思想,在这里a,b,c三个用户都有同样的特征,最后推荐的物品,则作为他们的分类属性y。如果是为c推荐,这样的话,a、b势必不能缺失分类属性y,而c是缺少属性y的,这个时候,想相当于为c做自动分类,来实现物品的推荐。
刚好,过两天要去参加同事的婚礼,婚礼之后,度蜜月是必须的。在这里,我就模仿下旅游公司为他们推荐度蜜月的旅程。数据纯属虚假,如有雷同,请原谅。。
Customer Age Income plan
1 25 46k 云南游
2 32 100k 日本北海道游
3 40 38k 济州岛7天游
4 20 150k 马尔代夫激情
5 28 51k ???
其中???的地方就是顾客5需要让knn算法自动分类的属性,具体的分类代码我就不写了,在这里主要写一个思路,就是说明可以用knn如何来实现物品的分类。
如果使用最近邻算法回答我们上面遇到的 “第 5 个顾客最有可能去哪里” 这一问题,答案将是云南游。这是因为第 5 个顾客与第 1 个顾客之间的距离要比第 5 个顾客与其他任何顾客之间的距离都短(实际上是短很多)。基于这个模型,可以得出这样的结论:由最像第 5 个顾客的顾客可以预测出第 5 个顾客的行为。