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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【推荐系统】协同过滤浅入(基于用户/项目/内容/混合方式)

發布時間:2024/3/12 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【推荐系统】协同过滤浅入(基于用户/项目/内容/混合方式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

協同過濾

基于用戶的過濾

基于項目的過濾

基于內容的過濾

混合系統

檢查每種類型的利弊


?

協同過濾


在 2012 年初,爆出了這樣一則新聞故事:一位男子進入一家Target商店,揮舞著手中的一疊優惠券,這些都是Target郵寄給他還在讀高中的女兒的。

他來的目的是譴責經理,因為這套優惠券都是諸如嬰兒服裝、配方奶和幼兒家具這類商品專享的。
聽到顧客的投訴,經理再三道歉。他感覺很糟糕,想在幾天后通過電話跟進,解釋這是怎么回事。

這個時候,反而是這位父親在電話里進行了道歉。看來他的女兒確實是懷孕了。

她的購物習慣泄露了她的這個秘密。
出賣這位女生的算法很可能是,至少部分是,基于協同過濾。

什么是協同過濾?
協同過濾(collaborative filtering)是基于這樣的想法,在某處總有和你趣味相投的人。假設你和趣味相投的人們評價方式都非常類似,而且你們都已經以這種方式評價了一組特定的項目,此外,你們每個人對其他人尚未評價的項目也有過評價。正如已經假設的那樣,你們的口味是類似的,因此可以從趣味相投的人們那里,提取具有很高評分而你尚未評價的項目,作為給你的推薦,反之亦然。在某種程度上,這點和數字化配對非常相像,但結果是你喜歡的歌曲或產品,而不是與異性的約會。

?

對于懷孕的高中生這個案例,當她購買了無味的乳液、棉球和維生素補充劑之后,她可能就和那些稍后繼續購買嬰兒床和尿布的人匹配上了。
?

基于用戶的過濾

我們將從被稱為效用矩陣(utility matrx)的東西開始。它和詞條-文檔矩陣相類似,不過這里我們表示的是產品和用戶,而不再是詞條和文檔。

這里,我們假設有顧客 A 到 D,以及他們所評分的一組產品,評分從 0 到 5

之前我們看到,當想要查找類似的項目時,可以使用余弦相似度。讓我們在這里試試。
我們將為用戶 A 發現最相似的其他顧客。由于這里的向量是稀疏的,包含了許多未評分的項目,我們將在這些缺失的地方輸入一些默認值,這里填入 0。

我們從用戶 A 和用戶 B 的比較開始。

fromsklearn.metrics.pairwise import cosine_similarity cosine_similarity(np.array([4,0,5,3,5,0,0]).reshape(1,-1),\np.array([0,4,0,4,0,5,0]).reshape(1,-1))

我們可以看到,這兩者沒有很高的相似性,這是有道理的,因為他們沒有多少共同的評分。

現在來看看用戶 C 與用戶 A 的比較。

cosine_similarity(np.array([4,0,5,3,5,0,0]).reshape(1,-1),\np.array([2,0,2,0,1,0,0]).reshape(1,-1))

我們看到他們有很高的相似度(記住 1 是完美的相似度),盡管他們對同樣產品的評價有所不同。為什么得到了這樣的結果?
問題在于我們對沒有評分的產品,選擇使用0 分。它表示強烈的(負的)一致性。在這種情況下, 0 不是中性的。
?

如何解決這個問題?
我們可以做的是重新生成每位用戶的評分,并使得平均分變為 0 或中性,而不是為缺失值簡單地使用 0。我們拿出每位用戶的評分,將其減去該用戶所有打分的平均值。

例如,對于用戶A,他打分的平均值為 17/4,或 4.25。然后我們從用戶 A 提供的每個單獨評分中減去這個值。
一旦完成,我們繼續找到其他用戶的平均值,從他們的每個評分中減去該均值,直到對每位用戶完成該項操作。

讓我們在新的數據集上嘗試余弦相似度。再次將用戶 A 和用戶 B、 C 進行比較。

A 和 B 之間的比較如下。

cosine_similarity(np.array([-.25,0,.75,-1.25,.75,0,0]).reshape(1,-1),\np.array([0,-.33,0,-.33,0,.66,0]).reshape(1,-1))

A 和 C

cosine_similarity(np.array([-.25,0,.75,-1.25,.75,0,0]).reshape(1,-1),\np.array([.33,0,.33,0,-.66,0,0]).reshape(1,-1))

我們可以看到, A 和 B 之間的相似度略有增加,而 A 和 C 之間的相似度顯著下降。這正是我們所希望的。
?

這種中心化的過程除了幫助我們處理缺失值之外,還有其他好處,例如幫助我們處理不同嚴苛程度的打分者,現在每位打分者的平均分都是 0 了。注意,這個公式等價于 Pearson相關系數,取值落在-1 和 1 之間。
?

讓我們現在采用這個框架,使用它來預測產品的評分。我們將示例限制為三位用戶 X、Y 和 Z,我們將預測 X 尚未評價, 而和 X 非常相似的 Y 和 Z 已經評過的產品,對于 X 而言會得到多少分。
?

先從每位用戶的基本評分開始

將中心化這些評分

?

想知道用戶 X 會給 Disposos' Diapers 打多少分。我們可以根據用戶評分中心化之后的余弦相似度獲得權重,并通過這些權重對用戶 Y 和用戶 Z 的評分進行加權計算。
先得到用戶 Y 和 X 的相似度。

user_x = [0,.33,0,-.66,0,33,0] user_y = [0,0,0,-1,0,.5,.5] cosine_similarity(np.array(user_x).reshape(1,-1),\np.array(user_y).reshape(1,-1))

計算用戶 Z 和 X 的相似度。

user_x = [0,.33,0,-.66,0,33,0] user_z = [0,-.125,0,-.625,0,.375,.375] cosine_similarity(np.array(user_x).reshape(1,-1),\np.array(user_z).reshape(1,-1))

現在有一個用戶 X 和用戶 Y 之間的相似度(0.42447212),以及用戶 A 和用戶 Z 之間的相似度(0.46571861)
整合起來,我們通過每位用戶與 X 之間的相似度,對每位用戶的評分進行加權,然后除以總相似度。
(0.42447212 × (4) +0.46571861 × (4.5)) / (0.42447212 +0.46571861) = 4.26
用戶 X 對 Disposos' Diapers 的預估評分為 4.26
?

基于項目的過濾

這種方法遠優于基于用戶的過濾,它被稱為基于項目的過濾。這是它的工作原理:每個被評分項目與所有其他項目相比較,找到最相似的項,而不是根據評分歷史將每位用戶和所有其他用戶相匹配。同時,也是使用中心化余弦相似度。


我們有一個效用矩陣。這一次,我們將看看用戶對歌曲的評分。每一列是一位用戶,而每一行是一首歌曲。

想知道 U3 對于 S5 的評分。這里,我們會根據用戶對歌曲的評分來尋找類似的歌曲,而不是尋找類似的用戶。
從每行歌曲的中心化開始,并計算其他每首歌曲和目標歌曲(即 S5)的余弦相似度。

最右邊的列是其他每行相對行 S5 的中心化余弦相似度。
需要選擇一個數字, k,這是我們為預測 U3 對歌曲的評分,所要使用的最近鄰居數量。在這個簡單的例子中,我們使用 k = 2。
我們可以看到對于歌曲 S5, S1 和 S3 是和它最相似的,所以我們將使用 U3 對這兩首歌的評分(分別為 4 和 5)。

計算評分
(0.98 × (4) +0.72 × (5)) / (0.98 +0.72) = 4.42
通過基于項目的協同過濾,我們可以看到 U3 很可能給 S5 打出高分 4.42。
?

基于用戶的過濾不如基于項目的過濾有效,這是為什么呢?
很有可能,你的朋友和你有共同的愛好,但是你們每個人都有自己喜歡,而別人毫無興趣的領域。
?

?

基于內容的過濾

作為一個音樂家, Tim Westergren 花了幾年時間傾聽其他有天賦的音樂家的作品,想知道為什么他們永遠不能拔尖。他們的音樂很好,和你在電臺收聽到的那些一樣好。然而,不知何故,他們從來沒有大的突破。他想,一定是因為他們的音樂沒有在足夠的、合適的人們面前展示。

Tim 最終退出了音樂家的工作,開始從事電影背景音樂的作曲。在那里,他開始思考每一塊音樂自己獨特的結構或 DNA,并可以將其分解為不同的組成部分。思考一番之后,他開始考慮圍繞這個想法創建一家公司,建立一系列音樂的基因組。他的一位朋友曾經創建并出售了一家公司, Tim 讓他來運作這個想法。 Tim 的朋友喜歡他的想法,并開始幫助他寫一個商業計劃,并為該項目收集了首輪融資。行動開始了。

在接下來的幾年里,他們雇用了一小群音樂家,對上百萬首音樂細致地編寫了幾乎 400個不同的特征,每個特征從 0 到 5 進行打分——所有都是通過手,或者說是通過耳朵進行的。每首 3 到 4 分鐘長的歌曲需要幾乎半小時的評級。

這些特征包括如此的參數:如領唱歌手的聲音有多么的沉重,或節奏是每分鐘多少拍。
?

他們花費了近一年的時間完成了首個原型。它完全使用 Excel 中的 VBA 宏構建,花了差不多 4 分鐘才返回一次推薦結果。但是,最后,它成功了,運作得非常好。

我們現在知道這家公司就是 Pandora Music,你很可能已經聽說過或使用過其產品,因為每天它有來自世界各地數百萬的用戶。毫無疑問,它是基于內容過濾的成功范例。
在基于內容的過濾中,不再將每首歌曲視為一個不可分割的單位,而是將它變成特征向量,然后就可以使用我們的老朋友余弦相似度進行比較。

不僅歌曲可以被分解成為特征向量,聽眾也可以被轉化為特征向量。聽眾的品味描述成為了空間中的向量,使我們可以測量他們的品味描述和歌曲本身之間的相似程度。

對于 Tim Westergren 來說,這是神奇的,因為不像其他推薦引擎依賴于音樂的人氣,這個系統的推薦是基于固有的結構相似性。也許有人從來沒有聽過歌曲 X,但如果他們喜歡歌曲 Y,那么他們應該喜歡歌曲 X,因為這兩首歌在基因上是幾乎相同的。這就是基于內容的過濾。
?

混合系統

我們已經學習了推薦系統的兩種主要形式。但是,需要注意的是,在任何大規模生產
環境中,推薦引擎可能同時利用這兩項技術。這被稱為混合系統,人們喜歡混合系統的原
因是,它有助于消除使用單一系統時可能存在的缺點。這兩個系統在一起,創建了更強大
的解決方案。


檢查每種類型的利弊

協同過濾的優點如下。
?沒有必要手動創建特征。

協同過濾的缺點如下。
?如果沒有大量的項目和用戶,它不能正常工作。
?當項目數量遠遠超過可能被購買的數量時,效用矩陣會有稀疏性。

基于內容的過濾的優點如下。
?它不需要大量的用戶。

基于內容的過濾的缺點如下。
?定義正確的特征可能是一個挑戰。
?缺乏“意外的驚喜”
?

當一家公司缺乏大量的用戶群,基于內容的過濾是更好的選擇,但是隨著公司的增長,加入協同過濾可以幫助我們為用戶提供更多的“驚喜”。

?

?

摘自《Python機器學習實踐指南》

?

?

總結

以上是生活随笔為你收集整理的【推荐系统】协同过滤浅入(基于用户/项目/内容/混合方式)的全部內容,希望文章能夠幫你解決所遇到的問題。

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