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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

推荐系统——协同过滤

發布時間:2023/12/10 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 推荐系统——协同过滤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

協同過濾

協同過濾算法一般是通過用戶之前的喜好或者相似的用戶的喜好來推薦商品

基于領域的協同過濾算法一般有兩種算法:

  • 基于用戶的協同過濾算法(UserCF):基于與用戶相似用戶的喜好進行推薦
  • 基于物品的協同過濾算法(ItemCF):基于用戶喜好的物品尋找相似的物品進行推薦

對于以上兩種算法而言,我們要進行相似性的對比,首先需要進行相似度的計算,為相似度的計算可以使用以下方法。

相似性度量方法

相似度度量可以使用很多指標,其本質還是計算不同事物之間的距離,那么距離越大,相似性越小,距離越小,相似性越大,那么,除了學習資料中提到的3個系數之外,我覺得也可以使用歐式距離,曼哈頓距離,切比雪夫距離等等。但在這里我就只說明學習資料中幾個系數。其他指標可以參考https://www.cnblogs.com/duanchw-37/archive/2012/08/24/2654019.html

  • 杰卡德相似系數,給出定義
  • simuv=∣N(u)∩N(v)∣∣N(u)∣∪∣N(v)∣sim_{uv} = \frac{|N(u) \cap N(v)|}{|N(u)| \cup |N(v)|}simuv?=N(u)N(v)N(u)N(v)?

    其中,N(u)代表喜歡物品u的用戶的集合

  • 余弦相似度
  • 余弦相似度可以抽象的想象以下,兩個向量在坐標系中的余弦夾角越小,那么它們的角度的余弦值就越接近于1,所以可以給出定義:

    simuv=∣N(u)∣∩∣N(v)∣∣N(u)?∣N(v)∣sim_{uv} = \frac{|N(u)| \cap |N(v)|}{\sqrt{|N(u) \cdot |N(v)|}}simuv?=N(u)?N(v)?N(u)N(v)?

    與杰卡德系數相比,余弦相似度的改變在于將分母中的“并”改變為“乘”

    python中提供了計算余弦相似度的函數

    from sklearn.metrics.pairwise import cosine_similarityi = [1, 0, 0, 0] j = [1, 0.5, 0.5, 0]cosine_similarity([a,b])
  • 皮爾遜相關系數
  • 皮爾遜相關系數在統計學中經常被提到,在這里也很好理解,用來解釋兩個事物之間的相關性,所以可以作為相似性度量的一個指標。對于相關系數的理解,我們利用概率論與數理統計中的協方差進行理解,下面給出定義:

    sim(u,v)=∑i∈I(rui?r ̄u)(rvi?r ̄v)∑i∈I(rui?r ̄u)2∑i∈I(rvi?r ̄v)2sim(u,v) = \frac{\sum_{i\in I}(r_{ui}-\overline{r}_u)(r_{vi}-\overline{r}_v)}{\sqrt{\sum_{i\in I}(r_{ui}-\overline{r}_u)^2}\sqrt{\sum_{i\in I}(r_{vi}-\overline{r}_v)^2}}sim(u,v)=iI?(rui??ru?)2?iI?(rvi??rv?)2?iI?(rui??ru?)(rvi??rv?)?

    其中,r ̄u\overline{r}_uru?表示為用戶打的所有分數的期望/物品被打的所有分的期望。

    其中,皮爾遜相關系數可以結合余弦相似度的計算方法

    計算r ̄u與r ̄v→將余弦相似度的計算公式中的分子改成減去r ̄u和r ̄v計算\overline{r}_u與\overline{r}_v \rightarrow 將余弦相似度的計算公式中的分子改成減去\overline{r}_u和\overline{r}_vru?rv?ru?rv?

    python中也給出了計算皮爾遜相關系數的函數

    from scipy.stats import pearsonri = [1, 0, 0, 0] j = [1, 0.5, 0.5, 0] pearsonr(i, j)

    當然,我們也可以直接使用numpy庫中的coefcorr函數進行計算

    import numpy as npi = [1, 0, 0, 0] j = [1, 0.5, 0.5 , 0] np.coefcorr(i, j)

    給出一個三個相似性度量系數的比較

    杰卡德系數余弦相似度皮爾遜相關系數
    利用兩個集合之間的交集來顯示集合之間的相互覆蓋率來體現集合間的相似度利用特征向量之間的夾角來體現兩個集合之間的相似度在余弦相似度的基礎上利用了期望的信息進行修正,減小了用戶評分偏置的影響。

    基于用戶的協同過濾——UserCF

    UserCF的主要思想是對于一個用戶,找到與其相似的用戶,將該用戶喜好的物品推薦給該用戶。

    所以首要目的即找到一個與當前用戶相似的用戶集合。

    給出一個例子進行解釋:

    物品1物品2物品3物品4物品5
    Alice5344?
    用戶131233
    用戶243435
    用戶333154
    用戶415521

    對于這個例子來說,因為在這里物品5對于Alice而言是缺失的,那么每個用戶的特征向量其實就只有4個維度,那么我們下面我們分別用余弦相似度和皮爾遜相似度去計算一下用戶之間的相似度。

  • 利用余弦相似度計算

  • 利用皮爾遜相關系數計算

  • 計算出用戶之間的相似度之后,此時我們需要補全二維表格中空缺的那個值,一般可以我們可以取與Alice相似的N個用戶的評分的平均值,但是這樣子無法保證用戶的標準相同,所以在這里我們不采用該種方法,于是我們將用戶打分的均值利用進來,有如下公式
    Ri,j=Ri ̄+∑k=1n(Si,k(Rk,j?R ̄k))∑k=1nSj,kR_{i,j} = \overline{R_i} + \frac{\sum_{k=1}^n(S_{i,k}(R_{k,j}-\overline{R}_k))}{\sum_{k=1}^n S_{j,k}}Ri,j?=Ri??+k=1n?Sj,k?k=1n?(Si,k?(Rk,j??Rk?))?
    其中,Ri,jR_{i,j}Ri,j?為用戶i對物品j的打分,R ̄i\overline{R}_iRi?是用戶i對所有物品打分的平均值,Si,kS_{i,k}Si,k?為用戶i與k的相似度(在這里,我們利用用戶之間的相似度進行加權求和)。
    假設我們取前2個最相似用戶,那么如果采用余弦相似度(皮爾遜相關系數也是相同步驟)去計算用戶相似度,那么有用戶1和用戶2與Alice最相似,于是,我們利用他們兩個的評分去計算缺失得分。
    利用上面的公式,我們可以計算出其得分為4.87
    利用計算出的得分,我們可以對多個物品進行排序,其中有

    物品1物品2物品3物品4物品5
    Alice53444.87

    于是推薦順序為1>5>3=4>2

    下面談談UserCF的缺點

  • 對于UserCF而言,要求用戶之間相似,但是(比如說利用用戶打分的特征向量)不同用戶之間的購買物品的重復率可能較低,導致無法找到較相似的用戶或者足夠數量的用戶,所以對于正反饋獲取困難的場景,UserCF并不適用
  • 維護相似度矩陣的開銷較大,不適合大用戶數據量
  • 基于物品的協同過濾——ItemCF

    基于物品的協同過濾,ItemCF,利用用戶過去的數據去為用戶推薦物品,即利用物品之間的相似性去進行推薦而不是利用用戶之間的相似性去推薦商品。算法認為:物品A和物品B具有很大的相似度是因為喜歡物品A的用戶大都喜歡物品B(對于物品的打分而言)
    還是用UserCF的例子來解釋

    物品1物品2物品3物品4物品5
    Alice5344?
    用戶131233
    用戶243435
    用戶333154
    用戶415521

    在這里,如何評判物品之間的相似度呢,我們以每個用戶為該物品打的分為特征。如物品1的特征向量為(3,4,3,1)(3, 4, 3, 1)(3,4,3,1)因為Alice對物品5的打分缺失,所以在這里Alice的打分在計算相似度時并不用計算入。
    那么在這里,我們還是利用余弦相似度進行物品相似度的計算

    在這里,我們要計算物品5與其他物品的相似度,所以,觀察結果,可以發現物品5與其他幾個物品的相似度分別為0.994,0.739,0.723,0.9400.994, 0.739, 0.723, 0.9400.994,0.739,0.723,0.940,所以選擇相似度較高的前兩個物品,即物品1和4。
    同樣的,我們利用
    Ri,j=Ri ̄+∑k=1n(Si,k(Rk,j?R ̄k))∑k=1nSj,kR_{i,j} = \overline{R_i} + \frac{\sum_{k=1}^n(S_{i,k}(R_{k,j}-\overline{R}_k))}{\sum_{k=1}^n S_{j,k}}Ri,j?=Ri??+k=1n?Sj,k?k=1n?(Si,k?(Rk,j??Rk?))?
    去計算缺失數據,此時,Si,jS_{i,j}Si,j?的值代表物品i與j的相似度,則最終我們可以計算出來得分為4.6
    那么,將得分排序

    物品1物品2物品3物品4物品5
    Alice53444.6

    則選取兩個物品進行推薦,我們選擇物品1和物品5

    協同過濾算法的改進

    對于協同過濾算法,我們可以對其的相關度的計算方法進行改進

    對于一號計算相關度的公式,如果物品i很受歡迎,那很多喜歡物品j的人也喜歡物品i,那么wijw_{ij}wij?就會變得很大,那么對于物品i而言,很多物品和物品i的相關度都會很大,即存在不合理性,所以我們可以引入N(j)N(j)N(j)來懲罰物品i的熱度,如二號所示,但是如果物品i十分受歡迎,導致所有人都會買i,那么wijw_{ij}wij?還是會很大,俗稱Harry Potter Problem,所以在這里我們控制N(j)N(j)N(j)N(i)N(i)N(i)的權重,來定制不同的懲罰程度,如三號所示。
    此外,對于ItemCF而言,我們需要對用戶活躍度進行懲罰(存在刷單現象,僅針對ItemCF),所以出現四號的計算方法。

    解釋一下第四個式子,N(u)N(u)N(u)在這里代表用戶uuu的活躍程度,那么對于既喜歡物品iii又喜歡物品jjj的用戶而言,如果用戶uuu的活躍度越高,那么這個用戶的評價的權重就越低。

    協同過濾算法的分析

    協同過濾算法存在泛化能力弱的問題,導致協同過濾算法無法將相似物品的相似信息推廣到其他物品上(這么解釋,就是兩個物品,我們知道他們很相似,但是為什么相似我們是不知道的,所以無法利用這兩個物品之間的相似程度去為其他物品之間是否相似提供信息,我們只能單純地知道它們相似),從而導致熱門物體具有較強的頭部效應,導致它和其他很多物品相似;而尾部物品由于特征向量稀疏,導致不經常被推薦。不過話雖然這么說,但是不是有個指標叫新穎程度嗎,那尾部物品的新穎程度應該比較高吧,那這樣它作為指標的話,尾部物品還是很大程度可以占用一定比例的。
    個人覺得還是因為協同過濾算法并沒有用上語義的信息,只能單純的依賴其他信息。

    參考資料

    https://www.cnblogs.com/duanchw-37/archive/2012/08/24/2654019.html

    總結

    以上是生活随笔為你收集整理的推荐系统——协同过滤的全部內容,希望文章能夠幫你解決所遇到的問題。

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