svd在推薦系統中的應用

2021-07-24 16:47:58 字數 3285 閱讀 7850

本文主要參考自yehuda koren的**factorization meets the neighborhood: a multifaceted collaborative filtering model

對於任意乙個m行n列的矩陣a,它必然能被分解為三個矩陣: a=

uσv

其中,σ

是乙個對角矩陣,對角線為該矩陣的所有奇異值,如下: σ=

⎡⎣⎢⎢

⎢⎢⎢σ

1σ2⋱

σr⎤⎦

⎥⎥⎥⎥

⎥ 其中r為矩陣a的秩,σ1

,σ2,

⋯,σr

按從大到小的順序排列。在實際使用中一般從

σ 中取前k個組成σ′

,從u中取出前k列組成u』,從v中取出前k行組成v』,然後將σ′

,u′,

v′這三個矩陣相乘,這樣得到的矩陣a』和原矩陣a十分相似,k越大,相似度越高。

若只將σ

′ 和u』相乘,得到: a=

bv′,

wher

eb=u

′σ′

其中b是m行k列的,v』是k行m列的。

使用者\物品

物品1物品2

使用者15

4使用者267

用rui 表示使用者u對物品i的評分。

在實際情況中,有一些物品的評分要比平均分高,有一些使用者的打分則可能比平均分低。

使用 μ

來表示總體的平均分,bu

表示使用者u的打分的平均值相對於

μ 的偏移量,bi

表示物品i的得分相對於

μ 的偏移量,使用bu

i 來表示**得到的u對i的評分,則**公式為: bu

i=μ+

bu+b

i 通過最小化下式即可訓練得到bu

和bi

σ(u,

i)∈k

((ru

i−μ−

bu−b

i)2+

λ1(b

2u+b

2i))

其中k=

根據上文提到的svd,使用者對物品的評分矩陣可以分解為兩個矩陣的乘積,將第乙個矩陣的每一行作為向量pu

分配給每個使用者,將第二個矩陣的每一列作為向量qi

分配給每個物品。那麼就有: r^

ui=p

tuqi

pu 可以理解為使用者u對物品的每個品質的喜好程度,qi

可以理解為物品i的每個品質的好壞程度。但是我們並不顯示地規定物品有哪些品質,只規定物品的品質的數量,規定的品質的數量越多,模型的精度越高。

再將上面的式子與上面的baseline estimates結合: r^

ui=μ

+bu+

bi+p

tuqi

使用梯度下降最小化下式即可得到bu

,bi,

pu,q

i σ(

u,i∈

k)((

rui−

μ−bu

−bi−

ptuq

i)2+

λ(b2

u+b2

i+||

pu||

2+||

qi||

2))

在basic svd的基礎上,使用物品的資訊來代替使用者的向量pu

得到如下公式: r^

ui=b

ui+q

ti(|

r(u)

|−12

σj∈r

(u)(

ruj−

buj)

xj+|

n(u)

|−12

σj∈n

(u)y

j)其中r(u)為使用者u評價過的物品的集合,相當於使用者對推薦系統的顯示的反饋。n(u)為使用者u瀏覽過但是沒有評分的物品的集合,相當於使用者對推薦系統的隱式的反饋。

這個模型與basic svd相比的乙個好處是當需要**乙個新的使用者對物品的評分時,不需要再重新訓練模型,只要使用者對系統給出了反饋即可進行**。

但是如果有新的物品被加進推薦系統的話則需要重新訓練模型。

svd++在基礎svd的基礎上加上了使用者的隱式反饋。 r^

ui=b

ui+q

ti(p

u+|n

(u)|

−12σ

j∈n(

u)yj

) 根據原作者的實驗,svd++與前兩種演算法相比**的準確率更高,但是並不具備asvd的優勢。用s

k(i)

表示與物品i最為相似的k個物品。 令r

k(i;

u)=r

(u)∩

sk(i

),nk

(i;u

)=n(

u)∩s

k(i)

**公式為: r^

ui=μ

+bu+

bi+|

rk(i

;u)|

−0.5σj

∈rk(

i;u)

(ruj

−buj

)wij

+|nk

(i;u

)|−0.5σj

∈nk(

i;u)

cij

我們把svd++和鄰居模型的**公式結合起來: r^

ui=μ

+bu+

bi+q

ti(p

u+|n

(u)|

−12σ

j∈n(

u)yj

)+|r

k(i;

u)|−

0.5σj∈

rk(i

;u)(

ruj−

buj)

wij+

|nk(

i;u)

|−0.5σj∈

nk(i

;u)c

ij根據原作者使用netflix提供的資料集進行的實驗,使用這種方式**出來的準確率最高。

引數訓練,使用梯度下降最小化下式: σ(

u,i)

∈k((

rui−

r^ui

)2+λ

1(b2

u+b2

i)+λ

2(||

qi||

2+||

pu||

2+||

yj||

2)+λ

3(σj

∈rk(

i;u)

w2ij

+σj∈

nk(i

;u)c

2ij)

)

SVD在推薦系統中的應用

其實說參考也不準確,準確地說應該是半翻譯半學習筆記。仔細整理一遍,感覺還是收穫很大的。任意乙個m n的矩陣a m行 n列,m n 可以被寫成三個矩陣的乘機 1.u m行m列的列正交矩陣 2.s m n的對角線矩陣,矩陣元素非負 3.v n n的正交矩陣的倒置 即a u s v 注意矩陣v需要倒置 直...

SVD在推薦系統中的應用

其實說參考也不準確,準確地說應該是半翻譯半學習筆記。仔細整理一遍,感覺還是收穫很大的。任意乙個m n的矩陣a m行 n列,m n 可以被寫成三個矩陣的乘積 1.u m行m列的列正交矩陣 2.s m n的對角線矩陣,矩陣元素非負 3.v n n的正交矩陣的倒置 即a u s v 注意矩陣v需要倒置 直...

SVD在推薦系統中的應用

mahout中有svd的推薦策略,今天查了一下資料了解了一下演算法原理,本質上是使用svd方法做特徵降維,然後再計算相似度。下面這篇文章寫的不錯,和大家分享一下。任意乙個m n的矩陣a m行 n列,m n 可以被寫成三個矩陣的乘積 1.u m行m列的列正交矩陣 2.s m n的對角線矩陣,矩陣元素非...