機器學習 | 吳恩達機器學習第八週學習筆記
第八週PPT 下載密碼:qedd
上週主要講解了支援向量機SVM的原理包括優化目標、大間隔以及核函式等SVM核心內容,以及SVM的使用。本週主要講解經典的無監督聚類演算法k-means,包括k-means的優化目標,原理以及一些引數設定細節;和降維演算法PCA的原理,目標,問題規劃以及應用等問題。
目錄
一、無監督學習
1.無監督學習
首先回顧一下之前的監督學習問題:
在監督學習問題中,每個訓練樣本都有一個標籤,目標是用假設函式去擬合訓練集,產生決策邊界,對訓練樣本進行分類:
而在無監督學習問題中,訓練樣本沒有任何標籤資訊。我們需要做的是把這些無標籤的資料輸入到演算法中,利用演算法找到這些資料中隱藏的結構。
對於下圖中的資料,我們可以用演算法找到一種隱藏結構-簇(這些資料可以分為兩組分開的簇),我們稱這個演算法為聚類演算法,這是我們學習的第一個無監督演算法。當然無監督演算法還有很多,可以發現數據中隱藏的不同結構,不僅僅是簇:
聚類的應用:
- 市場分割:對資料庫中的顧客資訊,根據市場進行分組,這樣可以針對不同市場進行改進。
- 社交網路分析:找到關係密切的不同群體。
- 組織計算機叢集
- 瞭解銀河系的構成
2.K-Means演算法
K-Means是目前使用最廣泛的聚類演算法。
- K-Means原理
第一步:視覺化一組無標籤訓練集(,下圖中的綠點),隨機選擇兩個聚類中心(下圖中的紅、藍叉):
第二步:遍歷每個樣本點,計算其與兩個聚類中心的距離,離哪個聚類中心更近,就把該點劃分為哪個聚類中心,一次遍歷後如下所示:
第三步:移動聚類中心,分別對上圖中的紅、藍色點計算均值,得到新的聚類中心:
重複第二、三步,直到聚類中心不在變化為止,得到的最終聚類效果如下:
- K-means演算法輸入
- K-means演算法流程
其中第一個內迴圈是簇分配,;
第2個內迴圈是更新聚類中心(簇).比如,在第一個內迴圈結束後,有四個樣本點被劃分給了聚類中心,即,那麼.
如果某一個聚類中心沒有分配到任何樣本點時,一般是把這個聚類中心去除,此時K個聚類中心就變成了K-1個聚類中心;如果你的任務必須是把資料集分為K個簇,此時可以重新隨機初始化K個聚類中心,重新開始。
- K-means也可以聚類沒有明顯簇結構的資料
之前接觸到的資料集大多是左圖這中,有明顯的簇結構,使用K-means可以很顯然的分為這三個簇;而也會有一些沒有明顯簇結構的資料,如右圖所示,此時k-means也可以對其進行聚類。右圖是一個T-shirt尺寸的資料集,它有身高和體重兩個特徵,使用k-means可能會分為如右圖所示的三個簇,這樣就可以根據聚類結果,設計不同型別的T-shirt。
3.優化目標
- 符號說明
:在最近的一次簇分配過程中,樣本被分配到的簇的聚類中心下標(離最近的聚類中心的下標)
:某個聚類中心(k=1...K,)
:樣本被分配到的簇的聚類中心(離最近的聚類中心)
- 優化目標
實際上,K-means的演算法流程,就是在實現這個優化目標:
第一個內迴圈-簇分配,固定聚類中心不動,關於變數,最小化代價函式J;
第二個內迴圈-更新聚類中心,關於變數,最小化代價函式J;再進行下一次迭代。
4.隨機初始化
本小節將介紹一種隨機初始化聚類中心的方法,儘可能避免k-means陷入區域性最優。
- 隨機初始化
首先選擇的聚類中心數K應該小於樣本數m;
然後隨機選擇K個樣本點作為初始的聚類中心,即
- 區域性最優問題
隨機初始化不同,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之前,一定要進行特徵縮放。假設我們有如下所示的一個數據集():
對該資料集用PCA進行降維,也就是找到一條直線(上圖中的紅線),將所有樣本點投影到這條直線上,資料便從2D->1D;PCA演算法要求原始樣本點和投影后的樣本點的距離(投影誤差)平方和最小。
對比上圖中的紅線,接下來演示一個不好的投影:
如上圖中的品紅色直線,此時所有樣本的投影誤差會非常大,不滿足PCA的要求。
- PCA的一般定義
壓縮資料2D->1D:
找到一個向量,將所有樣本點投影到該向量上,並使得投影誤差最小:
壓縮資料nD->kD:
找到k個向量,將所有樣本點投影到由這k個向量構成的子空間中,並使得投影誤差最小。
以3D->2D進行演示:此時需要找到兩個向量,這兩個向量構成一個平面,將所有樣本點投影到該平面上,並使得投影誤差最小:
- PCA不是線性迴歸
PCA和線性迴歸是完全不同的兩種演算法:
1)線性迴歸中有一個特殊的輸出變數y,所有輸入特徵x都用來預測這個y;而在PCA中沒有特殊特徵,所有特徵都是同等對待的。
3)線性迴歸中擬合直線的要求是最小化樣本點和直線上點的豎直距離;PCA要求是最小化樣本點和直線上點的投影距離。
4.主成分分析問題規劃2
- 資料預處理
使用PCA之前一定要對資料進行均值標準化,使每個特徵的取值範圍相近:
()
- 回顧PCA演算法原理
左圖將資料從2D->1D,首先找到一個向量,將所有樣本點投影到向量上,得到新樣本點,要求所有樣本點的投影誤差最小。原始樣本點有兩個特徵,新樣本點只有一個特徵。
右圖將資料從3D->2D,首先找到兩個向量,將所有樣本點投影到向量構成的平面上,得到新樣本點,要求所有樣本點的投影誤差最小。原始樣本點有三個特徵,新樣本點只有兩個特徵。
- 如何找到向量
將資料從n維壓縮到k維:
首先計算協方差矩陣:
向量化寫法:
然後對協方差矩陣進行奇異值分解,呼叫svd:
此時會返回3個矩陣,其中矩陣U是n*n的,它的每一列是,如果將n維資料降至k維,此時滿足PCA要求的那k個向量就是矩陣U的前k列:
投影得到的新樣本點
5.主成分數量選擇
PCA主要是把資料從n維降至k維,本小節主要講解引數k該如何選擇:
投影誤差平方均值:
資料總方差:
選擇k時,一般是從小往大取值(k=1,2,...),計算出相應的向量,看是否滿足下圖中的式子(意味著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:
逆過程:
7.應用PCA的建議
PCA可以加速學習演算法的訓練。
- 加速監督學習演算法的訓練
假設你有一個如下所示的訓練集,並且輸入特徵的維數非常高,比如:
此時,如果直接直接對原始資料集進行訓練的話,速度會很慢,可以嘗試一下步驟:
第一步:提取原始資料集的輸入特徵,得到一個無標籤的資料集,可能還需要對特徵進行均值標準化,再對這個無標籤的資料集進行PCA降維:
第二步:利用降維後的資料,構建新的訓練集
在進行驗證或測試時,對驗證集和測試集進行同樣的對映,在帶入訓練好的模型,計算精度。這樣可以加快我們的訓練速度。
- PCA的應用
1)壓縮:減小儲存資料所需要的記憶體和硬碟空間;加速學習演算法的訓練
2)視覺化:可以把高維資料壓縮到2D或3D進行視覺化
- PCA糟糕的應用
1)利用PCA防止過擬合:
使用PCA在滿足方差保留要求的前提下,可能會取得一個不錯的效果,但是更好的防止過擬合的方法是正則化,所以不建議使用PCA防止過擬合。
- 盲目使用PCA加速學習演算法
有時直接對原始訓練集進行訓練,是沒有問題的,沒必要一開始就考慮PCA來加速訓練。
只有在用原始資料訓練確實很慢,原始資料的儲存代價很高或使用原始資料訓練達不到你的要求時,再考慮使用PCA來加速訓練。
三、實驗