1. 程式人生 > >機器學習 | 吳恩達機器學習第八週學習筆記

機器學習 | 吳恩達機器學習第八週學習筆記

課程視訊連結

第八週PPT 下載密碼:qedd

上週主要講解了支援向量機SVM的原理包括優化目標、大間隔以及核函式等SVM核心內容,以及SVM的使用。本週主要講解經典的無監督聚類演算法k-means,包括k-means的優化目標,原理以及一些引數設定細節;和降維演算法PCA的原理,目標,問題規劃以及應用等問題。

 

目錄

一、無監督學習

1.無監督學習

2.K-Means演算法

3.優化目標

4.隨機初始化

5.選擇聚類數量

二、降維

1.目標I:資料壓縮

2.目標II:視覺化

3.主成分分析問題規劃1

4.主成分分析問題規劃2

5.主成分數量選擇

6.壓縮重現

7.應用PCA的建議

三、實驗


一、無監督學習

1.無監督學習

首先回顧一下之前的監督學習問題:

在監督學習問題中,每個訓練樣本都有一個標籤,目標是用假設函式去擬合訓練集,產生決策邊界,對訓練樣本進行分類:

而在無監督學習問題中,訓練樣本沒有任何標籤資訊。我們需要做的是把這些無標籤的資料輸入到演算法中,利用演算法找到這些資料中隱藏的結構。

對於下圖中的資料,我們可以用演算法找到一種隱藏結構-簇(這些資料可以分為兩組分開的簇),我們稱這個演算法為聚類演算法,這是我們學習的第一個無監督演算法。當然無監督演算法還有很多,可以發現數據中隱藏的不同結構,不僅僅是簇:

 

聚類的應用:

  • 市場分割:對資料庫中的顧客資訊,根據市場進行分組,這樣可以針對不同市場進行改進。
  • 社交網路分析:找到關係密切的不同群體。
  • 組織計算機叢集
  • 瞭解銀河系的構成

2.K-Means演算法

K-Means是目前使用最廣泛的聚類演算法。

  • K-Means原理

第一步:視覺化一組無標籤訓練集(x^{(i)}\in R^{2},下圖中的綠點),隨機選擇兩個聚類中心(下圖中的紅、藍叉):

第二步:遍歷每個樣本點,計算其與兩個聚類中心的距離,離哪個聚類中心更近,就把該點劃分為哪個聚類中心,一次遍歷後如下所示:

第三步:移動聚類中心,分別對上圖中的紅、藍色點計算均值,得到新的聚類中心:

重複第二、三步,直到聚類中心不在變化為止,得到的最終聚類效果如下:

  • K-means演算法輸入

  • K-means演算法流程

其中第一個內迴圈是簇分配,c^{(i)}=min_{k} ||x^{(i)}-\mu _{k}||^{2};

第2個內迴圈是更新聚類中心(簇).比如,在第一個內迴圈結束後,有x^{(1)},x^{(5)},x^{(6)},x^{(10)}四個樣本點被劃分給了聚類中心\mu _{2},即c^{(1)}=c^{(5)}=c^{(6)}=c^{(10)}=2,那麼\mu _{2}=1/4(x^{(1)}+x^{(5)}+x^{(6)}+x^{(10)}).

如果某一個聚類中心沒有分配到任何樣本點時,一般是把這個聚類中心去除,此時K個聚類中心就變成了K-1個聚類中心;如果你的任務必須是把資料集分為K個簇,此時可以重新隨機初始化K個聚類中心,重新開始。

  • K-means也可以聚類沒有明顯簇結構的資料

之前接觸到的資料集大多是左圖這中,有明顯的簇結構,使用K-means可以很顯然的分為這三個簇;而也會有一些沒有明顯簇結構的資料,如右圖所示,此時k-means也可以對其進行聚類。右圖是一個T-shirt尺寸的資料集,它有身高和體重兩個特徵,使用k-means可能會分為如右圖所示的三個簇,這樣就可以根據聚類結果,設計不同型別的T-shirt。

 

3.優化目標

  • 符號說明

c^{(i)}:在最近的一次簇分配過程中,樣本x^{^{(i)}}\in R^{n}被分配到的簇的聚類中心下標(離x^{^{(i)}}最近的聚類中心的下標)

\mu _{k}:某個聚類中心(k=1...K,\mu _{k}\in R^{n})

\mu _{c_{(i)}}:樣本x^{^{(i)}}\in R^{n}被分配到的簇的聚類中心(離x^{^{(i)}}最近的聚類中心)

  • 優化目標

實際上,K-means的演算法流程,就是在實現這個優化目標:

第一個內迴圈-簇分配,固定聚類中心\mu _{1}-\mu _{K}不動,關於變數c^{(1)}-c^{(m)},最小化代價函式J;

第二個內迴圈-更新聚類中心,關於變數\mu _{1}-\mu _{K},最小化代價函式J;再進行下一次迭代。

 

4.隨機初始化

本小節將介紹一種隨機初始化聚類中心的方法,儘可能避免k-means陷入區域性最優。

  • 隨機初始化

首先選擇的聚類中心數K應該小於樣本數m;

然後隨機選擇K個樣本點作為初始的聚類中心,即\mu _{1}=x^{(i)},\mu _{2}=x^{(j)},...,

  • 區域性最優問題

隨機初始化不同,k-means得到的聚類效果也是不同的,有時會陷入區域性最優。區域性最優指的是代價函式J得到一個區域性最優解,考慮下圖這種情況:

對於上圖的這個樣本集,最好的聚類效果應該如下圖所示:

但是,可能由於隨機初始化的不同,可能會得到下面的兩種不同的聚類效果,這時我們稱k-means演算法陷入區域性最優:

  • 解決區域性最優的方法

多次使用k-means演算法,不同的隨機初始化,會得到不同的聚類結果,對應不同的引數。從中找到一組最優的引數,是的代價函式J最小,那麼該組引數所對應聚類結果認為是最好的:

這種方法在聚類中心數量K比較小(K=2-10,尤其是K=2-4時)時,效果比較好;當K比較大時,隨機初始化對聚類結果的影響就沒那麼大了,此時這個方法的效果可能就不會很顯著。

 

5.選擇聚類數量

選擇聚類中心的數量是一件非常困難的事情,不存在一種通用的自動選擇演算法,一般是通過人工或經驗進行選擇。

即使是對於能夠視覺化的資料,聚類中心數量的選擇也是很模糊的,如下圖所示:

上圖中我們既可以選擇左右兩個聚類中心,也可以選擇四個(左右又可以分為上下兩部分),而且不同的選擇間是沒有對錯的。

首先,先介紹一種自動選擇聚類數量的演算法:

  • elbow method

這種自動選擇演算法,在某些情況下是有用的,原理大致如下圖所示:

嘗試不同的聚類數量,繪製代價函式J關於聚類數量K的曲線,如果曲線的形式類似於人的“胳膊”,那麼在拐點(肘部)附近的聚類數量可以認為是最佳的選擇。

但這種演算法並非總是可行,有時可能會得到下圖的這種曲線:

這種情況下,就很難選出合適的K。

一種更好的選擇聚類數量的做法是:從聚類的目的出發,來選擇K,評估在這種情況下的聚類效果是否能滿足你的期望和將來的目的。

比如T-shirt型號的設計,如果你希望T-shirt有s,m,l三款,那麼就可以對下圖的身高、體重資料聚類時,讓K=3:

如果你希望T-shirt有xs,s,m,l,xl五款,那麼就可以對下圖的身高、體重資料聚類時,讓K=5:

具體選擇K=3還是K=5,可以根據顧客需求以及營銷狀況來進一步決定。

 

二、降維

降維是另一種無監督學習演算法。

1.目標I:資料壓縮

資料壓縮可以讓資料佔用更少的記憶體或硬碟空間,加速我們的學習演算法。

首先看一個降維的例子:

如果一條資料有兩個特徵分別代表釐米長度和英寸長度,其實這兩個特徵是高度冗餘的,完全可以把它壓縮為一個長度特徵,即把資料從2D->1D。

上圖是上述資料集視覺化的結果,他有兩個特徵,這些樣本點大致分佈在一條直線附近,我們可以把這些樣本點投影到圖中的那條藍色的直線上,此時會得到一個新的資料集,他是原始資料集的一個近似;我們把這條直線抽出來,此時我們可以用一個特徵就能定位所有的樣本點,記這一個新特徵為z。

接下來再看一個3D->2D的例子:

典型的降維例子一般是從1000D->100D這種類似的降維,但由於繪圖的侷限性,以3D->2D為例進行演示:

首先視覺化原始資料集,他的每個樣本有3個 特徵:

這些樣本點大致分佈在一個平面上,我們可以把這些樣本點都投影到這個平面上,得到一個新的資料集,他是原始資料集的一個近似:

將這個平面抽取出來,投影得到的新樣本點,可以用兩個特徵來進行定位,從而實現了資料從3D->2D的壓縮:

 

2.目標II:視覺化

降維的另一個應用是資料視覺化,在機器學習問題中,特徵的維數一般非常大,這種情況下視覺化是非常困難的。我們一般把高維資料壓縮為2維或3維來幫助我們視覺化高維資料,從而對機器學習演算法做出改進。

接下來看一個例子:

上圖為不同國家的一些相關資料,這個資料包含50個特徵,上圖是其中的一部分特徵,包括GDP,人均GDP,居民幸福指數,人均收入,人均壽命等資訊。

接下來將資料從50D壓縮為2D:

然後對壓縮後的資料進行視覺化,探討一下新特徵代表的物理意義:

新特徵z1可能代表一個國家整體的水平(如GDP,國家經濟規模,國家整體科技實力等),新特徵z2可能代表一個國家的人均水平(人均GDP,居民幸福程度,人均壽命等)。右上方的點代表一些發達國家,如美國,整體和人均都很高;右下方的點代表一些發展中國家,如中國,整體很高,但人均很低....等等

 

3.主成分分析問題規劃1

主成分分析演算法PCA是目前最流行的降維演算法。接下來我們將介紹一下該演算法的原理:

注意在應用PCA之前,一定要進行特徵縮放。假設我們有如下所示的一個數據集(x^{(i)}\in R^{2}):

對該資料集用PCA進行降維,也就是找到一條直線(上圖中的紅線),將所有樣本點投影到這條直線上,資料便從2D->1D;PCA演算法要求原始樣本點和投影后的樣本點的距離(投影誤差)平方和最小。

對比上圖中的紅線,接下來演示一個不好的投影:

如上圖中的品紅色直線,此時所有樣本的投影誤差會非常大,不滿足PCA的要求。

  • PCA的一般定義

壓縮資料2D->1D:

找到一個向量u^{(1)}\in R^{2},將所有樣本點投影到該向量上,並使得投影誤差最小:

壓縮資料nD->kD:

找到k個向量(u^{(1)},u^{(2)},...,u^{(k)})\in R^{n},將所有樣本點投影到由這k個向量構成的子空間中,並使得投影誤差最小。

以3D->2D進行演示:此時需要找到兩個向量(u^{(1)},u^{(2)})\in R^{3},這兩個向量構成一個平面,將所有樣本點投影到該平面上,並使得投影誤差最小:

  • PCA不是線性迴歸

PCA和線性迴歸是完全不同的兩種演算法:

1)線性迴歸中有一個特殊的輸出變數y,所有輸入特徵x都用來預測這個y;而在PCA中沒有特殊特徵,所有特徵x_{1}-x_{n}都是同等對待的。

3)線性迴歸中擬合直線的要求是最小化樣本點和直線上點的豎直距離;PCA要求是最小化樣本點和直線上點的投影距離。

 

4.主成分分析問題規劃2

  • 資料預處理

使用PCA之前一定要對資料進行均值標準化,使每個特徵的取值範圍相近:

                 x_{j}^{(i)}=x_{j}^{(i)}-\mu _{j}      (j=1...n)

  • 回顧PCA演算法原理

左圖將資料從2D->1D,首先找到一個向量u^{(1)}\in R^{2},將所有樣本點x^{(i)}\in R^{2}投影到向量u^{(1)}上,得到新樣本點z^{(i)}\in R,要求所有樣本點的投影誤差最小。原始樣本點x^{(i)}x_{1},x_{2}兩個特徵,新樣本點z^{(i)}只有z_{1}一個特徵。

右圖將資料從3D->2D,首先找到兩個向量u^{(1)},u^{(2)}\in R^{3},將所有樣本點x^{(i)}\in R^{3}投影到向量u^{(1)},u^{(2)}構成的平面上,得到新樣本點z^{(i)}\in R^{2},要求所有樣本點的投影誤差最小。原始樣本點x^{(i)}x_{1},x_{2},x_{3}三個特徵,新樣本點z^{(i)}只有z_{1},z_{2}兩個特徵。

  • 如何找到向量u^{(i)}

將資料從n維壓縮到k維:

首先計算協方差矩陣\Sigma (n*n)

向量化寫法:

                                                         \Sigma =1/m(X^{T}X)

然後對協方差矩陣\Sigma (n*n)進行奇異值分解,呼叫svd:

此時會返回3個矩陣,其中矩陣U是n*n的,它的每一列是u^{(i)},如果將n維資料降至k維,此時滿足PCA要求的那k個向量就是矩陣U的前k列:

投影得到的新樣本點z^{(i)} (k*1)=Ureduce^{T} (k*n) \cdot x^{(i)} (n*1)

 

5.主成分數量選擇

PCA主要是把資料從n維降至k維,本小節主要講解引數k該如何選擇:

投影誤差平方均值:

資料總方差:

選擇k時,一般是從小往大取值(k=1,2,...),計算出相應的向量,看是否滿足下圖中的式子(\leq 0.01意味著99%的方差被保留),若滿足則取該K值。

有一個簡單的做法,在呼叫svd時,除了返回第一個U矩陣,還會返回一個S矩陣(n*n),S矩陣是一個對角陣:

此時只需要檢查下圖中的式子成立就好了,他和之前檢查的式子是等價的:

總結:

在對協方差矩陣進行svd分解後,從小到大嘗試K值,直到滿足上式,就取該K值;然後再取U矩陣的前k列,得到Ureduce,進而得到從原始樣本x得到新樣本z,完成從n維到k維的降維。

 

6.壓縮重現

PCA可以把n維資料壓縮為k維資料,相應地也可以通過一些犯法從k維資料得到原來n維資料的一個近似表示:

PCA:z^{(i)}(k*1)=Ureduce^{T}(k*n)\cdot x^{(i)} (n*1)

逆過程:x^{(i)} (n*1) \approx x_{approx}^{(i)} (n*1)=Ureduce(n*k)\cdot z^{(i)} (k*1)

 

7.應用PCA的建議

PCA可以加速學習演算法的訓練。

  • 加速監督學習演算法的訓練

假設你有一個如下所示的訓練集,並且輸入特徵的維數非常高,比如x^{(i)}\in R^{10000}:

此時,如果直接直接對原始資料集進行訓練的話,速度會很慢,可以嘗試一下步驟:

第一步:提取原始資料集的輸入特徵,得到一個無標籤的資料集,可能還需要對特徵進行均值標準化,再對這個無標籤的資料集進行PCA降維:

第二步:利用降維後的資料,構建新的訓練集

在進行驗證或測試時,對驗證集和測試集進行同樣的對映,在帶入訓練好的模型,計算精度。這樣可以加快我們的訓練速度。

  • PCA的應用

1)壓縮:減小儲存資料所需要的記憶體和硬碟空間;加速學習演算法的訓練

2)視覺化:可以把高維資料壓縮到2D或3D進行視覺化

  • PCA糟糕的應用

1)利用PCA防止過擬合:

使用PCA在滿足方差保留要求的前提下,可能會取得一個不錯的效果,但是更好的防止過擬合的方法是正則化,所以不建議使用PCA防止過擬合。

  • 盲目使用PCA加速學習演算法

有時直接對原始訓練集進行訓練,是沒有問題的,沒必要一開始就考慮PCA來加速訓練。

只有在用原始資料訓練確實很慢,原始資料的儲存代價很高或使用原始資料訓練達不到你的要求時,再考慮使用PCA來加速訓練。

三、實驗

第八週實驗