博主是自然語言處理方向的,不是推薦系統領域的,這個程式完全是為了應付大資料分析與計算的課程作業所寫的乙個小程式,先上程式,一共55行。不在意細節的話,55行的程式已經表現出了協同過濾的特性了。就是對每乙個使用者找4個最接近的使用者,然後進行推薦,在選擇推薦的時候是直接做的在4個使用者中選擇該使用者item沒包括的,當然這裡沒限制推薦數量,個人覺得如果要提高推薦準確率的畫,起碼,1,要對流行的item進行處理。2,將相鄰的四個使用者的item進行排序,從多到少的進行推薦。程式所用的資料是movielens上的(相似度的計算也很簡單,直接用了交集和差集的比值。好吧,上程式
#coding utf-8
import
osimport
sysimport
ref1=open("
/home/alber/data_base/bigdata/movielens_train_result.txt
",'r
') #讀取train檔案,已經處理成每一行代表一位使用者的item,項之間用空格。
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的使用者不計入相似性計算的範圍
for key in
userdic.keys(): #計算每位使用者的4個最相似使用者
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 #交集除以差集作為相似性的判斷條件
else:"
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
inuser_item:
else
:
pass
f2.write((
"".join(recomm)+"\n"
))f2.close()
協同過濾的簡單實現
資料集 u mr 轉換為 m ur 歐幾里得距離 皮爾遜相關係數 其他還有jaccard係數,曼哈頓距離演算法 輸入 兩個暫時用字典表示的 輸出 相關係數 m mp 書上用的是歐幾里得距離算電影之間的相關性 對user進行推薦 獲取u mr user 獲取m mp movie movie不在u mr...
協同過濾 基於使用者的協同過濾itemCF
基於使用者的協同過濾演算法也被稱為最近鄰協同過濾或knn k nearest neighbor,k最近鄰演算法 其核心思想就是,首先根據相似度計算出目標使用者的鄰居集合,然後用鄰居使用者評分的加權組合來為目標使用者作推薦。通常這些演算法都可以總結成三步 首先,使用使用者已有的評分來計算使用者之間的相...
Item based協同過濾
item based top n recommendation algorithms 過程 1.構建乙個m m的矩陣,每一列最多有k個非0值,比如第j列,非0值代表和第j個item最相關的k個item。k一般10 20,不會很大,保持矩陣的稀疏性。3.上述矩陣相乘,等於是權重累加 比如使用者買過了a...