簡單的python協(xié)同過濾程序?qū)嵗a
本文研究的主要是python協(xié)同過濾程序的相關(guān)內(nèi)容,具體介紹如下。
關(guān)于協(xié)同過濾的一個(gè)最經(jīng)典的例子就是看電影,有時(shí)候不知道哪一部電影是我們喜歡的或者評(píng)分比較高的,那么通常的做法就是問問周圍的朋友,看看最近有什么好的電影推薦。在問的時(shí)候,都習(xí)慣于問跟自己口味差不多的朋友,這就是協(xié)同過濾的核心思想。
這個(gè)程序完全是為了應(yīng)付大數(shù)據(jù)分析與計(jì)算的課程作業(yè)所寫的一個(gè)小程序,先上程序,一共55行。不在意細(xì)節(jié)的話,55行的程序已經(jīng)表現(xiàn)出了協(xié)同過濾的特性了。就是對(duì)每一個(gè)用戶找4個(gè)最接近的用戶,然后進(jìn)行推薦,在選擇推薦的時(shí)候是直接做的在4個(gè)用戶中選擇該用戶item沒包括的,當(dāng)然這里沒限制推薦數(shù)量,個(gè)人覺得如果要提高推薦準(zhǔn)確率的畫,起碼,1,要對(duì)流行的item進(jìn)行處理。2,將相鄰的四個(gè)用戶的item進(jìn)行排序,從多到少的進(jìn)行推薦。程序所用的數(shù)據(jù)是movielens上的(http://grouplens.org/datasets/movielens)。相似度的計(jì)算也很簡單,直接用了交集和差集的比值。好吧,上程序
#coding utf-8 import os import sys import re f1=open("/home/alber/data_base/bigdata/movielens_train_result.txt",'r') #讀取train文件,已經(jīng)處理成每一行代表一位用戶的item,項(xiàng)之間用空格。 f2=open("/home/alber/data_base/bigdata/movielens_train_result3.txt",'a') txt=f1.readlines() contxt=[] f1.close() userdic={} for line in txt: line_clean=" ".join(line.split()) position=line_clean.index(",") ID=line_clean[0:position] item=line_clean[position+1:] userdic.setdefault(ID,item) if len(item)>=5: #對(duì)觀影量少于5的用戶不計(jì)入相似性計(jì)算的范圍 contxt.append(item) for key in userdic.keys(): #計(jì)算每位用戶的4個(gè)最相似用戶 ID_num=key value=userdic[key] user_item=value.split(' ') Sim_user=[] for lines in contxt: lines_clean=lines.split(' ') intersection=list(set(lines_clean).intersection(set(user_item))) lenth_intersection=len(intersection) difference=list(set(lines_clean).difference(set(user_item))) lenth_difference=len(difference) if lenth_difference!=0: Similarity=float(lenth_intersection)/lenth_difference #交集除以差集作為相似性的判斷條件 Sim_user.append(Similarity) else: Sim_user.append("0") Sim_user_copy=Sim_user[:] Sim_user_copy.sort() Sim_best=Sim_user_copy[-4:] position1=Sim_user.index(Sim_best[3]) position2=Sim_user.index(Sim_best[2]) position3=Sim_user.index(Sim_best[1]) position4=Sim_user.index(Sim_best[0]) if position1!=0 and position2!=0 and position3!=0 and position4!=0: recommender=userdic[str(position1)]+" "+userdic[str(position2)]+" "+userdic[str(position3)]+" "+userdic[str(position4)] #將4位用戶的看過的電影作為推薦 else: recommender="none" reco_list=recommender.split(' ') recomm=[] for good in reco_list: if good not in user_item: recomm.append(good) else: pass f2.write((" ".join(recomm)+"\n")) f2.close()
總結(jié)
以上就是本文關(guān)于簡單的python協(xié)同過濾程序?qū)嵗a的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
cython加速python代碼的方法實(shí)現(xiàn)
本文主要介紹了cython加速python代碼的方法實(shí)現(xiàn),特別是在涉及到數(shù)值計(jì)算密集型任務(wù)時(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07python3.9實(shí)現(xiàn)pyinstaller打包python文件成exe
這篇文章主要介紹了python3.9實(shí)現(xiàn)pyinstaller打包python文件成exe,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Linux下Python安裝完成后使用pip命令的詳細(xì)教程
這篇文章主要介紹了Linux下Python安裝完成后使用pip命令的詳細(xì)教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11Python linecache.getline()讀取文件中特定一行的腳本
Python中使用標(biāo)準(zhǔn)庫中的linecache中的getline方法可以從某個(gè)文件中讀取出特定的一行。2008-09-09Python實(shí)現(xiàn)按鍵精靈版的連點(diǎn)器
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)按鍵精靈版的連點(diǎn)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python命令行定時(shí)任務(wù)自動(dòng)化工作流程
本文介紹如何使用Python編寫定時(shí)任務(wù),以自動(dòng)執(zhí)行命令行任務(wù)。您將學(xué)習(xí)如何安排定期的任務(wù),處理任務(wù)結(jié)果,以及如何使用Python自動(dòng)化工作流程,從而提高工作效率。無需手動(dòng)執(zhí)行重復(fù)任務(wù),Python幫您搞定2023-04-04