请选择 进入手机版 | 继续访问电脑版

集云开发者论坛

 æ‰¾å›žå¯†ç 
 ç«‹å³æ³¨å†Œ
搜索
查看: 13447|回复: 0

????——??????????

[复制链接]

463

主题

477

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13928
发表于 2018-12-17 15:31:05 | 显示全部楼层 |阅读模式
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????UserCF??????????????ItemCF????????????????????????????????????????????????
?1??????????
????????????????????????????????????????????????????????????????????????????????????
???????
  • ????????????????;
  • ???????????????????????????????????
????????????
???????????????????????????Ç?????????????????????????????Ç????????????????????ç????d????????????D.

??/???????????ç??d
??? X X??
??? X
??çX XX

?????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?2????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????
??????????????????????????????????????????????????“??”????????????????????????????????????????????????d?????????????????????????????????D.
??/???????????ç??d
??1X X
??2XX ??
??3X XX
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????
#!/usr/bin/python# -*- coding: UTF-8 -*-'''?????????'''from math import sqrt,powimport operatorclass UserCf():    #???????    def __init__(self,data):        self.data=data    #?????????????????    def getItems(self,username1,username2):        return self.data[username1],self.data[username2]    #??????????????    def pearson(self,user1,user2):#???????????  {'Snakes on a Plane': 4.5, 'You, Me and Dupree': 1.0, 'Superman Returns': 4.0}        sumXY=0.0        n=0        sumX=0.0        sumY=0.0        sumX2=0.0        sumY2=0.0        try:            for movie1,score1 in user1.items():                if movie1 in user2.keys():#??????????                    n+=1                    sumXY+=score1*user2[movie1]                    sumX+=score1                    sumY+=user2[movie1]                    sumX2+=pow(score1,2) #score1???                    sumY2+=pow(user2[movie1],2)            molecule=sumXY-(sumX*sumY)/n            denominator=sqrt((sumX2-pow(sumX,2)/n)*(sumY2-pow(sumY,2)/n))            r=molecule/denominator        except Exception as e:            print ("????:",e.message)            return None        return r    #???????????????????    def nearstUser(self,username,n=1):        distances={}#??????        for otherUser,items in self.data.items():#???????n            if otherUser not in username:#??????                distance=self.pearson(self.data[username],self.data[otherUser])#??????????                distances[otherUser]=distance        sortedDistance=sorted(distances.items(),key=operator.itemgetter(1),reverse=True)#????N???        print ("????????",sortedDistance)        return sortedDistance[:n]    #???????    def recomand(self,username,n=1):        recommand={}#??????        for user,score in dict(self.nearstUser(username,n)).items():#????n???            print ("??????",(user,score))            for movies,scores in self.data[user].items():#??????????                if movies not in self.data[username].keys():#??username????                    print ("%s??????????%s"%(user,movies))                    if movies not in recommand.keys():#????????                        recommand[movies]=scores        return sorted(recommand.items(),key=operator.itemgetter(1),reverse=True)#??????????????if __name__=='__main__':    users = {'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}             }    userCf=UserCf(data=users)    recommandList=userCf.recomand('Toby', 2)    print ("?????%s"%recommandList)???????






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|集云开发者论坛 ( 辽ICP备15012805号-2 )

GMT+8, 2019-12-8 15:23 , Processed in 0.060542 second(s), 21 queries .

Powered by Open Draft System

© 2007-2016 OpenDraft

快速回复 返回顶部 返回列表