吳恩達機器學習:無監督學習 | k-means 與 PCA

西部世界 第二季恰好放到第七集,課程總結也恰好是第七次。咱們關於 監督學習 的課程已經告一段落,此次 Ng 將給咱們介紹兩個很經常使用的 無監督學習 算法。一個是用來將數據劃分到不一樣類別的 k-means 算法,一個是用來提取重要特徵並給特徵降維的 PCA 算法。html

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

如下是 Ng 機器學習課程第七週的筆記。github

聚類

咱們常常會給事物作分類,把特徵相近的東西歸爲一類。而 無監督學習 中的聚類正是想讓計算機來完成這個工做。用數學語言表達就是要把每一個特徵數據 x^{(i)} 分配到 c^{(i)} 中。讓咱們看下課程做業中的聚類任務來有個直觀的感覺。( 下圖是將數據分爲三個簇 )算法

代價函數

假設要將數據分到 k,選取的中心分別爲 \mu_1,\mu_2,...,\mu_k。咱們的代價函數就是要將每一個特徵與被分配到的簇的中心之間的距離和最小化( 直觀來講就是湊得近的分一塊兒 )。機器學習

J(c^{(1)},c^{(2)},...,c^{(m)};\mu_1,\mu_2,...,\mu_k)=\frac{1}{m}\sum_{i=1}^m||x^{(i)}-\mu_{c^{(i)}}||^2

能夠看出 代價函數 一方面取決於 x^{(i)} 的分配,一方面取決於 中心的位置。ide

k-means

下面咱們先來看下 k-means 的算法,而後來解釋它是如何優化 代價函數 的。函數

隨機選擇 k 的中心 \mu_1,\mu_2,...,\mu_k 重複下面步驟直到收斂:學習

  1. 對於每一個 x^{(i)},計算 c^{(i)}x^{(i)} 距離第 j 個簇的中心最近,則 c^{(i)}=j
  2. 更新 \mu_k ( 新 \mu_k 爲全部知足 c^{(i)}=kx^{(i)} 的中心 )

對於步驟 1 來講,咱們固定了 \mu_1,\mu_2,...,\mu_k,併爲每一個 x^{(i)} 選取了距離最近的 ,這使得 代價函數 減少。對於步驟 2,咱們固定了 c^{(1)},c^{(2)},...,c^{(m)},並將 \mu_k 移動到了各個分類的中心,這也使得 代價函數 減少。所以隨着不斷循環這個過程,咱們將獲得一個最優解( 也多是局部最優 )。優化

相關問題

k-means 算法挺好理解的,最後咱們來講說簇中心的初始化與 k 的選擇問題。對於簇中心的初始化,通常直接隨機選 k 個數據爲中心,選好比說 100 次並計算 代價函數 的值,選擇其中最小的那一次的結果。 對於 k 的選擇,一方面能夠運用 肘部法則,原理是 代價函數 一開始會隨着 k 的增大降低的很快,但過了某個值以後降低變緩,咱們選擇這個點的 k 值。另外一方面咱們能夠根據本身的業務需求來選擇 k( 業務就是須要分爲 k 個類的狀況 )。.net

降維

在機器學習中,下降特徵的維度可以給咱們帶來不少好處。首先下降特徵的維度能夠提高學習的效率。其次降維可讓咱們的注意力集中在重要的特徵上。再有降維也能夠做爲一種數據壓縮的方法。這裏將要學習的降維算法被稱做 主成分分析PCA )。

協方差

在統計學中,協方差 表現了兩組數據之間的關聯性( 當數據爲同一個是就是 方差 )。爲了瞭解 協方差 與降維算法的關係,咱們先來看簡單的二維狀況。假設咱們的數據有兩個特徵( 如圖 ),而且已經作過 標準化。紅色的數據點在這個座標系下呈現出明顯的先關性( 協方差 大 )。

線性代數 的知識能夠知道,咱們可使用不一樣的 ( 特徵 )來表示這些數據,如圖中的綠色座標和藍色座標。經過直覺能夠發現若是將數據投影到較長的藍色座標上來降維是更爲合適的選擇。事實上這也是使得 協方差 最小的選擇, 協方差 的最小化讓每一個特徵和其它特徵的關係性降到最低,使得每一個特徵被獨立地表達,而降維就是從中選出貢獻( 方差 )比較大的特徵。對於數據 X( 這裏的 X 和課程做業中的不一樣,每列表示一個數據 ),特徵間的 協方差 能夠表示爲 協方差矩陣

C = \frac{1}{m} XX^{T} = \frac{1}{m} \begin{bmatrix}
    \sum\limits_{i=1}^{m}(x_1^{(i)})^2 & \sum\limits_{i=1}^{m}(x_1^{(i)}x_2^{(i)}) \\
    \sum\limits_{i=1}^{m}(x_2^{(i)}x_1^{(i)}) & \sum\limits_{i=1}^{m}(x_2^{(i)})^2 \\
\end{bmatrix}

協方差矩陣 對角線上的元素是數據在各個特徵上的 方差,其他是特徵之間的 協方差。因而降維的目標就成了找到一個基變換讓 協方差矩陣 裏除了對角線上的值,其他的都儘量小。不過在下面的討論中,咱們會知道能夠找到一組 使得變換後的 協方差 除了對角線上的值,其他都爲 0。

SVD

假設咱們的數據 X 經過基變換映射到了 YY=PXY協方差 D 爲:

\begin{array}{l l l}
  D & = & \frac{1}{m}YY^{T} \\
    & = & \frac{1}{m}(PX)(PX)^{T} \\
    & = & \frac{1}{m}PXX^{T}P^{T} \\
    & = & P(\frac{1}{m}XX^{T})P^{T} \\
    & = & PCP^{T}
\end{array}

到這裏就能夠看出咱們可以利用 矩陣對角化 的方法來獲得 D,就是存在單位正交特徵向量 E,使得 E^{T}CE=\Lambda,其中 \Lambda對角矩陣。經過這種方法能夠獲得基 P=E^{T},而 \Lambda 對角上的元素表示各個特徵的貢獻大小。不過咱們還能夠經過 矩陣分解 的技巧來解決這個問題,使用 SVD 來分解矩陣的話有 X=U \Sigma V^T,通過推導能夠獲得:

\begin{array}{l l l}
  XX^{T} & = & (U \Sigma V^T)(U \Sigma V^T)^T \\
    & = & (U \Sigma V^T)(V \Sigma U^T) \\
    & = & U \Sigma^2 U^T
\end{array}

因此能夠取 P=U^{T},而 D=\frac{1}{m} \Sigma^2。對於降維,只要取 D 中佔比比較高的特徵對應的 ,也就是 P 的一部分 P',對應的數據也變爲了 Y'。對於數據恢復,能夠經過簡單的推導獲得 X_{恢復}=P'^TY'

課外閱讀

關於 PCA 的內容,我以爲有兩篇文章對我頗有幫助,在這裏分享給你們:PCA的數學原理談談矩陣的 SVD 分解

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

相關文章
相關標籤/搜索