今天突然想到做一个小的实用性推荐系统,其目的主要是为了“检验真理”。
如今推荐系统到处都有,netflix、youtube,淘宝,京东,当当 ,亚马逊,可以说成了电商平台不可或缺的功能。当然,我们用的网易云音乐,豆瓣电影等也有推荐。因为有8/2原则,即80%的销售额依赖于20%的热门品牌。
推荐系统组成 = 前端展示页面 + 后台日志系统 + 推荐算法系统
前端展示当然是给用户看的结果
日志系统主要是记录用户行为,并按照一定格式生成一个数据集
推荐算法是推荐与用户喜欢的物品类似的物品
查阅资料发现,传统的推荐系统原理其实蛮简单的。下面按照我自己的理解来阐述下,简单易懂。
最经典的例子就是用户电影评分,网上大把相关的博客和技术文章。
咱们要实现的目标是找到这几对关系,电影->电影,电影->用户,用户->电影,用户->用户
用户 电影1 电影2 电影3 电影4
小明: 1 0 0 4
小红: 4 0 2 0
小李: 0 0 3 4
这里用0-9表示用户对电影的评分,当然假设评分为0的表示用户还未看过。
现在要给小明推荐一部电影,需要从他看过并给出评分的电影中找到相关联的,也就是计算电影2与电影1、电影4的相似度,以及电影3与电影1、电影4的相似度。
相似度的计算最简单的是欧氏距离
A(X1,Y1),B(X2,Y2) 则A、B的距离 d = sqrt((X1-X2)^2+(Y1-Y2)^2)
电影2与电影1的相似度为 similar1 = 1/sqrt(1+(0-1)^2+(0-4)^2+(0-0)^2)
电影2与电影4的相似度为 similar1 = 1/sqrt(1+(0-4)^2+(0-0)^2+(0-4)^2)
……
这里+1和取倒数是因为要归一化成0-1的值 当距离越大时,相似度越接近0,当距离为0时,相似度为1
用相似度乘以评分可以得到一个带权的值,再对它排序,就可以得到真正想要的相似物品。