推荐系统,集体智慧编程推荐

作者: 网络编程  发布:2019-09-03

公家智慧编制程序——推荐系统(1),集体智慧编制程序推荐

手续一:寻觅偏爱

  大家要做的第一件事就是查究表达区别人及其偏疼的法子。在Python中,抵达这一指标的一个特别轻便有效的办法正是选择贰个嵌套的字典。上面正是新建的八个名字为recommendations.py的公文,参与如下代码达成贰个数据集:

critics={'Lisa Rose':{'Lady in winter':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 winter':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 winter':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,'Superman returns':4.0,'The Night Listener':4.5,'You ,Me,and Dupree':2.5},
'Mick LaSalle':{'Lady in winter':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 winter':3.0,'Snakes on a plane':4.0,'Superman returns':5.0,'The Night Listener':3.0,'You ,Me,and Dupree':3.5},
'Toby':{'Snakes on a plane':4.5,'Superman returns':4.0,'You ,Me,and Dupree':1.0}}

其间数字代表不一样的人对那部电影的评分。

启航python解释程序,并输入上面几行代码,能够观望数据集中的剧情。

>>>import recommendations
>>>critics['Lisa Rose']['Lady in Winter']
2.5

>>>critics['Toby']
{'Snakes on a plane':4.5,'Superman returns':4.0,'You ,Me,and Dupree':1.0}}

手续二:寻觅类似顾客

    首要使用的是相似度评价值。这里最首要有二种方式:欧几Reade距离和Pearson相似度。

1.欧几Reade距离:先计算每一轴上的差值,求平方后再相加,最终对总和取平方根。

将如下代码插入到recommendations中:

from math import sqrt
def sim_distance(prefs,person1,preson2):
    si={}
    for item in prefs[person1]:
        if item in prefs[preson2]:
            si[item]=1
    if len(si)==0:return 0
    n=len(si)
    print n
    sum_of_squares=sum([pow(prefs[person1][item]-prefs[preson2][item],2) for item in prefs[person1] if item in prefs[preson2]])
    return 1/(1+sqrt(sum_of_squares))

 我们能够调用该函数,分别输入几人的名字,总结相似度的评价值。

>>>reload(recommendations)
>>> recommendations.sim_distance(recommendations.critics,'Lisa Rose','Gene Seymour')
0.294298055086

上边的实践结果正是Lisa 罗斯和Gene Seymour的相似度评价。

(2)Pearson相关度评价

再有一种特别复杂的艺术来剖断大家的相似度,那就是Pearson相关度。

该相关周密是判定两组数据与某一条直线的拟合程度的一种度量。在数据不是很规范的时候,会众口一辞于付出越来越好的结果。

该算法首先会找到两位评价者都已经商议的物品,然后总括两个的评分总和和平方和,并求得评分的乘积,最终动用这几个计算结果计算出Pearson相关周密。代码如下:

def sim_pearson(prefs,p1,p2):
  # Get the list of mutually rated items
  si={}
  for item in prefs[p1]: 
    if item in prefs[p2]: si[item]=1

  # if they are no ratings in common, return 0
  if len(si)==0: return 0

  # Sum calculations
  n=len(si)

  # Sums of all the preferences
  sum1=sum([prefs[p1][it] for it in si])
  sum2=sum([prefs[p2][it] for it in si])

  # Sums of the squares
  sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
  sum2Sq=sum([pow(prefs[p2][it],2) for it in si])    

  # Sum of the products
  pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])

  # Calculate r (Pearson score)
  num=pSum-(sum1*sum2/n)
  den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
  if den==0: return 0

  r=num/den

  return r

将上述代码加到recommendations中。

试行结果如下:

>>> reload(recommendations)
>>> print recommendations.sim_pearson(recommendations.critics,'Lisa Rose','Gene Seymour')
0.396059017191

 

步骤一:寻找偏爱大家要做的率先件事便是搜索表达差异人及其偏疼的方法。在Pyt...

手续一:寻找偏幸

  大家要做的首先件事正是搜索表明不相同人及其偏心的艺术。在Python中,达到这一指标的三个特别轻易有效的不二等秘书诀正是采纳多少个嵌套的字典。下边就是新建的贰个名称为recommendations.py的公文,参预如下代码完结三个数据集:

critics={'Lisa Rose':{'Lady in winter':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 winter':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 winter':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,'Superman returns':4.0,'The Night Listener':4.5,'You ,Me,and Dupree':2.5},
'Mick LaSalle':{'Lady in winter':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 winter':3.0,'Snakes on a plane':4.0,'Superman returns':5.0,'The Night Listener':3.0,'You ,Me,and Dupree':3.5},
'Toby':{'Snakes on a plane':4.5,'Superman returns':4.0,'You ,Me,and Dupree':1.0}}

里面数字代表分化的人对那部电影的评分。

起步python解释程序,并输入上面几行代码,能够看出数据汇总的剧情。

>>>import recommendations
>>>critics['Lisa Rose']['Lady in Winter']
2.5

>>>critics['Toby']
{'Snakes on a plane':4.5,'Superman returns':4.0,'You ,Me,and Dupree':1.0}}

手续二:寻觅类似顾客

    首要使用的是相似度评价值。这里最首要有三种格局:欧几里德距离和Pearson相似度。

1.欧几里德距离:先总计每一轴上的差值,求平方后再相加,最终对总和取平方根。

将如下代码插入到recommendations中:

from math import sqrt
def sim_distance(prefs,person1,preson2):
    si={}
    for item in prefs[person1]:
        if item in prefs[preson2]:
            si[item]=1
    if len(si)==0:return 0
    n=len(si)
    print n
    sum_of_squares=sum([pow(prefs[person1][item]-prefs[preson2][item],2) for item in prefs[person1] if item in prefs[preson2]])
    return 1/(1+sqrt(sum_of_squares))

 大家能够调用该函数,分别输入五个人的名字,总计相似度的评价值。

>>>reload(recommendations)
>>> recommendations.sim_distance(recommendations.critics,'Lisa Rose','Gene Seymour')
0.294298055086

上面的实施结果正是Lisa 罗丝和Gene Seymour的相似度评价。

(2)皮尔逊相关度评价

还会有一种越发复杂的点子来剖断大家的相似度,那就是Pearson相关度。

该相关全面是推断两组数据与某一条直线的拟合程度的一种度量。在数码不是很专门的职业的时候,会众口一辞于付出越来越好的结果。

该算法首先会找到两位评价者都已经批评的物料,然后总计两个的评分总和和平方和,并求得评分的乘积,最终动用那些总计结果总结出皮尔逊相关全面。代码如下:

def sim_pearson(prefs,p1,p2):
  # Get the list of mutually rated items
  si={}
  for item in prefs[p1]: 
    if item in prefs[p2]: si[item]=1

  # if they are no ratings in common, return 0
  if len(si)==0: return 0

  # Sum calculations
  n=len(si)

  # Sums of all the preferences
  sum1=sum([prefs[p1][it] for it in si])
  sum2=sum([prefs[p2][it] for it in si])

  # Sums of the squares
  sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
  sum2Sq=sum([pow(prefs[p2][it],2) for it in si])    

  # Sum of the products
  pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])

  # Calculate r (Pearson score)
  num=pSum-(sum1*sum2/n)
  den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
  if den==0: return 0

  r=num/den

  return r

将上述代码加到recommendations中。

进行结果如下:

>>> reload(recommendations)
>>> print recommendations.sim_pearson(recommendations.critics,'Lisa Rose','Gene Seymour')
0.396059017191

 

本文由王中王开奖结果发布于网络编程,转载请注明出处:推荐系统,集体智慧编程推荐

关键词:

上一篇:Python的16个“坑”,python16
下一篇:没有了