溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python協(xié)同過(guò)濾程序的示例分析

發(fā)布時(shí)間:2021-07-22 09:58:18 來(lái)源:億速云 閱讀:106 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下python協(xié)同過(guò)濾程序的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體介紹如下。

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

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

#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位用戶的看過(guò)的電影作為推薦 
  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()

以上是“python協(xié)同過(guò)濾程序的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI