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