0
点赞
收藏
分享

微信扫一扫

协同过滤修正代码

user=["User1","User2","User3","User4","User5"]
Item=["ItemA","ItemB","ItemC","ItemD","ItemE"]
data=[[1,1,0,0,1],[1,0,1,1,0],[0,1,0,0,1],[1,1,1,0,1],[0,1,0,0,1]]
import pandas as pd
df=pd.DataFrame(data,columns=Item,index=user)
print(df)
from sklearn.metrics import jaccard_score
print(jaccard_score(df['ItemA'],df['ItemB']))
from sklearn.metrics.pairwise import pairwise_distances
usersimilar=1-pairwise_distances(df.values,metric='jaccard')
usersimilar=pd.DataFrame(usersimilar,columns=user,index=user)
print(usersimilar)
itemsimilar=1-pairwise_distances(df.values.T,metric='jaccard')
itemsimilar=pd.DataFrame(itemsimilar,columns=Item,index=Item)
print(itemsimilar)
to_user={}
for i in usersimilar.index:
ab=usersimilar.loc[i].drop([i])
ab_sorted=ab.sort_values(ascending=False)
top2=list(ab_sorted.index[:2])
to_user[i]=top2
print("top2的相似用户")
print(to_user)
import numpy as np
rs_results={}
for users,sim_users in to_user.items():
rs_result=set()
for sim_user in sim_users:
rs_result=rs_result.union(set(df.loc[sim_user].replace(0,np.nan).dropna().index))
rs_result-=set(df.loc[user].replace(0,np.nan).dropna().index)
rs_results[users]=rs_result
print(rs_results)
举报

相关推荐

0 条评论