吳恩達機器學習(八)聚類與降維(K-Means,PCA)

  :  + \color{#f00}{***\ 點擊查看\ :吳恩達機器學習 \ —— \ 整套筆記+編程作業詳解\ ***}

本章對應編程練習:編程作業(python)| 吳恩達機器學習(7)K-Means,PCA

1. 聚類——K均值算法

(Clustering——K-Means Algorithm )

聚類算法將樣本聚類分成不同的簇(cluster),其中K-means是最普及的一種聚類算法,它的思想其實就是迭代,假設我們想要將數據聚類成k個簇,其步驟爲:

  1. 首先選擇K個隨機的點,稱爲聚類中心(cluster centroids);(圖a,b,以K=2爲例)

  2. 對於數據集中的每個點,按照與聚類中心的距離,將其與距離最近的聚類中心點聚成一類;(圖c)

  3. 計算每一個組的平均值(重心位置),將該組所關聯的中心點移動到平均值的位置;(圖d)

重複步驟 2、3 直至中心點不再變化(即算法收斂)。(圖e,f爲第二輪迭代)

在這裏插入圖片描述

1.1 K-Means的優化目標

在大多數我們已經學到的 監督學習算法中。 算法都有一個優化目標函數(代價函數),需要通過算法進行最小化 。

K均值的優化目標爲:J(c(1),,c(m),μ1,,μK)=1mi=1mX(i)μc(i)2J\left(c^{(1)}, \ldots, c^{(m)}, \mu_{1}, \ldots, \mu_{K}\right)=\frac{1}{m} \sum_{i=1}^{m}\left\|X^{(i)}-\mu_{c^{(i)}}\right\|^{2} 其中:

  • c(i)c^{(i)} 表示當前樣本點 x(i)x^{(i)} 對應聚類中心的索引;
  • μk\mu_k 表示第 kk 個聚類中心;
  • μc(i)\mu_{c^{(i)}} 代表與樣本點 x(i)x^{(i)} 最近的聚類中心點。

從公式上不難理解,k均值的優化目標就是讓每一個樣本點找到最優的聚類中心。

找出使得代價函數最小的 c(1),c(2),,c(m)c^{(1)}, c^{(2)}, \ldots, c^{(m)}μ1,μ2,,μK\mu_{1}, \mu_{2}, \ldots, \mu_{K},即:
minc(1),,c(m)μ1,,μKJ(c(1),,c(m),μ1,,μK)\begin{array}{l} \displaystyle\min_{ \begin{matrix} c^{(1)}, \ldots, c^{(m)} \\ \mu_{1}, \ldots, \mu_{K} \end{matrix} } J\left(c^{(1)}, \ldots, c^{(m)}, \mu_{1}, \ldots, \mu_{K}\right) \end{array}

1.2 隨機初始化

在運行K-均值算法的之前,我們首先要隨機初始化所有的聚類中心點:

  1. 我們應該選擇 K<mK<m,即聚類中心點的個數要小於所有訓練集實例的數量;
  2. 隨機選擇 KK 個樣本點作爲初始聚類中心。

K-均值的一個問題在於,不同的初始化位置會有不同的聚類結果,而且結果有可能會停留在一個局部最小值處,而這取決於初始化的情況。如下圖三種隨機初始化:

在這裏插入圖片描述
解決方法是多次初始化聚類中心,然後計算K-Means的代價函數,根據代價函數的大小選擇最優解。
在這裏插入圖片描述
這種方法在較小的時候還是可行的,但是如果 KK 較大,這麼做也可能不會有明顯地改善。

1.3 選擇聚類數

瞭解了算法原理後,面對實際問題時,我們怎麼決定聚類數呢?K=?

效果較差的 —— “ 肘部法則 ”

改變 K 值,獲得不同 K值和代價函數最小值的關係曲線:

  • 理想情況下我們可能會得到左下圖中類似 “肘部” 的額曲線,該處的 K 值即爲最佳聚類數。
  • 但是實際情況卻是像由下圖那樣,曲線較爲平滑,無法判斷哪裏是 “肘部”

    在這裏插入圖片描述

因此,沒有所謂最好的選擇聚類數的方法,通常是需要根據不同的問題需求,人工進行選擇的。選擇的時候思考我們運用K-均值算法聚類的動機是什麼,然後選擇能最好服務於該目的標聚類數。

例如,我們的 T-恤製造例子中,我們要將用戶按照身材聚類,我們可以分成3個尺寸:S,M,L,也可以分成5個尺寸:XS,S,M,L,XL,這樣的選擇是建立在回答“聚類後我們製造的T-恤是否能較好地適合我們的客戶”這個問題的基礎上作出的。


2. 降維

(Dimensionality Reduction)

簡言之,降維就是降低特徵的維數,例如每個樣本點有1000個特徵,通過降維,可以用100個特徵來替代原來的1000個特徵。

降維的好處在於:

  1. Data compression 數據壓縮,可以提高運算速度和減少存儲空間。
  2. Data Visualization 數據可視化,得到更直觀的視圖

如下圖是一個將 3 維特徵轉換爲 2 維特徵的例子在這裏插入圖片描述

2.1 PCA 的思想

對於降維問題來說,目前最流行最常用的算法是 主成分分析法 (Principal Componet Analysis, PCA)

PCA是尋找到一個 低維的空間 對數據進行 投影 ,以便 最小化投影誤差的平方( 最小化每個點 與投影后的對應點之間的距離的平方值 ),例如:

  • 2維→1維:點到直線的垂直距離
  • 3維→2維:點到平面的垂直距離

在這裏插入圖片描述
如上圖所示,低維空間是由其中的特徵向量 u(i)u^{(i)} 來確定的,因此PCA算法的核心就是尋找 低維空間的特徵向量。

PCA與LR的區別

線性迴歸(Linear Regression,LR)與 2維PCA的區別:雖然都是找一條直線去擬合,但是計算 loss (損失/代價函數)的方式不同。

  • PCA計算的是投影誤差(垂直距離),而LR計算的是預測值與實際值的誤差(豎直距離);
  • PCA中只有特徵沒有標籤數據y(非監督學習),LR中既有特徵樣本也有標籤數據(監督學習)。

    在這裏插入圖片描述

2.2 PCA 的步驟

利用 PCA 將 n維 降到 k維 的步驟:

  1. 特徵縮放(均值歸一化),使得特徵的數值在可比較的範圍之內。

  2. 計算協方差矩陣(covariance matrix),用 Σ\Sigma 表示(大寫的Sigma,不是求和符號):Σn×n=1mi=1n(x(i))(x(i))T\Sigma_{n×n}=\frac{1}{m} \sum_{i=1}^{n}\left(x^{(i)}\right)\left(x^{(i)}\right)^{T}

  3. 利用奇異值分解(SVD)來分解協方差矩陣,得到的 Un×nU_{n×n} 是一個具有與數據之間最小投射誤差的方向向量構成的矩陣
    [U,S,V]=svd(Σ)[U, S, V]= svd(\Sigma)Un×n=[u(1)u(2)u(3)u(n)]U_{n \times n}=\left[\begin{array}{ccccc} | & | & | & | & | \\ u^{(1)} & u^{(2)} & u^{(3)} & \ldots & u^{(n)} \\ | & | & | & | & | \end{array}\right]

  4. 取出 Un×nU_{n×n} 的前 kk 個向量作爲降維後的特徵矩陣 UreduceU_{reduce},將原始樣本 x(1),x(2),x(3),x(m)(xRn)x^{(1)}, x^{(2)}, x^{(3)}, \ldots \ldots \ldots x^{(m)}\left(x \in R^{n}\right) 轉化爲新的特徵向量下的新樣本點 z(1),z(2),z(3),..z(m)z^{(1)}, z^{(2)}, z^{(3)}, \ldots \ldots . . z^{(m)}
    z=UreduceTx=[u(1)u(2)u(3)u(k)]Tz=U_{r e d u c e}^{T} x=\left[\begin{array}{ccccc} | & | & | & | & | \\ u^{(1)} & u^{(2)} & u^{(3)} & \ldots & u^{(k)} \\ | & | & | & | & | \end{array}\right]^{T}

2.3 PCA反向壓縮——原始數據重現

既然PCA可以將高維數據壓縮到低維,那麼反着使用PCA則可以將低維數據恢復到高維。

因爲 z=UreduceTxz=U_{\text {reduce}}^{T} x,那麼反過來:xappox=Ureducezxx_{a p p o x}=U_{r e d u c e} \cdot z\approx x

注意這裏的 xappoxx_{a p p o x} 只是近似值。

在這裏插入圖片描述

2.4 如何選擇主成分的數量

在 PCA 算法中,我們把 nn 維特徵變量 降維到 kk 維特徵變量 。這個數字 kk 也被稱作 主成分的數量 或者說是我們保留的主成分的數量 。

首先來看看以下兩個值:

  1. PCA 的 投射平均均方誤差 (Average Squared Projection Error) :
    1mi=1mx(i)xapprox(i)2\frac{1}{m} \sum_{i=1}^{m}\left\|x^{(i)}-x_{a p p r o x}^{(i)}\right\|^{2}

  2. 訓練集的方差,它的意思是 平均來看 我的訓練樣本 距離零向量多遠1mi=1mx(i)2\frac{1}{m} \sum_{i=1}^{m}\left\|x^{(i)}\right\|^{2}

我們希望在平均均方誤差與訓練集方差的比例儘可能小的情況下選擇儘可能小的 kk 值:
1mi=1mx(i)xapprox(i)21mi=1mx(i)20.01(1%)\frac{\frac{1}{m} \sum_{i=1}^{m}\left\|x^{(i)}-x_{a p p r o x}^{(i)}\right\|^{2}}{\frac{1}{m} \sum_{i=1}^{m}\left\|x^{(i)}\right\|^{2}} \leq 0.01(1 \%) 我們把兩個數的比值作爲衡量PCA算法的有效性,例如比值小於 1%1\% 時,說明PCA算法保留了原始數據 99%99\% 的差異性。(一般選擇保留90%即可)

  • 因此我們可以先定義一個閾值,然後不斷實驗 k,直到獲得滿足閾值的最小 kk 值。

  • 此外,還可以利用奇異值 SijS_{ij} 來計算平均均方誤差與訓練集方差的比例。[U,S,V]=svd(Σ)[U, S, V]= svd(\Sigma) 其中的 Sn×nS_{n×n}爲對角矩陣:
    在這裏插入圖片描述
    有:1mi=1mx(i)xapprox(i)21mi=1mx(i)2=1Σi=1kSiiΣi=1mSii1%\frac{\frac{1}{m} \sum_{i=1}^{m}\left\|x^{(i)}-x_{a p p r o x}^{(i)}\right\|^{2}}{\frac{1}{m} \sum_{i=1}^{m}\left\|x^{(i)}\right\|^{2}}=1-\frac{\Sigma_{i=1}^{k} S_{i i}}{\Sigma_{i=1}^{m} S_{i i}} \leq 1 \%即:i=1kSiii=1nSii0.99\frac{\sum_{i=1}^{k} S_{i i}}{\sum_{i=1}^{n} S_{i i}} \geq 0.99

2.5 應用 PCA 的建議

PCA主要用在以下情況:

  1. 數據壓縮,可以提高運算速度和減少存儲空間。
  2. 數據可視化,得到更直觀的視圖

並注意:

  • 有些人覺的PCA也可以用來防止過擬合,但是這是不對的。應該用正則化。正則化使用y標籤最小化損失函數,使用了y標籤信息。而PCA只單純的看x的分部就刪除了一些特徵,損失了很多信息。
  • 另一個常見的錯誤是,默認地將主要成分分析作爲學習過程中的一部分,這雖然很多時候有效果,最好還是從所有原始特徵開始,只在有必要的時候(算法運行太慢或者佔用太多內存)才考慮採用主要成分分析。

參考:機器學習筆記week8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章