看过好几把关于机器学习的书,但是很多书只是停留于算法原理阶段,或者更着重介绍算法原理, «集体智慧编程»这本书更多的是从实践来介绍书,比如你要撘一个推荐系统你怎么做,,还有怎么来做一个垃圾邮件过滤系统等….
接下来介绍一下我对于做一个推荐系统的理解.
前言 #
推荐系统是一个什么东西呢
简单来说就是两个字—-推荐
推荐系统的出现是伴随评价系统出现而出现的,评价系统就是我们的打分制,比如对一部电影每个人都对他进行打分
用户 | 电影A评价 | 电影B评价 | 新电影C评价 | 新电影D评价 |
---|---|---|---|---|
张三 | 5.0 | 3.5 | 4.9 | 2.0 |
李四 | 2.5 | 5.0 | 2.0 | 3.0 |
王二 | 3.1 | 4.7 |
比如现在三个人张三李四王二,王二有两部电影没有看过,但是张三和李四看过了,现在就是要把电影C或D推荐给王二,推荐系统就是从其他数据分析来确定推荐次序
相似度 #
推荐系统如何根据其他用户的数据来推荐呢
这里就要介绍一个相似度的概念,也可以加权系数,对于张三和李四,这两个人都看过电影C和D,但是我们该听谁的呢,我们可以把两个人的评价加起来然后排序,但是假如张三和李四品味相差太多,而且张三的评价可能会把某个王二喜欢看的电影评价总值拉低
这个时候我们就要考虑一个相似度问题,就是尽量避免一些品味同王二不同的人对排名造成影响
这里我们引进相似度这个概念,我们看张三和李四对电影A、B同王二的差别,这里我们使用距离这个概念,我们使用距离公式 l=((r1^2 + r2^2+....rN^2)^1/n)
然后通过距离算得S(相似度)=1/(1+l)
当l=0时,两者相似度为1(最大),当l很大时,相似度几乎为零
用户 | 电影A评价 | 电影B评价 | 相似度 |
---|---|---|---|
张三 | 5.0 | 3.5 | 0.23 |
李四 | 2.5 | 5.0 | 0.59 |
通过求相似度(权重)我们就把同我们臭味相投的人的评价提高了,那些同我们不一样品味的人评价作用降低了
选择 #
基于人物的评价推荐有个缺点就是人的评价有时候会比物品多,而且变化频繁,假如使用上面的方法的话,每次每一个用户评价过后,就要重新算一次相似度了,假如用户不多或者电影不多还好,一旦数据偏多服务器就扛不住了
所以我们要换一个角度出发,计算物品的相似度,这样图表就变成这样了
电影 | 用户-张三 | 用户-李四 | 相似度 |
---|---|---|---|
A | 5.0 | 2.5 | |
B | 3.5 | 5.0 |
这样有个好处就是可以离线处理数据,我们可以搭建一个离线处理系统,让一个系统专门处理数据,当服务器需要的时候再拿取过去.
总结 #
搭建一个简单推荐系统并不会你想象中那么简单,但是要搭建一个功能强大速度快的推荐系统需要的不仅仅是这么一点,还需要考虑系统的稳定和速度.