国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

簡單的python協(xié)同過濾程序?qū)嵗a

2020-02-22 23:05:13
字體:
供稿:網(wǎng)友

本文研究的主要是python協(xié)同過濾程序的相關(guān)內(nèi)容,具體介紹如下。

關(guān)于協(xié)同過濾的一個(gè)最經(jīng)典的例子就是看電影,有時(shí)候不知道哪一部電影是我們喜歡的或者評分比較高的,那么通常的做法就是問問周圍的朋友,看看最近有什么好的電影推薦。在問的時(shí)候,都習(xí)慣于問跟自己口味差不多的朋友,這就是協(xié)同過濾的核心思想。

這個(gè)程序完全是為了應(yīng)付大數(shù)據(jù)分析與計(jì)算的課程作業(yè)所寫的一個(gè)小程序,先上程序,一共55行。不在意細(xì)節(jié)的話,55行的程序已經(jīng)表現(xiàn)出了協(xié)同過濾的特性了。就是對每一個(gè)用戶找4個(gè)最接近的用戶,然后進(jìn)行推薦,在選擇推薦的時(shí)候是直接做的在4個(gè)用戶中選擇該用戶item沒包括的,當(dāng)然這里沒限制推薦數(shù)量,個(gè)人覺得如果要提高推薦準(zhǔn)確率的畫,起碼,1,要對流行的item進(jìn)行處理。2,將相鄰的四個(gè)用戶的item進(jìn)行排序,從多到少的進(jìn)行推薦。程序所用的數(shù)據(jù)是movielens上的(http://grouplens.org/datasets/movielens)。相似度的計(jì)算也很簡單,直接用了交集和差集的比值。好吧,上程序

#coding utf-8import osimport sysimport ref1=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:           #對觀影量少于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()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 佛坪县| 会同县| 霸州市| 济源市| 长寿区| 扶沟县| 都昌县| 永仁县| 孝感市| 万源市| 黔西县| 信丰县| 定边县| 弋阳县| 昌乐县| 南漳县| 汝州市| 仪征市| 惠安县| 池州市| 孟村| 蓬溪县| 南安市| 武安市| 云安县| 泰顺县| 齐河县| 阳原县| 平度市| 盐边县| 安义县| 沙雅县| 独山县| 金堂县| 新河县| 师宗县| 富锦市| 武威市| 金溪县| 白银市| 桦南县|