機器學習 | 吳恩達機器學習第九周學習筆記

CoreJT發表於2018-11-22

課程視訊

課程PPT    下載密碼:95wq

上週主要講解經典的無監督聚類演算法k-means,包括k-means的優化目標,原理以及一些引數設定細節;和降維演算法PCA的原理,目標,問題規劃以及應用等問題;本週將繼續學習機器學習的應用--異常檢測和推薦系統,包括高斯分佈,開發和評估異常檢測系統、多元高斯分佈,異常檢測演算法的應用以及推薦演算法(協同過濾)的原理和應用。

 

目錄

一、異常檢測

1.問題動機

2.高斯分佈

3.演算法

4.開發和評估異常檢測系統

5.異常檢測 VS 監督學習

6.選擇要使用的功能

7.多變數高斯分佈

8.使用多元高斯分佈的異常檢測

二、推薦系統

1.問題規劃

2.基於內容的推薦演算法

3.協同過濾

4.協同過濾演算法

5.向量化:低秩矩陣分解

6.實施細節:均值規範化

三、實驗


一、異常檢測

異常檢測通常用於無監督的場景中,但是和監督問題有些相似。

1.問題動機

  • 異常檢測例項

有一些飛機引擎,現在需要找出其中存在異常的引擎。假設每個引擎有都有兩個特徵:

那麼我們可以得到一個有關飛機引擎的資料集:{{x^{(1)},x^{(2)},...,x^{(m)}},將資料集視覺化得到下圖:

接下來根據樣本特徵來判斷新樣本x_{test}是否為異常樣本。上圖中的綠色代表新樣本,紅色代表訓練樣本,當新樣本離大多數訓練樣本比較近時,我們把它判定為正常的;否則判定為異常樣本。

  • 一般定義

假設有如下的無標籤訓練集,其中x^{(i)}表示第i個樣本的特徵向量:

異常檢測需要做的是,對訓練集進行建模,得到這些樣本的概率分佈p(x),然後對於新樣本x_{test},代入p(x)

其中,\varepsilon為設定好的閾值。

以上例為例,它的概率分佈可能如下所示:

在最中心的位置概率最大(大多數樣本位於中心位置),越往外走,概率越小。對於新樣本來說,如果它位於中心位置,則它應該是正常樣本;如果位於最外圍,和大多數樣本都不一樣,則它應該是異常樣本。

  • 異常檢測應用

1)欺詐檢測:

用特徵向量x^{(i)}表示使用者i的行為活動,可能包括:x_{1}使用者登陸次數,x_{2}使用者發帖次數,x_{3}使用者打字速度等特徵。以此我們可以構建一個關於使用者行為的資料集。

通過對該資料集進行建模,得到該資料集的概率分佈p(x),對於網站上的一些可疑使用者x_{test},檢測p(x_{test})<\varepsilon是否成立,若成立,則該使用者極有可能是異常使用者,存在欺詐行為或被盜號等。

2)工業生產領域:如上述的飛機引擎異常檢測問題

3)檢測資料中心的計算機:

用特徵向量x^{(i)}表示第i個計算機的特徵向量,可能包括:x_{1}記憶體使用,x_{2}硬碟訪問量,x_{3}CPU負載等特徵,也有可能包括一些複雜特徵如x_{4}:CPU負載/網路流量。以此我們可以構建一個關於計算機的資料集。

通過對該資料集進行建模,得到該資料集的概率分佈p(x),對於一臺計算機x_{test},檢測p(x_{test})<\varepsilon是否成立,若成立,則該計算機極有可能出現了異常,此時應讓技術人員進行具體察看。

 

2.高斯分佈

高斯分佈也叫正態分佈。

  • 高斯分佈

如果x\in R服從均值為\mu,方差為\sigma ^{2}的高斯分佈,則可以記做:

其中,N代表高斯分佈,它有兩個引數\mu\sigma ^{2},一旦這兩個引數確定,高斯分佈也就確定了。

高斯分佈的影象大致呈現出一個鐘形:

其中均值\mu是它的對稱軸,對應概率最大的位置,越遠離均值,概率越小;標準差\sigma決定“鐘形”的寬度。

高斯分佈公式:

  • 高斯分佈例子

高斯分佈均值\mu決定中心位置,標準差\sigma決定高斯函式的寬度,\sigma越大,寬度越大。因為是概率分佈曲線,高斯函式曲線與x軸包圍部分的積分為1,當\sigma增大一倍,為保持積分為1,高度會減少為原來的一半。

  • 引數估計

假設有如下的訓練集,其中每個樣本的特徵都是實數,即只有一個特徵:

假設這些樣本來自一個高斯分佈的整體,即:

引數估計要做的是,確定這些樣本來自哪個高斯分佈,即確定高斯分佈的引數,有如下公式:

需要注意的是,可能在一些概率教材中分母位置是m-1,但在機器學習中更常用m,其實2者在實際應用中差別不大。

 

3.演算法

本小節我們將利用高斯分佈構建一個異常檢測演算法:

  • 密度估計

假設有如下的訓練集,每個樣本的特徵向量都是n維的:

假設這n個特徵都各自服從一個不同的高斯分佈(獨立假設,實際上當不滿足獨立假設時,該演算法也可以用)即:

對該訓練集進行建模,得到它的密度估計(概率分佈)p(x):

  • 異常檢測演算法

1.為每一個異常檢測樣本選擇一個特徵向量x^{(i)},構建訓練集{x^{(1)},...,x^{(m)}}

2.引數估計,確定每個特徵x_{j}服從的高斯分佈,即確定\mu_{j}\sigma _{j}^{2}  (j=1,...,n)

3.計算出訓練集的概率分佈p(x)

4.對於新樣本的特徵向量x^{test},計算p(x^{test}),若p(x^{test})< \varepsilon則為異常樣本

  • 異常檢測例子

假設訓練集的樣本只有兩個特徵x_{1},x_{2},分別進行引數估計,得到2者的均值和方差,進而確定2者服從的正態分佈:

接下來通過上述公式,計算兩個特徵概率分佈的乘積,得到訓練集的概率分佈p(x),影象如下:

影象中的高度代表概率,對於新樣本x_{test}^{(1)},x_{test}^{(2)},如下圖綠叉所示,紅叉為訓練集樣本:

將新樣本分別代入p(x),得到兩個概率值,並設定閾值為0.02,對於上圖所示的情況,可能會得到以下結果:

x_{test}^{(1)}判定為正常樣本,x_{test}^{(2)}判定為異常樣本。p(x)影象突起的部分都有一個比較大的概率(大於閾值),大致對應下圖中洋紅色圈中的樣本,因此圈內的樣本極有可能是正常的,爾圈外則是異常的。

 

4.開發和評估異常檢測系統

之前我們一直把異常檢測看作是一個無監督學習的問題,但是如果你有一些帶標籤的資料,則可以評估異常檢測演算法的效能;而且,當為樣本選擇特徵時,如果不確定是否該納入某一個特徵,可以分別在兩種情況下進行訓練,在驗證集上分別評估效果,從而決定是否納入該特徵(模型選擇問題).

如果你有一個帶標籤的資料集,一般把它分為訓練集,驗證集和測試集3部分,其中:

訓練集一般全為正常的樣本(即使混入一些異常樣本也沒關係),將異常樣本分到驗證集和測試集中:

  • 飛機引擎異常檢測例子

假設資料集有10000個正常樣本(y=0),和20個異常樣本(y=1),一種推薦的分割資料集的方式是,按照60%,20%,20%的比例劃分為訓練集、驗證集和測試集,其中訓練集全是正常樣本,並用其擬合出訓練集的概率分佈p(x);將異常樣本分到驗證集和測試集中:

  • 推導和評估異常檢測演算法

1.在訓練集{{x^{(1)},x^{(2)},...,x^{(m)}}擬合概率分佈p(x),訓練過程是一個無監督的過程。

2.利用p(x)對驗證集/測試集中的樣本進行預測:

3.與真實標籤進行比較,評估演算法的效能。注意這是一個傾斜類,正樣本(y=1)很少,所以不要使用正確率或錯誤率進行評估;應計算TF,FP,FN,TN指標,進而計算出查準率和召回率,最終得到F1-score來評估演算法效能。

4.使用驗證集可以完成一些模型選擇問題,如是否應該對樣本納入某個特徵,以及演算法引數\varepsilon的選擇。比如,可以分別嘗試不同的\varepsilon,在驗證集上得到不同的F1-score,選擇使F1-score最大的那個引數作為演算法引數。

 

5.異常檢測 VS 監督學習

在上一小節中,我們應用異常檢測演算法時使用了帶標籤的資料,那麼既然資料有標籤我們為什麼不直接使用監督學習的方法對樣本進行學習呢?本小節,將對異常檢測和監督學習做一個比較:

1.當資料集中的正樣本(y=1,異常樣本)非常少(0-20),而負樣本(y=0,正常樣本)非常多時,我們一般使用異常檢測演算法;當資料集中存在大量正樣本和負樣本時,我們一般使用監督學習的方法。

2.對於異常檢測問題來說,一個樣本出現異常的情況是多種多樣的,而且在不斷的變化,可能過一段時間就會出現一個新的異常,如果使用監督學習的方法,很難從少量異常樣本中,學習到各種異常的情況;而對於異常檢測演算法來說,它只需要在大量的負樣本(正常樣本)中進行訓練,而不必花時間去學習異常樣本,只要一個樣本和大多數正常樣本的分佈不一樣,就可以判定為異常。

3.監督學習問題的新樣本,不會有太大的變化,一般都能在訓練集中找到類似的樣本。

4.異常檢測一般用在欺詐檢測、工業生產(飛機引擎異常檢測),檢測資料中心的計算機情況等場景,如果這樣場景的正樣本(異常樣本)足夠多,也可以轉化為監督學習問題。

5.監督學習問題一般用在垃圾郵件分類,天氣預測,癌症分類等場景中。

 

6.選擇要使用的功能

在使用異常檢測演算法之前,一個很重要的事情是如何為樣本設計和選擇合適的特徵。

  • 特徵不服從高斯分佈

之前我們在使用高斯分佈構建異常檢測演算法時,一般都是假設各個特徵服從高斯分佈。但實際上並不是每個特徵都近似於高斯分佈。

我們一般先對每個特徵分別進行檢查,繪製出直方圖,如果該特徵的直方圖如下所示:

則認為該特徵近似服從高斯分佈,可以直接用;但是如果一個特徵並不服從高斯分佈,比如直方圖是下面這樣的:

這種情況下,一般對這個特徵進行對映轉換,使轉換後的特徵近似服從高斯分佈(當然也可以不這麼做,實際上不管特徵服不服從高斯分佈,異常檢測演算法都能正常執行,但是轉換為可能效果會更好)。

轉換方式一般有兩種:

x_{j}=log(x_{j}+C)     或者  x_{j}=x_{j}^{a} ,其中a,C是引數,可以進行一系列的嘗試,直到轉換後的特徵直方圖大致符合正態分佈。注意:在驗證集和測試集也要做相應的轉換。

 

  • 如何為樣本選擇特徵

可以採用之前監督學習用過的方法----誤差分析。

可以為每個樣本確定一個最原始的簡單的特徵,然後進行訓練得到P(x),在驗證集上進行測試,找到模型檢測錯的樣本,並對其進行分析,看看是否能啟發你構建出一個新的特徵,再訓練模型,進而把檢測錯的樣本檢測對。

比如,在進行異常檢測時,樣本只有一個特徵,我們對其建模得到p(x),影象如下:

其中紅叉為訓練集樣本,綠叉是一個已知為異常的測試樣本,從上圖來看,它被淹沒在正常樣本中,也就是說當只有x1一個特徵時,是無法把它檢測出來的。此時,可以對這個沒檢測出來的異常樣本進行分析,看是否可以構建一個新的特徵x2,在這種情況下,可以把該異常樣本檢測出來,新增x2後可能如下圖所示:

在這種情況下,位於中心位置的樣本概率最大,為正常樣本,越往外走,概率越小,越有可能是異常樣本。之前的綠色樣本,如果僅看x1這個特徵,他是正常的,但新增特徵x2後,他在x2上的取值可能非常大,進而就可以把這個異常樣本檢測出來。

  • 例項:檢測資料中心的計算機

一個資料中心有可能有成千上萬臺計算機,我們需要對這些計算機進行異常檢測,一邊快速找到出現異常的機器。

再為計算機設計特徵時,既不能太泛,也不能太細,比如,你可能設計瞭如下四個特徵:

但是你可能會考慮到一些新的情況,正常情況下CPU load和network traffic會呈現出一個線性關係,一個高一般另一個也會高;當某臺機器出現死迴圈時,此時CPU負載會很高,而網路流量則不會變高,這種情況下,基於上述這個特徵可能不會檢測到,因為這四個特徵只是單獨考慮各自的情況,並沒有考慮他們之間的關聯。此時,可以創造出一個新特徵,來考慮cpu負載和網路流量的關聯,比如:

一旦出現死迴圈這種異常,x5和x6會非常大,和正常情況下會很不一樣,從而把這種異常檢測出來。

 

7.多變數高斯分佈

多元高斯分佈也叫多元正態分佈,他和之前的單元高斯分佈相比有優勢也有劣勢,接下來我們將具體進行討論:

  • 例項:檢測資料中心的計算機

假設我們現在只考慮其中的兩個特徵CPU負載和記憶體使用:

左圖的紅叉代表訓練樣本,右圖對訓練樣本的兩個特徵分別進行單元高斯分佈擬合,得到的影象,最終訓練集的概率分佈p(x)等於兩個特徵高斯分佈函式的乘積。

但我們觀察左圖時,我們發現訓練樣本在這兩個特徵上會呈現出一個正線性關係,也就是CPU負載高時,記憶體使用也會很大,也就是左圖中藍圈內的樣本大致是正常的。但是如果使用單元高斯分佈構建異常檢測演算法,他只是對特徵分別擬合高斯函式,並不能體現特徵之間的關聯。

比如,有一個異常樣本,如左圖中左上角的綠叉,該樣本在x1上的取值大約是0.5,在x2上的取值大約是1.5,如果使用單元高斯分佈,它會分別在各自的特徵上進行檢測,不會考慮特徵間的關聯。比如該樣本x1=0.5,從CPU負載角度來看,它對應的概率不是很低,屬於正常範圍;從記憶體使用來看,x2=1.5,對應的概率也不是很低,也屬於正常範圍,所以此時會檢測不出這個異常樣本,從而認為他是正常樣本。

也就是說,基於單元高斯分佈得到的訓練集概率分佈大致如左圖中的洋紅色圈所示,在中心位置概率最大,越往外越小,同一個圈上概率相等。這顯然是不對的,比如左圖洋紅色圈上的3個新樣本(綠叉),他們的概率是一致的,而實際上右上方的綠叉(正常)明顯比另外兩個(異常)的概率要高。

一種改進的方案是向上一小節講的那樣,構建一個新的特徵能體現出2者的關聯,如x3=x1/x2,再使用單元高斯分佈,就能檢測出之前檢測不出的異常;另一種改進方案是使用多元高斯分佈。

 

  • 多元高斯分佈

與單元高斯分佈不同,不用再分別對每個特徵擬合高斯分佈函式,最後通過乘積來得到訓練集的概率分佈p(x);而是直接對所有特徵一起擬合多元高斯分佈,得到訓練集的概率分佈p(x).

多元高斯分佈的引數:

多元高斯分佈公式(絕對值符號是對協方差矩陣求行列式):

  • 多元高斯分佈例子

假設每個樣本只有兩個特徵,即n=2,視覺化幾個多元高斯分佈的例子如下:

1.和單元高斯分佈類似,均值\mu決定中心位置(最值點的位置);

2.協方差矩陣\Sigma如果是對角矩陣(非對角線元素全為0),此時的多元高斯分佈和兩個單元高斯分佈的乘積是等價的,他的等高線圖中的橢圓的對稱軸與x1軸和x2軸平行。

3.協方差矩陣\Sigma對角線上的元素大小決定突起的寬度,數值越大越寬,高度越矮(保證影象下的積分為1)

4.協方差矩陣\Sigma是對角矩陣且對角線上的數值相等時,他的等高線圖是一個圓;對角線上數值不等時,等高線圖是一個橢圓,不同的數值代表在不同方向上的突起寬度。

5.當協方差矩陣\Sigma不是對角矩陣,即非對角線元素不為0,此時多元高斯分佈不再與單元的簡單乘積等價,它還會考慮不同特徵之間的關聯,它的等高線圖中的橢圓的對稱軸將不再與x1軸和x2軸平行。上述兩幅圖一個是兩特徵大致呈現正相關,另一個大致呈現負相關。

6.可以看出,單元高斯分佈的乘積是多元高斯分佈的特殊情況(\Sigma是對角陣)

 

8.使用多元高斯分佈的異常檢測

  • 多元高斯分佈

通過改變引數\mu ,\sum可以得到不同的多元高斯分佈(上一小節討論過)

  • 引數估計

對於一個給定的訓練集{x^{(1)},x^{(2)},...,x^{(m)}},其中x^{(i)}\in R^{n}:

  • 用多元高斯分佈進行異常檢測

1.利用給定的訓練集,進行引數估計得到\mu ,\sum

2.利用多元高斯分佈公式,得到訓練集的 概率分佈p(x):

3.對於新樣本x^{test},代入p(x),計算p(x^{test}),若滿足p(x^{test})<\varepsilon,則認為x^{test}為異常樣本。

之前也提到過,多元高斯分佈的不同在於他能考慮特徵之間的關聯,同樣使用之前兩個特徵的例子,x1 CPU負載和x2記憶體使用,使用多元高斯分佈得到的p(x)可能如下圖所示:

它會體現出兩個特徵的關係,概率分佈圖會沿y=x伸展,最內圈概率最大,越往外走,概率越來越小,這樣綠色的異常樣本就可以被檢測出來。

  • 基於單元高斯分佈的異常檢測模型與基於多元的模型的關係

基於單元高斯分佈的異常檢測模型:

基於多元高斯分佈的異常檢測模型:

之前提到過,原始模型是多元高斯模型的特殊情況,當\Sigma為對角矩陣(f非對角線元素全為0)時,二者是完全等價的,說明此時,特徵之間不存在任何的關聯。

一旦特徵之間存在關聯,\Sigma非對角線的元素將不再為0,此時2者將不再等價,使用多元高斯分佈能自動捕捉到這種關聯,如果此時使用單元高斯分佈,需要構建一個新特徵來體現這種關聯(之前有講)。

  • 如何對這兩種模型進行選擇

1.在實際應用中,基於單元高斯分佈的異常檢測模型更常用,基於多元高斯分佈的異常檢測模型用的比較少

2.多元高斯分佈在自動捕捉特徵間關聯的方面有很大的優勢,而使用基於單元的模型,需要構建新特徵來體現這種關聯(如之前的例子所示)

3.基於單元的模型計算成本更小,也就是說適用於特徵非常多的情況,即n=10000,n=100000時也可以用;而基於多元的模型計算成本非常高,因為要計算\Sigma矩陣(n*n)的逆。

4.當樣本數m比較小時,基於單元的模型同樣適用;而基於多元的模型在實際使用中需要滿足m\geqslant10n,並且\Sigma可逆。

5.使用基於多元的模型時,\Sigma矩陣一般是可逆的,除非不滿足m>n或者存在高度冗餘的特徵,如x1=x2,x3=x4+x5等特徵間存在嚴格的線性關係(線上性代數中稱為線性相關,不過這種情況在設計選擇特徵時幾乎不可能出現)

6.一般情況下,如果要考慮特徵之間存在的關聯,而且此時樣本數m很多,而特徵數n沒那麼多,m\geqslant10n時,使用基於多元的模型,可以自動捕獲特徵間的關聯;其他情況,則手動構建新特徵,再使用基於單元的模型。

 

二、推薦系統

1.問題規劃

  • 示例:預測電影的評級

使用者用0-5來評價每部電影,假設有一部分電影評價資料集如下:

其中列名為不同的使用者,行名為不同的電影。表中的數值代表使用者對電影的評分(0-5),?表示沒看過或沒評價。

接下來引入一些符號表示:

符號 含義
n_{u} 使用者數量
n_{m} 電影數量
r(i,j) 如果使用者 j 評價過電影 i 則r(i,j)=1,否則為0
y^{(i,j)} 使用者 j 對電影 i 的評分,當且僅當r(i,j)=1時有定義

通過上述資料,構建推薦系統,預測表格中?的取值,即預測使用者對沒看過的電影的評分,如果評分高的話,則推薦給該使用者。

一種簡單的思路:如上表資料所示,從使用者Alice的評價來看,她對前兩部電影評分都是5,可以發現這兩部電影都是愛情電影,由於第三部電影也是愛情電影,那麼她對該電影的評分應該也會很高,從而預測她對第三部電影的評分。

 

2.基於內容的推薦演算法

依舊使用上一小節的電影資料集,與之前不同的是,我們事先已知每一部電影的屬性,即每一部電影包含的型別。比如用兩個特徵x1浪漫程度,x2動作程度來表示每部電影,並增加特徵x0=1,那麼每部電影都可以用一個包含3個特徵的向量來表示:

比如,第一部電影可以用向量x^{(1)}=[1,0.9,0]表示。

接下來要做就是基於電影資料集和每部電影的特徵向量,來學習每位使用者的喜好向量\Theta ^{(j)} \in R^{3}(\Theta ^{(j)} \in R^{n+1}).然後可以用(\Theta ^{(j)})^{T}\cdot x^{(i)}來預測使用者 j 對未看過的電影 i 的評分,如已知第三部電影的特徵向量x^{(3)},並求得第一個使用者的喜好向量\Theta ^{(1)},那麼使用者1對第三部電影的評分可以這麼算:

  • 上述問題的一般形式

我們的目的是在資料集和電影特徵向量x^{(i)}已知的情況下,學習每位使用者的喜好向量\Theta ^{(j)},進而預測出使用者沒有看過的電影的評分。

在求\Theta ^{(j)},相當於使用一次線性迴歸,有n_{u}個使用者,相當於使用n_{u}次線性迴歸。優化目標是最小化這n_{u}次“線性迴歸”代價函式的和,得到每位使用者的喜好向量\Theta ^{(1)},...,\Theta ^{(n_{u})}

其中 i:r(i,j)=1使用者評價過的電影。

求解方法採用梯度下降法(或一些之前學過的高階優化方法),注意不懲罰第一個引數\Theta _{0}^{(j)}:

其實本質上就是線性迴歸,只不過沒有了之前的係數m,不過這對求解最優值沒有任何的影響。

 

3.協同過濾

特徵學習:學習演算法能自動學得所需要的所有特徵。

  • 基於內容的推薦演算法變型

依舊採用之前的電影資料集,不同的是我們不知道每一部電影的屬性,既不知道每部電影的特徵向量x^{(i)}:

但是,我們通過對每一位使用者進行採訪,知道了他們的喜好向量\Theta ^{(j)},那麼與之前類似,已知資料集和\Theta ^{(j)}可以採用相同的方法,求得每部電影的特徵向量x^{(i)}:

代價函式:

其中 j:r(i,j)=1,資料集中評價過電影的使用者。

求解方法採用梯度下降法(或一些之前學過的高階優化方法),注意不懲罰第一個引數,形式和之前基本一致。

  • 協同過濾

之前基於內容的推薦演算法,可以被歸類為以下兩種形式:

實際上這兩種形式都比較難實現,不論是實現調研得到電影的特徵向量,還是對每個使用者進行採訪得到其喜好向量,都不是一件容易的事情,而且每個電影的特徵可能比較複雜,不像之前只有愛情、和動作兩個簡單的特徵,可能會多種多樣。

因此,對於推薦系統,我們一般使用協同過濾,它是一種可以從資料集中學習到所有特徵向量的演算法,包括每部電影的特徵向量以及每位使用者的喜好向量,而不用事先知道其中的任何一個。

協同過濾的大致思想可以理解為,基於資料集,首先隨機初始化每位使用者的喜好向量\Theta ^{(j)},求得每部電影的特徵向量x^{(i)},再更新每位使用者的喜好向量\Theta ^{(j)},再更新每部電影的特徵向量x^{(i)},以此迴圈往復,最終演算法會收斂,得到每位使用者的喜好向量和每部電影的特徵向量。

下一小節將正式介紹協同過濾。

 

4.協同過濾演算法

  • 協同過濾優化目標

之前基於內容推薦演算法的兩種形式的代價函式如下:

協同過濾演算法的代價函式是把2者整合在一起

注意真正的協同過濾演算法,並不是像上一小節提到的那樣,初始化其中一部分特徵向量,求另一部分,在更新第一部分,再更新第2部分,...,直到兩部分都收斂,這只是一個簡單的思想;而是基於上述代價函式同時更新兩部分特徵向量。

當已知一部分特徵向量,求另一部分時,一般要新增偏置項x_{0}^{(i)}=1\Theta _{0}^{(j)}=1,即x^{(i)}\in R^{n+1},\Theta ^{(j)} \in R^{n+1};但當使用協同過濾同時求解兩部分特徵向量時,不需要新增偏置項,即x^{(i)}\in R^{n},\Theta ^{(j)} \in R^{n}.

  • 協同過濾演算法

 

5.向量化:低秩矩陣分解

本小節給出協同過濾演算法的向量化實現:

把之前資料集中的資料放在一個矩陣Y中,存放使用者對電影的評分:

協同過濾演算法預測的評分,會得到一個相同大小的矩陣:

每部電影的特徵向量放在矩陣X中,每位使用者的喜好向量放在矩陣\Theta中,X\Theta^{T}可以得到上述預測的評分矩陣:

線上性代數中該矩陣有低秩的特點,因此該演算法也被稱作低秩矩陣分解。

 

  • 找到相關的電影

對於每部電影 i ,我們可以通過協同過濾演算法得到他的特徵向量x^{(i)} \in R^{n},這個特徵向量可能維度很高,其中每一個特徵的物理意義或許也是難以理解的,但這並沒有任何的影響。

我們可以根據電影 i 的特徵向量,找到與他相關的電影 j,即兩部電影特徵向量的距離很小:

因此,如果使用者對電影 i 的評分很高,我們就可以找到與電影 i 相關的其他幾部電影推薦給它:

 

6.實施細節:均值規範化

假設有一位使用者Eve沒有對任何一部電影做出評價,如下圖資料集所示:

當最小化協同過濾的代價函式,求解\Theta ^{(5)}時,此時將只剩下正則化懲罰項,因為使用者沒有任何評分資料,前一項將不存在。假設電影只有兩個特徵,即n=2,那麼會得到的\Theta ^{(5)}=[0,0]],預測該使用者對每部電影的評分都將是0,這個結果是沒有意義的:

均值規範化可以幫助解決這個問題:

當存在使用者沒有評價任何一部電影時,可以對每部電影的評分計算平均值,然後將評分矩陣Y中每部電影的評分分別減去各自的均值,得到新的評分矩陣Y,來進行訓練得到x^{(i)},\Theta ^{(j)}.

在預測時,計算使用者 j 對電影 i 的評分再加上電影 i 的平均評分,作為最後的預測值:

對於使用者5 Eve來說,和之前一樣,訓練得到的喜好向量\Theta ^{(5)}=[0,0]],但是他對每部電影的預測評分將不再是0,而是每部電影的均值評分:

同理,當存在某部電影沒有任何一位使用者評價時,也可以採用類似的均值規範化方法,即對每位使用者的評分分別求均值,對原始的Y減去各自使用者的均值後,得到新的Y,再進行訓練,預測時把減去的均值再加回來。(不過幾乎不可能存在有一部電影沒有任何一位使用者評價的情況,所以這種情況可以忽略)

 

三、實驗

第九周實驗

 

 

 


 

相關文章