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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

协同过滤——基于模型的算法

發(fā)布時(shí)間:2024/1/23 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 协同过滤——基于模型的算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1 概述
    • 1.1 基于分解的方法
      • 1.1.1 分解相似度矩陣:特征值分解
      • 1.1.2 分解評分矩陣:奇異值分解(SVD)
      • 1.1.3 SVD、SVD++、時(shí)間敏感模型
    • 1.2 基于鄰域的學(xué)習(xí)方法
  • 2 SVD與LFM
    • 2.1 基本原理
    • 2.2 計(jì)算邏輯及優(yōu)化目標(biāo)
    • 2.3 優(yōu)化方法
    • 2.4 關(guān)于SVD和LFM
  • 3、SVD++
  • 4 時(shí)間敏感的因子模型

1 概述

基于模型的方法也叫做基于學(xué)習(xí)的方法,通過定義一個(gè)參數(shù)模型來描述用戶與物品,用戶與用戶(或者物品與物品)之間的關(guān)系,然后通過優(yōu)化過程得到模型參數(shù)。

基于模型的方法有一些優(yōu)勢:

  • 可以捕獲數(shù)據(jù)中的高層模式和趨勢,對異常值有更高的魯棒性,這將有助于得到更精確更穩(wěn)定的推薦結(jié)果。
  • 需要更少的內(nèi)存空間。
  • 參數(shù)都是離線學(xué)習(xí)的,在線的推薦過程會更快。

** 基于模型的方法可以分成2類:分解方法和自適應(yīng)近鄰學(xué)習(xí)方法。**

1.1 基于分解的方法

1.1.1 分解相似度矩陣:特征值分解

使用秩為n的矩陣W表示用戶之間或者物品之間的相似度,然后通過用更低的秩k的Q來近似W:
W^=QQT\hat{W} = QQ^T W^=QQT

求解因子矩陣Q等同于計(jì)算矩陣W的特征值分解:
W=VDVTW = VDV^T W=VDVT

1.1.2 分解評分矩陣:奇異值分解(SVD)

通過分解用戶–物品的評分矩陣,同樣可以解決冷啟動和覆蓋受限的問題。在這種方法中,一個(gè)∣U∣×∣V∣|U| \times |V|U×V的用戶–物品評分矩陣R可以近似為R^=PQT\hat{R} = PQ^TR^=PQT,其中P是一個(gè)∣U∣×k|U| \times kU×k的用戶因子矩陣,Q是一個(gè)∣V∣×k|V| \times kV×k的物品因子矩陣。

可以通過求解R的奇異值分解(SVD)來獲得:

R=U∑VTR = U\sum V^T R=UVT

基于模型的協(xié)同過濾基本原理是,將用戶對商品的評分矩陣A分解為2個(gè)(ALS)或者3個(gè)矩陣(SVD),然后就是這些矩陣相乘的結(jié)果,根據(jù)矩陣相乘結(jié)果與原有評分矩陣的誤差作為損失函數(shù)計(jì)算優(yōu)化。
SVD的基本原理見:【參考周志華《機(jī)器學(xué)習(xí)》P402】
!

SVD模型可以轉(zhuǎn)換為一個(gè)基于相似度的方法,該方法認(rèn)為用戶uuu的畫像由他評分過的物品隱式的決定,因此用戶uuu的因子向量可以通過評分后的物品jjj的因子向量權(quán)重組合得到。這就是SVD++。除此以外還有FISM,NSVD等。

在SVD++的基礎(chǔ)上再引入時(shí)間因子,可以進(jìn)一步提高預(yù)測的準(zhǔn)確度。

1.1.3 SVD、SVD++、時(shí)間敏感模型

這三個(gè)模型越來越復(fù)雜,引入的因子也在增多,所以準(zhǔn)確性提升,但計(jì)算效率下降。

1.2 基于鄰域的學(xué)習(xí)方法

最新研究表明,從數(shù)據(jù)中自動學(xué)習(xí)鄰域相比于預(yù)定義相似度計(jì)算存在一些優(yōu)勢。

(1)稀疏線性鄰域模型
一個(gè)典型的鄰域–學(xué)習(xí)推薦模型是SLIM算法,一個(gè)新的評分可以被預(yù)測為:
r^ui=ruwiT\hat {r}_{ui} = r_uw_i^T r^ui?=ru?wiT?
其中向量rur_uru?是評分矩陣R的第u行,向量wiw_iwi?中的非零元素對應(yīng)物品iii的近鄰集合。

SLIM的詳細(xì)內(nèi)容請P43或者見https://blog.csdn.net/weixin_39064571/article/details/78835939https://blog.csdn.net/weixin_39064571/article/details/78835939

(2)融入邊信息的稀疏鄰域模型
在當(dāng)今互聯(lián)網(wǎng)時(shí)代,用戶的屬性信息(如年齡性別LBS)或物品的描述信息更容易獲取,這些信息可以被融入SLIM模型。

2 SVD與LFM

矩陣分解模型把用戶和物品2方面的信息映射到一個(gè)維度為fff的聯(lián)合隱含義空間中,用戶-物品之間的交互(評分)可由該空間的內(nèi)積來建模。

2.1 基本原理

  • 每一個(gè)用戶uuu都與一個(gè)fff維向量pup_upu?相關(guān)聯(lián),每一個(gè)物品iii都與一個(gè)fff維向量qiq_iqi?相關(guān)聯(lián)。
  • 給定一個(gè)物品iiiqiq_iqi?向量的每個(gè)維度值的大小代表了該物品具備這些因子的程度(例如電影的喜劇程度是5,科幻程度是1)。
  • 給定一個(gè)用戶uuupup_upu?向量的每個(gè)維度值的大小代表了用戶對這些因子的喜愛程度(例如對喜劇的喜愛程度是0.1,對科幻的喜愛程度是0.5)。
  • 點(diǎn)積qipuTq_ip_u^Tqi?puT?表示用戶對物品的喜愛程度。

關(guān)于使用到的矩陣

  • 用戶對物品的評價(jià)矩陣是:R=∣U∣×∣T∣R = |U| \times |T|R=U×T
  • 用戶因子矩陣是:P=∣U∣×fP = |U| \times fP=U×f
  • 物品因子矩陣是:Q=∣T∣×fQ = |T| \times fQ=T×f
  • 預(yù)測的用戶對物品的評分矩陣是:R^=PQT\hat{R} = PQ^TR^=PQT

2.2 計(jì)算邏輯及優(yōu)化目標(biāo)

具體而言,對于用戶uuu對物品iii的評分,我們可以這樣計(jì)算:
r^ui=μ+bi+bu+qiTpu\hat{r}_{ui} = \mu + b_i + b_u + q_i^Tp_u r^ui?=μ+bi?+bu?+qiT?pu?
其中前三項(xiàng)表示用戶或者物品的基準(zhǔn)預(yù)測。μ\muμ表示整個(gè)評價(jià)區(qū)間的平均評分,bib_ibi?表示物品iii和所有物品平均分的偏離,bub_ubu?表示用戶uuu與所有用戶平均分的偏離。
為了學(xué)習(xí)模型中的參數(shù)bib_ibi?bub_ubu?、pUp_UpU?、qiq_iqi?,我們的優(yōu)化目標(biāo)為:
min?∑(rui?μ?bi?bu?qiTpu)2+λ(bi2+bu2+∥qi∥2+∥pu∥2)\min \sum(r_{ui} - \mu - b_i -b_u -q_i^Tp_u)^2 + \lambda(b_i^2 + b_u^2+\|q_i\|^2 + \|p_u\|^2) min(rui??μ?bi??bu??qiT?pu?)2+λ(bi2?+bu2?+qi?2+pu?2)

2.3 優(yōu)化方法

上述優(yōu)化目標(biāo),一般可以使用隨機(jī)梯度下降或者交替最小二乘法。

一種簡單的優(yōu)化算法是Funk推廣的,該算法對訓(xùn)練數(shù)據(jù)中的所有評分做循環(huán)。對于給定的評分的預(yù)測誤差記為:eui=rui?r^uie_{ui} = r_{ui} - \hat{r}_{ui}eui?=rui??r^ui?,因此,對于每一個(gè)樣本,我們可以通過朝著與梯度相反的方向來修正參數(shù):
bu←bu+γ(eui?λbu)bi←bi+γ(eui?λbi)qi←qi+γ(euipu?λqi)pu←pu+γ(euiqi?λpu)b_u \leftarrow b_u + \gamma (e_{ui} - \lambda b_u)\\ b_i \leftarrow b_i + \gamma (e_{ui} - \lambda b_i)\\ q_i \leftarrow q_i + \gamma (e_{ui}p_u - \lambda q_i)\\ p_u \leftarrow p_u + \gamma (e_{ui}q_i - \lambda p_u)\\ bu?bu?+γ(eui??λbu?)bi?bi?+γ(eui??λbi?)qi?qi?+γ(eui?pu??λqi?)pu?pu?+γ(eui?qi??λpu?)

2.4 關(guān)于SVD和LFM

SVD的基本原理見:【參考周志華《機(jī)器學(xué)習(xí)》P402】
!

奇異值分解有著廣泛的用途,例如對于低秩近似問題,給定一個(gè)秩為rrr的矩陣AAA,要求的其最優(yōu)的kkk秩近似矩陣A^\hat{A}A^,其中k&lt;&lt;rk&lt;&lt;rk<<r。
奇異值分解提供了上述問題的解釋解:對矩陣AAA進(jìn)行奇異值分解后,將矩陣∑\sum中的r?kr-kr?k個(gè)最小的奇異值置零獲得的矩陣∑k\sum_kk?,即僅保留最大的kkk個(gè)奇異值,則:
Ak=Uk∑kvkTA_k = U_k \sum_kv_k^T Ak?=Uk?k?vkT?
就是最優(yōu)解。

因此,可以通過SVD方式近似得到用戶-物品評分矩陣。
但在實(shí)際工程中,SVD非常難解,所以會用梯度下降或者ALS的方法將矩陣分解成2個(gè)矩陣的相乘,這就是LFM。

3、SVD++

考慮隱式反饋信息可以增加預(yù)測準(zhǔn)確度,這對于那些提供了大量隱式反饋而僅僅提供了少量顯式反饋的用戶尤為重要。

我們考慮2中情況:

  • 用戶沒有獨(dú)立的隱式反饋,此時(shí)可以通過考慮用戶評分的物品(無需考慮評分值)來得到用戶感興趣的信息。
  • 用戶有獨(dú)立的隱式反饋。比如租借了某些物品,搜索了某些物品,此時(shí)可以有多種的隱式反饋。
    我們以下分別介紹。

用戶對某些物品有一些隱式反饋,我們可以在SVD的基礎(chǔ)上,增加第二個(gè)物品因子,即為每一個(gè)物品iii關(guān)聯(lián)一個(gè)因子向量yiy_iyi?,計(jì)算評分時(shí):
r^ui=μ+bi+bu+qiT(pu+∣R(u)∣?1/2∑j∈R(u)yi)\hat{r}_{ui} = \mu + b_i + b_u + q_i^T(p_u + |R(u)|^{-1/2} \sum_{j \in R(u)}y_i) r^ui?=μ+bi?+bu?+qiT?(pu?+R(u)?1/2jR(u)?yi?)
其中集合R(u)R(u)R(u)包含用戶uuu評分的所有物品。也就是說用戶uuu的喜愛因子程度被建模為:pu+∣R(u)∣?1/2∑j∈R(u)yip_u + |R(u)|^{-1/2} \sum_{j \in R(u)}y_ipu?+R(u)?1/2jR(u)?yi?,其中∣R(u)∣?1/2|R(u)|^{-1/2}R(u)?1/2用于規(guī)范化。

同理,我們使用與SVD類似的方法做優(yōu)化求解各個(gè)參數(shù):
bu←bu+γ(eui?λbu)bi←bi+γ(eui?λbi)qi←qi+γ(eui(pu+∣R(u)∣?1/2)?λqi)pu←pu+γ(euiqi?λpu)?j∈R(u):yj←yj+γ(eui?∣R(u)∣?1/2?qi?λyi)b_u \leftarrow b_u + \gamma (e_{ui} - \lambda b_u) \\ b_i \leftarrow b_i + \gamma (e_{ui} - \lambda b_i) \\ q_i \leftarrow q_i + \gamma (e_{ui}(p_u + |R(u)|^{-1/2}) - \lambda q_i)\\ p_u \leftarrow p_u + \gamma (e_{ui}q_i - \lambda p_u)\\ \forall _j \in R(u): y_j \leftarrow y_j + \gamma (e_{ui}*|R(u)|^{-1/2} *q_i - \lambda y_i)\\ bu?bu?+γ(eui??λbu?)bi?bi?+γ(eui??λbi?)qi?qi?+γ(eui?(pu?+R(u)?1/2)?λqi?)pu?pu?+γ(eui?qi??λpu?)?j?R(u):yj?yj?+γ(eui??R(u)?1/2?qi??λyi?)

對于有多種隱式偏好的情況,模型可以調(diào)整為:

r^ui=μ+bi+bu+qiT(pu+∣N1(u)∣?1/2∑j∈N1(u)yi+∣N2(u)∣?1/2∑j∈N2(u)yi)\hat{r}_{ui} = \mu + b_i + b_u + q_i^T(p_u + |N^1(u)|^{-1/2} \sum_{j \in N^1(u)}y_i + |N^2(u)|^{-1/2} \sum_{j \in N^2(u)}y_i) r^ui?=μ+bi?+bu?+qiT?(pu?+N1(u)?1/2jN1(u)?yi?+N2(u)?1/2jN2(u)?yi?)

其中∣N1(u)∣?1/2∑j∈N1(u)yi|N^1(u)|^{-1/2} \sum_{j \in N^1(u)}y_iN1(u)?1/2jN1(u)?yi?∣N2(u)∣?1/2∑j∈N2(u)yi|N^2(u)|^{-1/2} \sum_{j \in N^2(u)}y_iN2(u)?1/2jN2(u)?yi?表示用戶的2中不同隱式行為。

4 時(shí)間敏感的因子模型

矩陣分解方法可以很好的對時(shí)間效應(yīng)建模,這樣可以提高預(yù)測結(jié)果的準(zhǔn)確度。
回顧一下用戶uuu對物品iii的評分預(yù)測:

r^ui=μ+bi+bu+qiTpu\hat{r}_{ui} = \mu + b_i + b_u + q_i^Tp_u r^ui?=μ+bi?+bu?+qiT?pu?
其中前三項(xiàng)表示用戶或者物品的基準(zhǔn)預(yù)測。μ\muμ表示整個(gè)評價(jià)區(qū)間的平均評分,bib_ibi?表示物品iii和所有物品平均分的偏離,bub_ubu?表示用戶uuu與所有用戶平均分的偏離,$ q_i^Tp_u$表示用戶評分因子模型。

上述四項(xiàng)中,除了μ\muμ相對穩(wěn)定外(即使變化也可以離線重算一次),另外三項(xiàng)都與時(shí)間相關(guān)。一般而言,我們認(rèn)為這3個(gè)隨時(shí)間變化的數(shù)值由以下3部分組成:

  • 一個(gè)基準(zhǔn)不變值。
  • 一個(gè)隨時(shí)間線性或者非線性變化的近似。
  • 一個(gè)局部的特定天的變化。

bub_ubu?為例:
bu(t)=bu+αu?devu(t)b_u(t)=b_u + \alpha_u * dev_u(t) bu?(t)=bu?+αu??devu?(t)
其中
devu(t)=sign(t?tu)?∣t?tu∣βdev_u(t) = sign(t-t_u) * |t - t_u|^{\beta} devu?(t)=sign(t?tu?)?t?tu?β
這部分也可以表示為非線性的形式。
bib_ibi?與$ q_i^Tp_u$也類似。于是預(yù)測模型調(diào)整為:
r^ui=μ+bi(tui)+bu(tui)+qiT(pu(tui)+∣R(u)∣?1/2∑j∈R(u)yi\hat{r}_{ui} = \mu + b_i(t_{ui}) + b_u(t_{ui}) + q_i^T(p_u(t_{ui}) + |R(u)|^{-1/2} \sum_{j \in R(u)}y_i r^ui?=μ+bi?(tui?)+bu?(tui?)+qiT?(pu?(tui?)+R(u)?1/2jR(u)?yi?

總結(jié)

以上是生活随笔為你收集整理的协同过滤——基于模型的算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。