1. 程式人生 > >Coursera-吳恩達-機器學習-(程式設計練習7)K均值和PCA(對應第8周課程)

Coursera-吳恩達-機器學習-(程式設計練習7)K均值和PCA(對應第8周課程)

exercise 7 —— K-means and PCA

在本練習中,您將實現K均值聚類演算法並將其應用於壓縮影象。 在第二部分中,您將使用主成分分析來查詢面部影象的低維表示。

1 K-means

先從二維的點開始,使用K-means進行分類。
這裡寫圖片描述
K-means步驟如上,在每次迴圈中,先對所有點更新分類,再更新每一類的中心座標。

ex7.m中提供了一個例子,其中中 K 已經被手動初始化過了。

我們要把點分成三類,迭代次數為10次。三類的中心點初始化為(3,3),(6,2),(8,5).
得到如下影象。(中間的影象略去,只展示開始和完成時的影象)
這是初始影象:
這裡寫圖片描述

進行10次迭代後的影象:image
可以看到三堆點被很好地分成了三類。圖片上同時也展示了中心點的移動軌跡。
這裡寫圖片描述

用K-means進行圖片壓縮。
用一張128\times 128的圖片為例,採用RGB,總共需要128\times 128 \times 24 = 393216個bit。
這裡我們對他進行壓縮,把所有顏色分成16類,以其centroid對應的顏色代替整個一類中的顏色,可以將空間壓縮至16\times 24 + 128\times 128 \times 4 = 65920 個bit。
用題目中提供的例子,效果大概如下:
這裡寫圖片描述

2 PCA

在這個練習中,您將使用主成分分析(PCA)來執行降維。 您將首先嚐試使用示例2D資料集來直觀瞭解PCA如何工作,然後將其用於5000張面部影象資料集的較大資料集。

所提供的指令碼ex7 pca.m將幫助您逐步完成練習的前半部分。

先對例子中的二維向量實現降低到一維。
這裡寫圖片描述
這裡寫圖片描述
根據上圖可以看出,恢復後的圖只保留了其中一個特徵向量上的資訊,而垂直方向的資訊丟失了

Face image dataset

對人臉圖片進行dimension reduction。ex7faces.mat中存有大量人臉的灰度圖(32 \times 32) , 因此每一個向量的維數是 32 \times 32 = 1024。
如下是前一百張人臉圖:
這裡寫圖片描述

用PCA得到其主成分,將其重新轉化為 32\times 32 的矩陣後,對其視覺化,如下:(只展示前36個)
這裡寫圖片描述

取前100個特徵向量進行投影,
這裡寫圖片描述

可以看出,降低維度後,人臉部的大致框架還保留著,但是失去了一些細節。這給我們的啟發是,當我們在用神經網路訓練人臉識別時,有時候可以用這種方式來提高速度。