中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python協同過濾算法怎么用

發布時間:2022-10-10 17:33:57 來源:億速云 閱讀:171 作者:iii 欄目:web開發

本篇內容介紹了“Python協同過濾算法怎么用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、數據準備

Liu Yi,3,1001
Chen Er,4,1001
Zhang San,3,1001
Li Si,3,1001
Liu Yi,3,1002
Li Si,4,1002
Liu Yi,4,1003
Zhang San,5,1003
Li Si,5,1003
Liu Yi,4,1004
Zhang San,3,1004
Liu Yi,5,1005

二、計算物品和物品之間的共現矩陣

對上面的數據作一下調整,按用戶排列

用戶 評分 物品(BookId)

Python協同過濾算法怎么用

再計算物品和物品的共現矩陣中的每一個元素

1001和1002,同時被Liu Yi和Li Si兩個用戶購買,所以其共現值為2

1001和1003,同時被Liu Yi, Zhang San和Li Si三個用戶購買,所以其共現值為3

1001和1004,同時被Liu Yi和Zhang San兩個用戶購買,所以其共現值為2

1001和1005,只同時被Liu Yi購買, 所以其共現值為1

1002和1003,同時被Liu Yi和Li Si兩個用戶購買,所以其共現值為2

1002和1004,只同時被Liui Yi購買, 所以其共現值為1

1002和1005,只同時被Liui Yi購買, 所以其共現值為1

1003和1004,同時被Liu Yi和Zhang San兩個用戶購買,所以其共現值為2

1003和1005,只同時被Liui Yi購買, 所以其共現值為1

1004和1005,只同時被Liui Yi購買, 所以其共現值為1

最終,得到的共現矩陣為

Python協同過濾算法怎么用

三、計算物品被多少個不同的用戶購買

購買1001的有Liu Yi, Chen Er, Zhang San和Li Si

購買1002的有Liu Yi和Li Si

購買1003的有Liu Yi, Zhang San和Li Si

購買1004的有Liu Yi和Zhang San

購買1005的有Liu Yi

Python協同過濾算法怎么用

四、計算相似度矩陣

兩個物品余弦相似度的計算公式為:

                                       Python協同過濾算法怎么用

根據此公式,

1001與1002的相似度為2 / sqrt(4 * 2) = 0.707

1001與1003的相似度為3 / sqrt(4 * 3) = 0.866

1001與1004的相似度為2 / sqrt(4 * 2) = 0.707

1001與1005的相似度為1 / sqrt(4 * 1) = 0.5

1002與1003的相似度為2 / sqrt(2 * 3) = 0.816

1002與1004的相似度為1 / sqrt(2 * 2) = 0.5

1002與1005的相似度為1 / sqrt(2 * 1) = 0.707

1003與1004的相似度為2 / sqrt(3 * 2) = 0.816

1003與1005的相似度為1 / sqrt(3 * 1) = 0.577

1004與1005的相似度為1 / sqrt(2 * 1) = 0.707

所以,相似度矩陣為

Python協同過濾算法怎么用

假設取K=3

(1) 對于Li Si買過的1001來說,相似度排在前3名的物品和評分為:

1003,0.866

1002,0.707

1004,0.707

這三個物品中,只有1004是Li Si不曾買過的,其推薦值為

1004與1001的相似度 * Li Si對1001的評分 = 0.707 * 3 = 2.121

(2) 對于Li Si買過的1002來說,相似度排在前3名的物品和評分為:

1003,0.816

1001,0.707

1005,0.707

這三個物品中,只有1005是Li Si不曾買過的,其推薦值為

1005與1002的相似度 * Li Si對1002的評分 = 0.707 * 4 = 2.828

(3) 對于Li Si買過的1003來說,相似度排在前3名的物品和評分為:

1001,0.866

1002,0.816

1004,0.816

這三個物品中,只有1004是Li Si不曾買過的,其推薦值為

1004與1003的相似度 * Li Si對1003的評分 = 0.816 * 5 = 4.08

綜上,可以給Li Si推薦的書為

Python協同過濾算法怎么用

代碼:

#!/usr/bin/env python
#-*-coding:utf-8-*-

import math
import pdb

class ItemBasedCF:
    def __init__(self,train_file):
        self.train_file = train_file
        self.readData()
        
    def readData(self):
        #讀取文件,并生成用戶-物品的評分表和測試集
        self.train = dict()
        #用戶-物品的評分表
        for line in open(self.train_file):
            user,score,item = line.strip().split(",")
            self.train.setdefault(user,{})
            self.train[user][item] = int(float(score))

    def ItemSimilarity(self):
        #建立物品-物品的共現矩陣
        cooccur = dict()  #物品-物品的共現矩陣
        buy = dict()  #物品被多少個不同用戶購買N
        for user,items in self.train.items():
            for i in items.keys():
                buy.setdefault(i,0)
                buy[i] += 1
                cooccur.setdefault(i,{})
                for j in items.keys():
                    if i == j : continue
                    cooccur[i].setdefault(j,0)
                    cooccur[i][j] += 1
        #計算相似度矩陣
        self.similar = dict()
        for i,related_items in cooccur.items():
            self.similar.setdefault(i,{})
            for j,cij in related_items.items():
                self.similar[i][j] = cij / (math.sqrt(buy[i] * buy[j]))
        return self.similar

    #給用戶user推薦,前K個相關用戶,前N個物品
    def Recommend(self,user,K=3,N=10):
        rank = dict()
        action_item = self.train[user]     
        #用戶user產生過行為的item和評分
        for item,score in action_item.items():
            sortedItems = sorted(self.similar[item].items(),key=lambda x:x[1],reverse=True)[0:K]
            for j,wj in sortedItems:
                if j in action_item.keys():
                    continue
                rank.setdefault(j,0)
                rank[j] += score * wj
        return dict(sorted(rank.items(),key=lambda x:x[1],reverse=True)[0:N])
    
#聲明一個ItemBasedCF的對象    
item = ItemBasedCF("item_book.txt")
item.ItemSimilarity()
recommedDict = item.Recommend("Li Si")
for k,v in recommedDict.items():
    print(k,"\t",v)

運行結果:

1004    6.203803248198273
1005    2.82842712474619

“Python協同過濾算法怎么用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

合肥市| 定州市| 鄂州市| 新宾| 蓝田县| 山丹县| 邵东县| 玉山县| 环江| 九寨沟县| 茂名市| 富锦市| 永川市| 榆树市| 四会市| 会泽县| 兴化市| 胶南市| 通海县| 台江县| 油尖旺区| 乌兰县| 乐昌市| 广南县| 科尔| 英吉沙县| 五台县| 怀来县| 五家渠市| 确山县| 南平市| 平山县| 柞水县| 海宁市| 马公市| 钟祥市| 青河县| 博兴县| 瑞丽市| 南投市| 公主岭市|