1. 程式人生 > >K-means聚類與PCA【Coursera 斯坦福 機器學習】

K-means聚類與PCA【Coursera 斯坦福 機器學習】

本文基於Coursera 斯坦福吳恩達機器學習課程

謝絕任何不標記出處的轉載

如有問題請聯絡作者

所有非手畫影象(除公式)均來自課程

侵刪

————————————————————————————————————————————————

1. 無監督學習簡介 unsupervised learning

無監督學習相比督學習,最大的差別就是沒有用來衡量學習效果的手段(有無監督)。

例如在監督學習中,對於迴歸模型我們可以用觀測值和估計值之差的平方和來衡量模型;對於分類問題我們可以用錯誤分類率來衡量。但在監督學習中,結果是未知的。舉個例子,將5000份論文按照關鍵詞進行學科分類,我們並不需要控制演算法正確分類,而是讓它自然而然通過學習進行歸類,這就是一個無監督學習的例子。

2. 聚類

聚類是無監督學習的一種演算法,它通過將擁有相似feature的量聚合進行歸類。常見的聚類應用場景有:市場份額分割、社交網路分析、組織計算機叢集幫助資料中心完成排程工作、天文資料分析等。

3. K-means 聚類

3.1 模型簡介

K-means比較好用影象來說明。大致可以分為兩類:資料點是明顯可區分的(separated)和資料點是非分離的(non-separated)。

3.1.1 分離聚類(Separated clusters)

我們用一個只有兩個簇(cluster)的K-means聚類來說明,如下圖所示,

(1)最開始,我們用兩個×(紅色和藍色兩個類別)標記在任意位置(隨機),計算每一個綠點(資料點)分別到兩個×的距離,

(2)根據計算距離,我們將點歸類到距離較小(離該×較近)的類別,然後分別計算所有紅點座標的均值,藍點座標的均值,

(3)這個計算的均值是我們新的分類點(cluster centroid),

重複(2)直到兩個質心(centroid)不會再有大幅度變動。


3.1.2 非分離聚類(non-separated clusters)

假設我們有以下身高體重的資料,想要把它們進行分類為SML三個型號,那麼就可以使用K-means聚類。


3.2 關於cluster K的選取與最優解

K在建模的時候十分重要,關乎到模型類別。但是也不需要特別擔心,如果最終結果裡,沒有一個數據點在類別ki裡,刪掉這個類就好了。這也說明,最終類別數量並不見得一定要與一開始的K一致。

對於K質心位置的選取,當類的數量K小於訓練集集數m時,我們可以隨機初始化K的質心,但我們很可能只能達到區域性最優解。一個解決辦法就是嘗試多種(100種以上)隨機初始化(random initialization),選取cost function最小的那個。

對於K數量的選取,一種不太有效的方法是Elbow method. 如下圖所示。隨著K的增加,cost function的最小值會逐漸減小。會在左圖紅圈處出現一個相對平衡的解(優化能力不錯,也不會太多類太浪費)。但現實中我們的elbow 圖往往是右圖所示,所以這個方法不太理想。

不過這也為我們提供了一種檢驗K是否陷入區域性最優解的方法,如果大K的cost function大於小K的,可能是大K陷入了一個區域性最優解,我們需要重新設定random initialization來尋求大K的解。

對於K數量的選取,更多時候我們需要結合聚類在現實生活中的目的來選擇。例如我們想要將5000篇論文分為三個學科,可能就需要選3-6個K來確保它至少是三個類。

3.3 目標函式的優化

對於K-means clustering,我們有如下目標函式。我們的目標是最小化J。該cost function J也被稱作Distortion function

從3.1.1 的步驟我們就可以看出,k-means 其實已經在進行J的最小化了:使用平均數求取質心、不斷改變質心的過程就是在縮小x與質心的距離。也是因為這個原因,K-means下的cost function J是不可能增大的,它只會減小。如果曲線不是單調遞減,說明程式碼有問題

4. Dimensionality Reduction and PCA

4.1  Why dimensionality Reduction

4.1.1 Data Compression 資料壓縮

資料壓縮就是採用對映的方法給資料降維。舉一個例子,如下圖所示,我們想要把一個三維資料組(x1, x2, x3)降維到一維。首先將3D座標軸上的點投影到基向量為z1和z2單位向量的二維平面上,注意這個平面應該是矩形的。


然後我們得到了如下(4)所示平面(注意這只是個巧合,並不是所有投影都能變成線性模型的形狀)。將該2D資料投影到紅線(v1),我們就可以得到一個一維的資料組(5)。


4.1.2 資料視覺化

降維利於做資料視覺化,可以把高維度的資料降維到2D-3D。但是對feature的解釋就會變得比較麻煩了,基本全部變成了多重比例。

4.2 Principal Component Analysis(PCA) 

4.2.1 Problem Formulation

PCA是無監督學習的一種演算法,用於降維和視覺化。通過尋找合適的向量,將投影的誤差降到儘可能低。舉個例子,在做監督學習時,features過多可以用PCA先降個維。對於新features的定義,我們應該在訓練集完成;但是測試集和CV集也可以應用PCA。這裡需要注意的是,對於降維,PCA只有在原資料無法很好擬合的時候再用,不要一上來就PCA.

這裡需要注意以下2D到1D的PCA和線性迴歸的區別。從目的上講,線性迴歸是為了更好地預測未知資料,PCA只是為了降維。從手法上,線性迴歸的擬合是通過給定資料集使用最小二乘等方法求解,在解釋變數中不同的變數有不同的權重,而PCA就是投影,所有的變數都一視同仁。

PCA不可以用來防止過擬合!過擬合應該用正則化處理。

4.2.2 PCA演算法概述

在使用PCA演算法前,因為每個feature的範圍都不一樣,我們要對資料做預處理。簡單來說就是每個數減均值(mean normalization)或者一般的feature scaling(減均值除以標準差)。然後計算n*n協方差矩陣(covariance matrix):


計算協方差矩陣的特徵向量(eigenvectors)。對於特徵向量的理解,這裡提供CSDN博主“會敲鍵盤的猩猩”的一篇文章:《特徵值和特徵向量》(https://blog.csdn.net/u010182633/article/details/45921929)。

在matlab裡我們用svd() 或 eig()計算(前者居多)。我們需要的是svd()的返回值U matrix。我們取U matrix的前k列作為需要降到的維度,即z matrix。 將z轉置乘以X matrix,就成為了新的k*n features。 


下面來看一個例子。對於2D資料x1, x2降維,我們使用PCA,得到右下角一維資料。

4.2.3 對於維度K的選擇

對於一組n維的資料,我們要將其降維到K維。K也被稱為the number of principal components。我們依然使用最小化cost function的思想來做。投射錯誤均方很好理解,total variation in the data則意味著我們的資料距離0的距離。


在滿足如下條件後,我們選擇最小的k。 下式意味著"99% of variance is retained"。除了0.01,常用的還有0.05.


對於給定k, 我們通過計算上式是否符合小於0.01條件來判斷其是否合適。但是這是一個非常沒有效率的方法,在matlab種,我們用下圖右邊的S矩陣。