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

課程目錄

十三、聚類(Clustering)
13.1 無監督學習:簡介
13.2 K-均值算法
13.3 優化目標
13.4 隨機初始化
13.5 選擇聚類數

十四、降維(Dimensionality Reduction)
14.1 動機一:數據壓縮
14.2 動機二:數據可視化
14.3 主成分分析問題
14.4 主成分分析算法
14.5 選擇主成分的數量
14.6 重建的壓縮表示
14.7 主成分分析法的應用建議


筆記內容


十三、聚類(Clustering) 


13.1 無監督學習:簡介

       在這個視頻中,我將開始介紹聚類算法。這將是我們學習的第一個非監督學習算法。我們將要讓計算機學習無標籤數據,而不是此前的標籤數據。
       在一個典型的監督學習中,我們有一個有標籤的訓練集,我們的目標是找到能夠區分正樣本和負樣本的決策邊界,我們需要據此擬合一個假設函數。與此不同的是,在非監督學習中,我們的數據沒有附帶任何標籤,我們拿到的數據就是這樣的: 

                                  

       在這裏我們有一系列點,卻沒有標籤。因此,我們的訓練集可以寫成只有…..一直到。也就是說,在非監督學習中,我們需要將一系列無標籤的訓練數據,輸入到一個算法中,然後這個算法會去找這個數據的內在結構。圖上的數據看起來可以分成兩個分開的點集(稱爲簇),一個能分開這些點集的算法,就被稱爲聚類算法。

       此後我們還將提到其他類型的非監督學習算法,它們可以爲我們找到其他類型的結構或者其他的一些模式,而不只是簇。 我們將先介紹聚類算法。此後,我們將陸續介紹其他算法。那麼聚類算法一般用來做什麼呢? 

            

       列舉的一些應用:比如市場分割,也許你在數據庫中存儲了許多客戶的信息,而你希望將他們分成不同的客戶羣,這樣你可以對不同類型的客戶分別提供更適合的服務;社交網絡分析:事實上有許多研究人員正在研究這樣一些內容,他們關注社交網絡或者是其他的一些信息,比如說:你經常跟哪些人聯繫,而這些人又經常給哪些人發郵件,這可能需要別的聚類算法,希望用它發現社交網絡中關係密切的朋友;組織計算機集羣,或者更好的管理數據中心:如果你知道數據中心,哪些計算機經常協作工作。那麼,你可以重新分配資源,重新佈局網絡。由此優化數據中心,優化數據通信;瞭解星系的形成:瞭解一些天文學上的細節問題。

       在下一個視頻中,我們將開始介紹一個具體的聚類算法。 


13.2 K-均值算法 

       K-均值 是最普及的聚類算法,算法接受一個未標記的數據集,然後將數據聚類成不同的組。 

       K-均值是一個迭代算法,假設我們想要將數據聚類成 n 個組,其方法爲: 
       1、首先選擇 K 個隨機的點,稱爲 聚類中心(cluster centroids); 
       2、對於數據集中的每一個數據,按照距離 K 箇中心點的距離,將其與距離最近的中心點關聯起來,與同一個中心點關聯的所有點聚成一類。 
       3、計算每一個組的平均值,將該組所關聯的中心點移動到平均值的位置。 
       4、重複步驟 2-4 直至中心點不再變化。 

       下面是一個聚類示例:

 迭代1次              

       

迭代3次                


迭代 10 次             


       用 來表示 聚類中心,用來存儲 與第 i 個實例數據最近的聚類中
心的索引,K-均值算法的僞代碼如下: 

                     

       算法分爲兩個步驟,第一個 for 循環是賦值步驟,即:對於每一個樣例 i,計算其應該屬於的類。第二個 for 循環是聚類中心的移動,即:對於每一個類 k,重新計算該類的質心。 
       K-均值算法也可以很便利地用於將數據分爲許多不同組,即使在沒有非常明顯區分的組羣的情況下也可以。下圖所示的數據集包含身高和體重兩項特徵構成的,利用 K-均值算法將
數據分爲三類,用於幫助確定將要生產的 T-恤衫的三種尺寸。 

               


13.3 優化目標 

       K-均值最小化問題,是要 最小化所有的數據點與其所關聯的聚類中心點之間的距離之和因此 K-均值的代價函數(又稱 畸變函數 Distortion function)爲: 

           

       其中 代表與 最近的聚類中心點 。 我們的的優化目標便是找出使得代價函數最小: 

        

       回顧剛纔給出的 K-均值迭代算法,我們知道,第一個循環是用於減小 引起的代價,而第二個循環則是用於減小 引起的代價。迭代的過程一定會是每一次迭代都在減小代價函數,不然便是出現了錯誤。 


13.4 隨機初始化 

       在運行 K-均值算法的之前,我們首先要隨機初始化所有的聚類中心點,下面介紹怎樣做: 
       1. 我們應該選擇 K<m,即聚類中心點的個數要小於所有訓練集實例的數量 

       2. 隨機選擇 K 個訓練實例,然後令 K 個聚類中心分別與這 K 個訓練實例相等 

       K-均值的一個問題在於,它有可能會停留在一個局部最小值處,而這取決於初始化的情況。 

            

      爲了解決這個問題,我們通常需要多次運行 K-均值算法,每一次都重新進行隨機初始化,最後再比較多次運行 K-均值的結果,選擇代價函數最小的結果。這種方法在 K 較小的時候(2--10)還是可行的,但是如果 K 較大,這麼做也可能不會有明顯地改善。 


13.5 選擇聚類數 

       沒有所謂最好的選擇聚類數的方法,通常是需要根據不同的問題,人工進行選擇的。選擇的時候思考我們用 K-均值算法聚類的動機是什麼,然後選擇能最好服務於該目標的聚類數。 
       當人們在討論,選擇聚類數目的方法時,有一個可能會談及的方法叫作“肘部法則”。關於“肘部法則”,我們所需要做的是改變 K 值,也就是聚類類別數目的總數。我們用一個聚類來運行 K 均值聚類方法。這就意味着,所有的數據都會分到一個聚類裏,然後計算成本函數或者計算畸變函數 J。K 代表聚類數字。 

              

       我們可能會得到一條類似於這樣的曲線,像一個人的肘部。這就是“肘部法則”。你會發現這種模式,它的畸變值會迅速下降,從 1 到 2,從 2 到 3 之後,你會在 3 的時候達到一個 肘點。在此之後,畸變值就下降的非常慢,看起來就像使用 3 個聚類來進行聚類是正確的,這是因爲那個點是曲線的肘點,畸變值下降得很快,K 等於 3 之後就下降得很慢,那麼我們就選 K 等於 3。當你應用“肘部法則”的時候,如果你得到了一個像上面這樣的圖,那麼這將是一種用來選擇聚類個數的合理方法。 


十四、降維(Dimensionality Reduction) 


14.1 動機一:數據壓縮 

       在本節開始談論第二種類型的無監督學習問題,稱爲 降維。有幾個不同的的原因使你可能想要做降維。一是 數據壓縮,數據壓縮不僅允許我們壓縮數據,使用較少的計算機內存或磁盤空間,而且它也可以加快我們的學習算法。
       首先,讓我們談論降維是什麼。作爲一種生動的例子,我們收集的數據集,有許多許多特徵,我繪製兩個在這裏。 

           

       假使我們要採用兩種不同的儀器來測量一些東西的尺寸,其中一個儀器測量結果的單位是英寸,另一個儀器測量的結果是釐米,我們希望將測量的結果作爲我們機器學習的特徵。現在的問題的是,兩種儀器對同一個東西測量的結果不完全相等(由於誤差、精度等),而將兩者都作爲 特徵有些重複,因而,我們希望將這個二維的數據降至一維。 
       從這件事情可以考慮到發生在工業上的事。如果你有幾百或成千上萬的特徵,有時可能有幾個不同的工程團隊,也許一個工程隊給你二
百個特徵,第二工程隊給你另外三百個的特徵,第三工程隊給你五百個特徵,一千多個特徵都在一起,它實際上會變得非常困難去跟蹤你知道的那些特徵,你從那些工程隊得到的,其實跟不想有高度冗餘的特徵一樣。 

               

       將數據從三維降至二維: 這個例子中我們要將一個三維的特徵向量降至一個二維的特徵向量。過程是與上面類似的,我們將三維向量投射到一個二維的平面上,強迫使得所有的數據都在同一個平面上,降至二維的特徵向量。 

                

       這樣的處理過程可以被用於把任何維度的數據降到任何想要的維度,例如將 1000 維的特徵降至 100 維。
 

14.2 動機二:數據可視化 

       在許多及其學習問題中,如果我們能將 數據可視化,我們便能尋找到一個更好的解決方案,降維可以幫助我們。 

               

       假使我們有有關於許多不同國家的數據,每一個特徵向量都有 50 個特徵(如,GDP,人均 GDP,平均壽命等)。如果要將這個 50 維的數據可視化是不可能的。使用降維的方法將其降至 2 維,我們便可以將其可視化了。 

                   

        這樣做的問題在於,降維的算法只負責減少維數,新產生的特徵的意義就必須由我們自己去發現了。 


14.3 主成分分析問題 

        主成分分析(PCA)是最常見的 降維算法。 

         在 PCA 中,我們要做的是找到一個 方向向量(Vector direction),當我們把所有的數據都投射到該向量上時,我們希望 投射平均均方誤差能儘可能地小。方向向量是一個經過原點的向量,而 投射誤差 是 從特徵向量向該方向向量作垂線的長度 。 

                   

       下面給出主成分分析問題的描述: 

       問題是要將 n 維數據降至 k 維,目標是找到向量 使得總的投射誤差最小。

       主成分分析與線性回顧的比較: 
       主成分分析  線性迴歸 是兩種不同的算法。主成分分析最小化 投射誤差(Projected Error),而線性迴歸嘗試的是最小化 預測誤差 。線性迴歸的目的是 預測結果,而主成分分析 不作任何預測。 

                    

       上圖中,左邊的是 線性迴歸 的誤差(垂直於 橫軸 投影),右邊則是 主要成分分析 的誤差(垂直於 紅線 投影)。 

       PCA 將 n 個特徵降維到 k 個,可以用來進行數據壓縮,如果 100 維的向量最後可以用 10維來表示,那麼壓縮率爲 90%。同樣圖像處理領域的 KL 變換使用 PCA 做圖像壓縮。但 PCA 要保證降維後,還要保證數據的特性損失最小。 

       PCA 技術的一大好處是對數據進行降維的處理。我們可以 對新求出的“主元”向量的重要性進行排序,根據需要取前面最重要的部分,將後面的維數省去,可以達到降維從而簡化模型或是對數據進行壓縮的效果。同時最大程度的保持了原有數據的信息。 

       PCA 技術的一個很大的優點是,它是完全 無參數限制 的。在 PCA 的計算過程中完全不需要人爲的設定參數或是根據任何經驗模型對計算進行干預,最後的結果只與數據相關,與用戶是獨立的。 但是,這一點同時也可以看作是缺點。如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特徵,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高。 


14.4 主成分分析算法 

       PCA 從 n 維減少到 k 維: 

       第一步是 均值歸一化。我們需要計算出所有特徵的均值,然後令 。如果特徵是在不同的數量級上,我們還需要將其除以標準差 σ^2。 

       第二步是計算 協方差矩陣(covariance matrix)Σ:             

      第三步是計算協方差矩陣 Σ 的特徵向量(eigenvectors):        在 Octave 裏我們可以利用奇異值分解(singular value decomposition)來求解,[U, S, V]= svd(sigma)。 

                  
       對於一個 n×n 維度的矩陣,上式中的 U 是一個 具有與數據之間最小投射誤差的方向向量構成的矩陣。如果我們希望將數據從 n 維降至 k 維,我們只需要從 U 中選取前 K 個向量,獲得一個 n×k 維度的矩陣,我們用 Ureduce 表示,然後通過如下計算獲得要求的 新特徵向量 
:          

      其中 x 是 n×1 維的,因此結果爲 k×1 維度。注意,我們不對方差特徵進行處理。 


14.5 選擇主成分的數量 

       主要成分分析是減少 投射的平均均方誤差

       訓練集的方差 爲:  

       我們希望在 平均均方誤差與訓練集方差的比例 儘可能小的情況下選擇 儘可能小的 K 值
 

       如果我們希望這個比例小於 1%,就意味着原本數據的偏差有 99%都保留下來了,如果我們選擇保留 95%的偏差,便能非常顯著地降低模型中特徵的維度了。 

       我們可以先令 K=1,然後進行主要成分分析,獲得 Ureduce 和 z,然後計算比例是否小於 1%。如果不是的話再令 K=2,如此類推,直到找到可以使得比例小於 1%的最小 K 值(原因是各個特徵之間通常情況存在某種相關性)。 

      還有一些更好的方式來選擇 K,當我們在 Octave 中調用“svd”函數的時候,我們獲得三個參數:[U, S, V] = svd(sigma)。 

            

       其中的 S 是一個 n×n 的矩陣,只有對角線上有值,而其它單元都是 0,我們可以使用這個矩陣來計算 平均均方誤差與訓練集方差的比例 : 

              

       也就是:

               

       在壓縮過數據後,我們可以採用如下方法來近似地獲得 原有的特徵(與上節末尾求 新特徵向量  做對比): 

           


14.6 重建的壓縮表示 

       在之前,談論了 PCA 作爲 壓縮算法。在那裏你可能需要把 1000 維的數據壓縮100 維特徵,或具有三維數據壓縮到一二維表示。所以,如果這是一個壓縮算法,應該能回到這個壓縮表示,回到你原有的高維數據的一種近似。所以,給定的 ,這可能 100 維,怎麼回到你原來的可能表示1000 維的數組  ? 

            

       PCA 算法,我們可能有一個這樣的樣本。如圖中樣本。我們做的是,我們把這些樣本投射到圖中這個一維平面。然後現在我們只需要使用一個實數,比如 ,指定這些點的位置後他們被投射到這一個三維曲面。給定一個點,我們怎麼能回去這個原始的二維空間呢?x 爲 2 維,z 爲 1 維,,相反的方程爲:  ()。

       如圖:

              

       所以,這就是你從低維表示 Z 回到未壓縮 X 的表示。我們得到了一個之前的原始數據 X,我們也把這個過程稱爲 重建原始數據。 

       給定未標記的數據集,您現在知道如何應用 PCA,帶高維特徵 X 和映射到這的低維表示 Z,重建壓縮表示 x 的初始值。希望你現在也知道如何採取這些低維表示 Z,映射到備份到一個近似你原有的高維數據。 

       現在你知道如何實施應用 PCA,我們將要做的事是談論一些技術在實際使用 PCA 時效果很好,特別是在接下來,談一談關於如何選擇 K。 


14.7 主成分分析法的應用建議 

      假使我們正在針對一張 100×100 像素的圖片進行某個計算機視覺的機器學習,即總共有 10000 個特徵。 
      1. 第一步是運用 主要成分分析 將 數據壓縮 至 1000 個特徵 
      2. 然後對訓練集運行學習算法 
      3. 在預測時,採用之前學習而來的 Ureduce 將輸入的特徵 x 轉換成 特徵向量 z,然後再進行預測 

      注意:如果我們有交叉驗證集合測試集,也採用對訓練集學習而來的 Ureduce。 

      錯誤的主要成分分析情況:一個常見錯誤使用主要成分分析的情況是,將其用於 減少過擬合(減少了特徵的數量)。這樣做非常不好,不如嘗試 歸一化處理

       原因在於主要成分分析只是近似地丟棄掉一些特徵,它並 不考慮 任何與結果變量有關的信息,因此可能會丟失非常重要的特徵。然而當我們進行 歸一化處理 時,會 考慮 到 結果變量,不會丟掉重要的數據。 

       另一個常見的錯誤是,默認地將主要成分分析作爲學習過程中的一部分,這雖然很多時候有效果,最好還是從所有原始特徵開始,只在有必要的時候(算法運行太慢或者佔用太多內存)才考慮採用主要成分分析。 


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