日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【知识发现】基于用户的协同过滤推荐算法python实现

發布時間:2025/4/16 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【知识发现】基于用户的协同过滤推荐算法python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、協同過濾推薦算法分為兩類,分別是基于用戶的協同過濾算法(user-based collaboratIve filtering),和基于物品的協同過濾算法(item-based collaborative filtering)。


? ? ? 1)基于用戶的協同過濾算法是通過用戶的歷史行為數據發現用戶對商品或內容的喜歡(如商品購買,收藏,內容評論或分享),并對這些喜好進行度量和打分。根據不同用戶對相同商品或內容的態度和偏好程度計算用戶之間的關系。在有相同喜好的用戶間進行商品推薦。


? ? ? 2)基于物品的協同過濾算法與基于用戶的協同過濾算法很像,將商品和用戶互換。通過計算不同用戶對不同物品的評分獲得物品間的關系?;谖锲烽g的關系對用戶進行相似物品的推薦。這里的評分代表用戶對商品的態度和偏好。


2、這里做了初步的實現基于用戶的協同過濾,相關理論可以進一步查閱。

# -*- coding: utf-8 -*- ''' Created on 2017年9月18日@author: Jason.F ''' import time import pandas as pd import math import numpy as np from operator import itemgetter def Recommend(user,df_test,W,TopK=3):rvi=1 #用戶v對物品i的興趣,默認為1#TopK:與用戶user興趣最接近的k個用戶rank=dict()#df_itemU=df_sample[df_sample['userid'] == user]#u_items=list(set(df_itemU['itemid'].values))for v,wuv in sorted(W[user].items(),key=itemgetter(1),reverse=True)[0:TopK]:df_itemV=df_test[df_test['userid'] == v]v_items=list(set(df_itemV['itemid'].values))for i in v_items:#if i in u_items:# continueif i not in rank.keys():rank[i]=0rank[i] +=wuv*rvi return rank #返回推薦的物品def UserSimilarity(df_sample):#計算用戶相似度#建立物品到用戶的倒排表item_users=dict()item_list = list(set(df_sample['itemid'].values))#獲取物品列表for item in item_list:item_users[item]=set()df_user=df_sample[df_sample['itemid'] == item]user_list= list(set(df_user['userid'].values))#獲取物品對應的用戶列表for user in user_list: item_users[item].add(user)#計算用戶之間物品相似度C = dict()N = dict()#初始化for u in list(set(df_sample['userid'].values)):N[u]=0for v in list(set(df_sample['userid'].values)):if u!=v:AddTwoDict(C,u,v,0)W=C #初始化相似度字段#計算 for item,users in item_users.items():for u in users:N[u] += 1for v in users:if u==v:continue#根據用戶行為計算用戶相似度,改良余弦相似度公式C[u][v] +=( 1/math.log(1+len(users)) )#計算用戶相似度矩陣for u,related_users in C.items():for v,cuv in related_users.items():W[u][v]=cuv/math.sqrt(N[u]*N[v])return W#二維詞典插入 def AddTwoDict(theDict, key_a, key_b, val): if key_a in theDict: theDict[key_a].update({key_b: val}) else: theDict.update({key_a:{key_b: val}})#計算準確率指標 def Precision(df_test,W,N=5):hit=0all=0#N最靠前的5個物品for user in list(set(df_test['userid'].values)):rank=Recommend(user,df_test,W)df_item=df_test[df_test['userid'] == user]for item,pui in sorted(rank.items(),key=itemgetter(1),reverse=True)[0:N]:if item in list(set(df_item['itemid'].values)):hit+=1all += Nreturn hit/(all*1.0)#召回率 def Recall(df_test,W,N=5):hit=0all=0#N最靠前的5個物品for user in list(set(df_test['userid'].values)):rank=Recommend(user,df_test,W)df_item=df_test[df_test['userid'] == user]for item,pui in sorted(rank.items(),key=itemgetter(1),reverse=True)[0:N]:if item in list(set(df_item['itemid'].values)):hit+=1all += len(df_item)return hit/(all*1.0)if __name__ == '__main__': start = time.clock() #導入數據df_sample = pd.read_csv("D:\\tmp\\ratings.csv",names=['userid','itemid','ratings','time'],header=0) df_sample_=df_sample[['userid','itemid']]#模型訓練W=UserSimilarity(df_sample)#模型預測#rank=Recommend(1,df_sample,W)#user=1#print (rank)#模型評估,準確率指標df_test=df_sample.sample(frac=0.2)#抽20%來測試print (Precision(df_test,W))#準確率print (Recall(df_test,W))#準確率end = time.clock() print('finish all in %s' % str(end - start))

要結合實際業務定義相關參數,以及采集樣本(興趣度或偏好)。

基于物品的協同過濾實現類似。

總結

以上是生活随笔為你收集整理的【知识发现】基于用户的协同过滤推荐算法python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。