机器学习—推荐系统的设计

搜集偏好

首先需要找到一种表达不同人以及其偏好的方法,在python中可以使用一个嵌套的字典来表达。

eg:不同人对几部影片的评价
下面代码命名为:recommendations.py

critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
      'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,
      'The Night Listener': 3.0},
     'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,
      'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,
      'You, Me and Dupree': 3.5},
     'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
      'Superman Returns': 3.5, 'The Night Listener': 4.0},
     'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0,
      'The Night Listener': 4.5, 'Superman Returns': 4.0,
      'You, Me and Dupree': 2.5},
     'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
      'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0,
      'You, Me and Dupree': 2.0},
     'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
      'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
     'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}}
  • 上述字典使用1到5得评分,以此来体现包括本人在内的每位影评者对某一给定影片的喜爱程度。不管偏好是好是坏,我们需要一种方法将它们对应到数字。
  • 在计算购买过某件商品时,可以用1表示购买过,用0表示从未购买过
  • 在统计在线购物信息时,可以用0表示未购买,用1表示已浏览,用2表示已购买
  • 对用户的每个行为都用数字表示相应地评价值。

启用终端,对上述程序进行查询和修改

Last login: Mon Jul  3 20:15:06 on ttys001
Shashas-MacBook-Pro:~ shasha$ cd desktop/recommended
Shashas-MacBook-Pro:recommended shasha$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from recommendations import critics
>>> critics['Lisa Rose']['Lady in the Water']
2.5
>>> critics['Toby']['Snakes on a Plane']=4.5
>>> critics['Toby']
{'Snakes on a Plane': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree': 1.0}
>>> 

寻找新近的用户

搜集完大家的偏好数据之后,我们需要确定人们在人们在品味方面的相似程度。相似度评价值体系:欧几里得距离和皮尔逊相关度

欧几里得距离
- 以评价的物品为坐标轴,然后将参与评价的人绘制到图上,考察彼此之间的距离远近。
- 计算距离的公式,对每一轴向上的差值求平方后相加然后对总和取平方根,python中可以使用pow(n,2)对某数求平方

>>> from math import sqrt
>>> sqrt(pow(5-4,2)+pow(4-1,2))
3.1622776601683795

上述求解距离值,偏好越相似,则其距离就越短。不过我们还需要一个函数,将偏好越相似的情况给出越大的值。为此,我们可以将函数值加1(避免被整数整除的错误),并求解其倒数:

>>> 1/(1+sqrt(pow(5-4,2)+pow(4-1,2)))
0.2402530733520421

这样处理的结果:

  • 让最终计算的值的区间在[0,1]之间,相似度越高答案越大
  • 举例来说明:比如计算出来的距离有 0 0.1 1 10,通过使用加1求导规则,将最终的答案通过分数表现出来,结果为:
    1/1 1/1.1 1/2 1/10
    可以看出当距离越大,最终的结果会越小。

皮尔逊相关度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值