unit2 电影推荐

推荐算法在当下使用场景较多,亚马逊书籍推荐,商品推荐等等。《集体智慧编程》第二单元“提供推荐”构造简单的推荐系统,从而实现用户电影推荐的功能。

unit2 电影推荐_第1张图片

·

01数据介绍


登陆网页下载电影评分数据。

unit2 电影推荐_第2张图片

原始数据由movies和ratings两个文件组成。组合两个文件,读入数据如下所示影评人ID{电影1,给与的评分;电影2,给与的评分;···}

unit2 电影推荐_第3张图片

·

02 相似度定义


影评人之间的相似度可以通过欧几里得计算,也可以通过皮尔逊相关系数的方法计算。

  • 欧几里得距离

1、影评人A和影评人B共同评分过的电影数为 n
2、共同评过分的电影(A的评分-B的评分)^2 求和,再开方

unit2 电影推荐_第4张图片

(2)皮尔逊相关系数

1、影评人A和影评人B共同评分过的电影数为 n
2、共同评过分的电影(A的评分-B的评分)做以下函数处理计算相似度

·

03 寻找与你相似的人

根据距离寻找和你有相似电影喜好的人。原理很简单:就是根据距离排序,距离最近的人就是最相似的人。以下使用皮尔逊相关系数计算距离。

def topMatches(prefs, person, n=5, similarity=sim_pearson):
    scores = [(similarity(prefs, person, other), other)
              for other in prefs if other != person]#other是除目标外的其他人
    scores.sort()#得分排序
    scores.reverse()
    return scores[0:n]#返回得分前n的人(默认返回前5相关的人)

例如寻找与2号相似的影评人,按相似度排序,6416号影评人与2号最相似。

topMatches(prefs,"2")
相似度 影评人编号
[(1.0000000000000213, '6416'),
(1.000000000000004, '7791'),
(1.000000000000004, '7788'),
(1.000000000000004, '6846'),
(1.000000000000004, '6552')]

·

04 向你推荐电影

根据与你相似人的喜好,给你推荐他看过且好评的电影。

  • 推荐评分设置
    假如和2号相关的5个影评人,Rose与2号最相似,相似度为99%。分别有三部电影Night、Lady、Luck向2号做推荐备选。

1、影评人相似度 * 电影评分 S.x
2、看过这部电影的影评人相似度求和
3、做除法

unit2 电影推荐_第5张图片

以2号影评人为例,选取电影推荐评分最高的前5场电影:1996年的'Sweet Nothing '作为首选推荐。

getRecommendations(prefs,'2')[0:5]
[(5.000000000000001, 'Sweet Nothing (1996)'),
(5.000000000000001, 'Seven Chances (1925)'),
(5.0, 'Zero for Conduct (Zéro de conduite) (1933)'),
(5.0, 'Yol (1982)'),
(5.0, 'Woman of Paris\t A (1923)')]

·

05 相似的电影、合理的影评

电影那么多,想知道哪些电影是相似的。只要把数据做一下转换,还是同样的算法,返回最相似的电影,已经采用哪些影评人的评论。

unit2 电影推荐_第6张图片
def transformPrefs(prefs):
    result = {}
    for person in prefs:
        for item in prefs[person]:
            result.setdefault(item, {})#初始化结构
            # Flip item and person
            result[item][person] = prefs[person][item]
    return result

转换数据格式后,就可以计算相似的电影了。以Superman Returns为例,You, Me and Dupree是最相似的电影,相似度为65.7%。

topMatches(movies,'Superman Returns')
[(0.6579516949597695, 'You, Me and Dupree'),
(0.4879500364742689, 'Lady in the Water'),
(0.11180339887498941, 'Snakes on a Plane')

向人推荐电影,反过来向电影推荐人。
推荐合适的影评人选,显示影评在电影评价首页。以电影Just My Luck为例,建议把Michael Phillips的影评放在首页。

getRecommendations(movies,'Just My Luck')
[(4.0, 'Michael Phillips'),
(3.0, 'Jack Matthews')]

你可能感兴趣的:(unit2 电影推荐)