91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .py
    金幣: 2
    下載: 1 次
    發(fā)布日期: 2021-06-04
  • 語言: Python
  • 標簽: 協(xié)同過濾??

資源簡介

基于協(xié)同過濾的推薦系統(tǒng),關(guān)于求RMSE的部分源碼,簡單易懂,易操作!學習python,對機器學習,推薦系統(tǒng)方面感興趣的可以參考。

資源截圖

代碼片段和文件信息

#?-*-?coding:?utf-8?-*-
“““
Created?on?Fri?May?26?10:31:22?2017

@author:?lsl
“““

from?math?import?sqrt
from?similarity?import?MinkowskiDistance
from?data?import?critics

#對未看過的電影評分
#未看過電影分數(shù)=sum(被推薦用戶與其他用戶之間相似度*用戶對該電影評分)/sum(被推薦用戶與其他用戶之間相似度)
def?recommendItems(criticsgivenpersonnum?=5?simscore?=?MinkowskiDistance):
????‘‘‘
????物品推薦:給定一個用戶person默認返回num=5物品
????要兩個for對用戶,物品?都進行?遍歷
????‘‘‘
????#所有變量盡量用字典,凡是列表能表示的字典都能表示,那何不用字典
????itemsimsum={}?
????#存給定用戶沒看過的電影的其他用戶評分加權(quán)
????itemsum={}

????#遍歷每個用戶,然后遍歷該用戶每個電影
????for?otheruser?in?critics?:
????????#不要和自己比較
????????if?otheruser?==?givenperson:???continue
????????#忽略相似度=0或小于0情況
????????sim?=?simscore(criticsgivenpersonotheruser)
????????if?sim?<=0:???continue
????????
????????for?itemmovie?in?critics[otheruser]:
????????????#只對用戶沒看過的電影進行推薦,參考了其他用戶的評價值(協(xié)同物品過濾是參考了歷史物品相似度值)
????????????if?itemmovie?in?critics[givenperson]:
????????????????#一定要初始化字典:初始化itemsum與itemsimsum
????????????????itemsum.setdefault(itemmovie0)
????????????????itemsimsum.setdefault(itemmovie0)
????????????????#用戶相似度*評價值
????????????????itemsum[itemmovie]?+=?sim??*?critics[otheruser][itemmovie]
????????????????itemsimsum[itemmovie]?+=?sim?
?????
????#最終結(jié)果列表,列表包含一元組(分數(shù),item)
????rankings?=?[(itemsum[itemmovie]?/?itemsimsum[itemmovie]itemmovie)?for?itemmovie?in??itemsum]
????#結(jié)果排序
????rankings.sort(cmp=None?key=None?reverse=True);
????return?rankings

#對所有電影評分
def?all_rankings(**dd):
????#存所有電影評分
????all_rankings={}
????#存入某個人的電影評分字典
????rankings_d={}
#????rankings=[]
????k=[]
????#取出原始數(shù)據(jù)集中的鍵值,放入一個列表
????for?key?in?dd.keys():
????????k.append(key)
????????
????????for?key?in?k:
????????????#調(diào)用recommendItems(critics?key?7)函數(shù),返回評分元組
????????????rankings=recommendItems(critics?key?7)?
????????????
????????????#將評分元組rankings以字典的方式重新整合,形成評分字典all_rankings
????????????for?(mn)?in?rankings:
????????????????rankings_d[n]=m
????????????all_rankings[key]=rankings_d???
????#返回所有電影評分字典???
????return?all_rankings???



#對數(shù)據(jù)集中所有已看的電影進行預測評分
def?allwatched_rankings(**dd):????
???#存入所有已看電影評分?
???allwatched_rankings={}
???#存入某個人已看電影的評分
???a_r={}
???k=[]
???#取出原始數(shù)據(jù)集中的鍵值,放入一個列表
???for?key?in?dd.keys():
???????k.append(key)
???????
???????for?d?in?k:
???????????#取出所有電影評分字典all_rankings(**dd)中dd所對應的鍵,值,比如dd中的‘Toby‘只含有三項電影評分,則取出所有評分字典中‘Toby‘對應的評分項
???????????a_r=dict([(itemall_rankings(**dd)[d][item])for?item?in?dd[d]])??
???????????#形成新的評分字典,
???????????allwatched_rankings[key]=a_r
???#返回已看電影評分字典,字典形式如原始數(shù)據(jù)集????????
???return?allwatched_rankings????????
‘‘‘
???#測試代碼,作為備注參考
???for?items?in?all_rankings(**dd)[key]:
???????if?items?in?dd[key]:
???????????
???????????all_rankings(**dd)[key]=items
???????????allwatched_rankings=all_rankings(**dd)
???????else:
???

評論

共有 條評論