[机器学习笔记]Note14--推荐系统
繼續(xù)是機(jī)器學(xué)習(xí)課程的筆記,本節(jié)課將介紹推薦系統(tǒng)的內(nèi)容。
問題形式化
推薦系統(tǒng)是機(jī)器學(xué)習(xí)的一個非常重要的應(yīng)用,在很多音樂、購物等網(wǎng)站都有推薦系統(tǒng),如豆瓣,淘寶,網(wǎng)易云音樂等都是有使用到推薦系統(tǒng)的,因此推薦系統(tǒng)的應(yīng)用范圍非常廣泛。
我們從一個例子開始定義推薦系統(tǒng)的問題。
假設(shè)我們是一個電影供應(yīng)商,我們有5部電影和4個用戶,我們要求用戶為電影評分。
由上圖可以知道,前3部電影是愛情片,后兩部是動作片,用戶Alice和Bob似乎更傾向于愛情片,而其他兩位用戶Carol和Dave似乎更傾向于動作片。并且沒有一個用戶給所有的電影都打過分,我們希望構(gòu)建一個算法來預(yù)測他們每個人可能會給他們沒看過的電影打多少分,并依此作為推薦的依據(jù)。
下面引入一些標(biāo)記:
- nu代表用戶的數(shù)量
- nm代表電影的數(shù)量
- r(i,j)=1表示用戶i給電影j評過分
- y(i,j)代表用戶i給電影j的評分,在上圖中,其評分范圍是0~5分
- mj代表用戶j評過分的電影的總數(shù)
基于內(nèi)容的推薦系統(tǒng)
在一個基于內(nèi)容的推薦系統(tǒng)算法中,我們假設(shè)對于我們希望推薦的東西有一些數(shù)據(jù),這些數(shù)據(jù)就是有關(guān)這些東西的特征。
在我們的例子中,我們可以假設(shè)每部電影都有兩個特征,如x1代表電影的浪漫程度,x2代表電影的動作程度。
如上圖所示,每部電影都有一個特征向量,如x(1)=[0.9,0]是第一部電影的特征向量。
下面我們可以基于這些特征來構(gòu)建一個推薦系統(tǒng)算法。
假設(shè)我們使用線性回歸模型,我們可以針對每個用戶都訓(xùn)練一個線性回歸模型,如θ(1)是第一個用戶的模型的參數(shù)。
于是,我們有: 
 * θ(j)是用戶j的參數(shù)向量 
 * x(i)是電影i的特征向量
對于用戶j和電影i,我們預(yù)測評分為:(θ(j))T(x(i))
對于用戶j,該線性回歸模型的代價(jià)函數(shù)為預(yù)測誤差的平方和,加上歸一化項(xiàng): 
 
其中,i:r(i,j)=1表示我們只計(jì)算用戶j評過分的電影。在一般的線性回歸模型中,誤差項(xiàng)和歸一化項(xiàng)應(yīng)該都是乘以12m,在這里我們將m去掉,并且不對偏倚項(xiàng)θ0進(jìn)行歸一化處理。
上面的代價(jià)函數(shù)是針對一個用戶的,為了學(xué)習(xí)所有用戶,我們將所有用戶的代價(jià)函數(shù)求和: 
 
如果我們要用梯度下降法來求解最優(yōu)解,我們計(jì)算代價(jià)函數(shù)的偏導(dǎo)數(shù)后得到梯度下降的更新公式為: 
 
協(xié)同過濾算法
接下來介紹一種可以自行學(xué)習(xí)所要使用的特征的算法–協(xié)同過濾算法。
在之前的基于內(nèi)容的推薦系統(tǒng)中,對于每一部電影,我們都掌握了可用的特征,使用這些特征訓(xùn)練出了每一個用戶的參數(shù)。相反地,如果我們擁有了用戶的參數(shù),我們可以學(xué)習(xí)得出電影的特征。也就是給出參數(shù)θ(1),…,θ(nu),來學(xué)習(xí)x(1),…,x(nm),那么優(yōu)化代價(jià)函數(shù)的公式如下所示: 
 
但是如果我們即沒有用戶的參數(shù),也沒有電影的特征,這兩種方法都不可行了。而協(xié)同過濾算法可以同時學(xué)習(xí)這兩者。
我們的優(yōu)化目標(biāo)便改為同時針對x和θ進(jìn)行。 
 
對代價(jià)函數(shù)求偏導(dǎo)數(shù)的結(jié)果如下:
x(i)k=x(j)k?α(∑i:r(i,j)=1((θ(j))Tx(i)?y(i,j))θ(j)k+λx(i)k)θ(j)k=θ(j)k?α(∑i:r(i,j)=1((θ(j))Tx(i)?y(i,j))x(i)k+λθ(j)k)
注意,在協(xié)同過濾算法中,我們通常不使用偏倚項(xiàng),如果需要的話,算法會自動學(xué)得。
協(xié)同過濾算法使用步驟如下:
通過這個學(xué)習(xí)過程獲得的特征矩陣包含了有關(guān)電影的重要數(shù)據(jù),這些數(shù)據(jù)不總是人能讀懂的,但是我們可以用這些數(shù)據(jù)作為給用戶推薦電影的依據(jù)。
低秩矩陣分解(Low Rank Matrix Factorization)
接下來會介紹協(xié)同過濾算法的向量化實(shí)現(xiàn),以及使用該算法可以做的其他事情,比如正在觀看一部電影,能否推薦另一部相關(guān)的電影。
首先還是利用初始給出的電影的例子,如下圖所示:
矩陣Y是一個5×4的矩陣,代表的就是左邊4個用戶分別給5部電影的評分,其中?號表示該用戶沒有看過該電影,因此沒有打分。根據(jù)這個矩陣,可以根據(jù)評分公式(θ(j))T(x(i)),得到如下圖所示的評分矩陣:
上述預(yù)測評分矩陣中的位置(i,j)表示的就是用戶j給電影i的評分,它的值就是(θ(j))T(x(i))。因而,這個矩陣第一行代表的就是所有用戶分別給第一部電影的評分,即第i行表示所有用戶給電影i的評分,而第j列表示用戶j給所有電影的評分。
這里可以使用向量化實(shí)現(xiàn),如定義一個X和θ矩陣,分別如下所示定義: 
 
然后預(yù)測評分矩陣就等于 XθT。
這里由于XθT的低秩屬性,因此協(xié)同過濾算法也被稱為低秩矩陣分解。
接下來就介紹如何尋找相關(guān)的電影,對于一部電影i,我們根據(jù)協(xié)同過濾算法可以學(xué)習(xí)到一個特征向量x(i),在這個向量中包含了x1,x2,…,xn個特征,這些特征包含了電影的重要數(shù)據(jù),但一般很難進(jìn)行數(shù)據(jù)可視化,同時也可能是人很難解釋的這些特征實(shí)際上是什么,但這種特征學(xué)習(xí)方法得到的特征卻是可以幫助我們進(jìn)行推薦。
例如,如果一個用戶正在觀看電影x(i),我們可以尋找另一部電影x(j),依據(jù)是兩部電影的特征向量之間的距離||x(i)?x(j)||的大小。當(dāng)這個距離很小的時候,表示兩部電影是非常相似的。
均值歸一化
最后介紹均值歸一化,它有時候可以使得推薦算法運(yùn)行得更好。
首先看下如下面所示的用戶評分?jǐn)?shù)據(jù):
這里新增一個用戶Eve,并且Eve沒有為任何電影評分,那么我們以什么為依據(jù)為Eve推薦電影呢?
我們首先需要對結(jié)果Y矩陣進(jìn)行均值歸一化處理,將每一位用戶對某一部電影的評分減去所有用戶對該電影評分的平均值,如下所示:
上圖中μ矩陣就是一個均值矩陣,第i行表示所有用戶對電影i的評分的平均值。進(jìn)行均值歸一化后,我們將使用最右邊的新的Y矩陣來訓(xùn)練算法。
而如果我們要用新訓(xùn)練出的算法來預(yù)測評分,則需要將平均值重新加回去,預(yù)測值為(θ(j))T(x(i))+μi。
對于Eve,我們的新模型會認(rèn)為她給每部電影的評分都是該電影的平均分。
此外,如果某部電影沒有評分,也可以使用這種均值歸一化的方法,只是變成對每列數(shù)據(jù)進(jìn)行均值歸一化。
小結(jié)
本節(jié)課,介紹了機(jī)器學(xué)習(xí)一個很重要的應(yīng)用–推薦系統(tǒng),介紹了其基本的定義以及使用的算法。
總結(jié)
以上是生活随笔為你收集整理的[机器学习笔记]Note14--推荐系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 蓝牙技术的工作原理及用途
- 下一篇: linux异步io底层原理,异步IO简析
