吳恩達機器學習:異常檢測與協同過濾

這是吳恩達機器學習的最後一課,此次學習的內容是機器學習的常見應用,異常檢測與協同過濾。課程中介紹的異常檢測主要基於 正態分佈,用於檢測出偏離正常值的數據。而協同過濾是 推薦系統 的一部分,利用已有用戶的評分來給你推薦商品、視頻等。git

點擊 課程視頻 你就能不間斷地學習 Ng 的課程,關於課程做業的 Python 代碼已經放到了 Github 上,點擊 課程代碼 就能去 Github 查看( 沒法訪問 Github 的話能夠點擊 Coding 查看 ),代碼中的錯誤和改進歡迎你們指出。github

如下是 Ng 機器學習課程第八週的筆記。算法

異常檢測

一般使用異常檢測的狀況是在一個含有正常和異常的數據集中,異常樣本數目遠小於正常樣本數目,使得沒法從異常數據中提取有效的特徵。因而只能經過學習正常數據的分佈來識別異常數據。具體來講,咱們經過數據學習一個機率模型 p(x),並經過一個閾值 \epsilon 來判斷數據是否異常。從直觀上來理解正常數據雖然因爲偏差等緣由有所偏離,但基本都還在一個區域範圍內,而異常數據則會離這個區域比較遠( 以下圖,紅圈裏的能夠看作異常值 )。機器學習

算法

在異常檢測中,假設特徵是相互獨立的並且服從正態分佈 x_j \sim N(\mu_j,\delta_j^2),因此:ide

p(x)=\prod\limits_{j=1}^np(x_j;\mu_j,\delta_j^2)=\prod\limits_{j=1}^n\frac{1}{\sqrt{2\pi}\delta_j}e^{-\frac{(x_j-\mu_j)^2}{2\delta_j^2}}

而後咱們只要經過數據計算 \mu_i\delta_i 就能夠獲得 p(x) 了,因而有以下算法:函數

  1. 選擇有助於區分異常數據的特徵 x_i
  2. 分別計算 \mu_1,...,\mu_n,\delta_1^2,...,\delta_n^2
\begin{align*}
\mu_j &= \frac{1}{m}\sum\limits_{i=1}^mx_j^{(i)} \\
\delta^2_j &= \frac{1}{m}\sum\limits_{i=1}^m(x_j^{(i)}-\mu_j)^2
\end{align*}
  1. 對於須要檢測異常的數據 x 計算 p(x),若是 p(x) < \epsilon 則判斷爲異常。

算法在特徵比較多時計算效率比較高,並且在一般狀況下即便特徵不獨立也可以獲得比較好的結果。若是特徵比較少而且特徵之間又相互關聯的狀況,這時候咱們可使用 多元正態分佈 來做爲模型,此時 p(x) 爲:學習

p(x)=\frac{1}{\sqrt{(2\pi)^{k}|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}

式中的 \Sigma協方差矩陣,在以前的課程筆記中有提到。.net

\epsilon 選擇

因爲咱們的數據有 偏斜類 的問題,因此須要用 查準率召回率 的結合 F_1 指數來評價模型,並選取 F_1 取最大時對應的 \epsilon 做爲閾值。3d

協同過濾

假設咱們有 n_m 部影片,而且有 n_u 位用戶對於其中一些影片的評價 y^{(i,j)}cdn

其中用戶對有些影片沒有打分,咱們但願可以估計這些評分並推薦高分的內容給用戶。用戶 j 有沒有給 i 電影評分記爲 R(i,j)。假設每部電影具備特徵向量 x^{(i)},對於用戶 (1),咱們像 線性迴歸 中那樣學習一個 h_\theta(x)=\theta_0^{(1)}+\theta_1^{(1)}x_1+\theta_2^{(1)}x_2+\dots+\theta_n^{(1)}x_n 來獲取用戶沒有打分的評分。能夠看出對於全部用戶,評分表能夠表示爲電影特徵矩陣和用戶參數矩陣的乘積:

X =
\begin{bmatrix}
— (x^{(1)})^T — \\
— (x^{(2)})^T — \\
\vdots \\
— (x^{(n_m)})^T —
\end{bmatrix},

\Theta =
\begin{bmatrix}
— (\theta^{(1)})^T — \\
— (\theta^{(2)})^T — \\
\vdots \\
— (\theta^{(n_u)})^T —
\end{bmatrix}

預測的評分 Predicated = X \Theta^T,值得注意的是 X, \Theta 都是未知的,它們都是須要學習的變量。

代價函數

肯定了學習模型,下一步就是要設定 代價函數。此次的 代價函數 和以前基本相同,不一樣的是在計算梯度的時候 X, \Theta 都須要求。下面直接給出 代價函數

\begin{array}{l l l}
  J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}) & = & \frac{1}{2} \sum_{(i,j):r(i,j)=1}  \left( (\theta^{(j)})^T x^{(i)} - y^{(i,j)}\right) ^2 \\
    & + & \frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^n (x_k^{(i)})^2 \\
    & + & \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^n(\theta_k^{(j)})^2
\end{array}

經過簡單的求導能夠獲得梯度公式:

\frac{\partial J}{\partial x_k^{(i)}} = \sum_{j:r(i,j)=1} ((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})\theta_k^{(j)} + \lambda x_k^{(i)} \\
\frac{\partial J}{\partial \theta_k^{(j)}} = \sum_{i:r(i,j)=1} ((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)} + \lambda \theta_k^{(j)}

和以前的學習算法相同,咱們只須要實現 代價函數 的部分並計算梯度值,調用 minimize 函數來獲取最優解就能夠了。有了 X, \Theta 的值,咱們就可以獲得預測的評分,經過評分高低就可以進行推薦啦。

課程總結

吳恩達機器學習課程做爲對機器學習基本的瞭解仍是不錯的。可是課程的內容比較老,像 深度學習強化學習 等內容都沒有涉及,缺少機率方面的視角,工程方面也只是提了一點點,這些也正是從此須要繼續學習的內容。 當駛向 機器學習之海 的時候,感受心中有一個方向很重要,即使它有多麼的不切實際。

So~,第八週的內容就是這些了,謝謝你們耐心閱讀。

相關文章
相關標籤/搜索