xml地图|网站地图|网站标签 [设为首页] [加入收藏]

智能家电

当前位置:美高梅游戏网站 > 智能家电 > 国有智慧编制程序——推荐系统(2),集体智慧

国有智慧编制程序——推荐系统(2),集体智慧

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-09-03 13:44

美高梅游戏网站,集体智慧编程——推荐系统(2),集体智慧编程推荐

步骤三:为评论者打分

   既然我们已经有了对两个人进行比较的函数,下面就可以编写程序,根据指定人员对每个人进行打分,并找出最接近的匹配结果了。在本例中,我们对找寻对与自己相似评委的影评者感兴趣,这样我们就知道在选择影片时应该采纳谁的建议了。

def topMatches(prefs,person,n=5,similarity=sim_pearson):
    scores=[(similarity(prefs,person,other),other) for other in prefs if other!=person]

    scores.sort()
    scores.reverse()
    return scores[0:n]

该函数利用了列表推导式,将自身和字典中的其他每一个用户进行了比较。返回排序结果的前N项。

>>>reload(recommendations)
>>> recommendations.topMatches(recommendations.critics,'Toby',n=3)
[(0.9912407071619299, 'Lisa Rose'), (0.9244734516419049, 'Mick LaSalle'), (0.8934051474415647, 'Claudia Puig')]

 步骤四:推荐物品

我们通过一个经过加权的评价值来为影片打分,评论者的评分结果因此形成了先后的排名。为此,我们必须取得所有其他的评论者的评价结果,借此得到相似度后,再乘以他们为每部影片所给的评价值。

def getRecommendations(prefs,person,similarity=sim_pearson):
    totals={}
    simSums={}
    for other in prefs:
        if other==person:continue  #do not compare with self
        sim=similarity(prefs,person,other)

        #ignore the value <=0
        if sim<=0 :continue
        for item in prefs[other]:
            if item not in prefs[person] or prefs[person][item]==0:  
                totals.setdefault(item,0)
                totals[item]+=prefs[other][item]*sim
                simSums.setdefault(item,0)
                simSums[item]+=sim

    ranking=[(total/simSums[item],item)for item,total in totals.items() ]

    ranking.sort()
    ranking.reverse()
    return ranking

这样,我们就可以找到自己接下来应该看得电影了。

 

参考:集体智慧编程

步骤三:为评论者打分 既然我们已经有了对两个人进行比较的函数,下面就可以编写...

集体智慧编程——推荐系统(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}}

步骤二:寻找相近用户

    主要使用的是相似度评价值。这里主要有两种方式:欧几里德距离和皮尔逊相似度。

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 Rose和Gene Seymour的相似度评价。

(2)皮尔逊相关度评价

还有一种更为复杂的方法来判断人们的相似度,那就是皮尔逊相关度。

该相关系数是判断两组数据与某一条直线的拟合程度的一种度量。在数据不是很规范的时候,会倾向于给出更好的结果。

该算法首先会找到两位评价者都曾经评价的物品,然后计算两者的评分总和和平方和,并求得评分的乘积,最后利用这些计算结果计算出皮尔逊相关系数。代码如下:

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...

本文由美高梅游戏网站发布于智能家电,转载请注明出处:国有智慧编制程序——推荐系统(2),集体智慧

关键词:

上一篇:没有了

下一篇:没有了