機器學習基礎---無監督學習之降維


一:降維之數據壓縮

將討論第二種無監督學習的問題:降維。數據壓縮不僅能讓我們對數據進行壓縮,使得數據占用較少的內存和硬盤空間,還能對學習算法進行加速。

(一)降維是什么(二維降至一維)

假使我們要采用兩種不同的儀器來測量一些東西的尺寸,其中一個儀器測量結果的單位是英寸,另一個儀器測量的結果是厘米,我們希望將測量的結果作為我們機器學習的特征。

現在的問題的是,兩種儀器對同一個東西測量的結果不完全相等(由於誤差、精度等),而將兩者都作為特征有些重復,因而,我們希望將這個二維的數據降至一維。

如果能把數據從二維減少到一維,用來減少這種冗余,通過降維,也就說想找出一條線,看起來大多數樣本所在的線,所有的數據都投影到這條線上,通過這種做法,能夠測量出每個樣本在線上的位置。就可以建立新的特征,只需要一個數就能確定新特征。

意味着:之前要用一個二維數字表示的特征可以一維數直接表示。

通過這種方法,就能夠把內存的需求減半或者數據空間需求減半。

(二)降維是什么(三維降至二維)

將數據從三維降至二維: 這個例子中我們要將一個三維的特征向量降至一個二維的特征向量。

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

很難看出圖中的數據分布在一個平面上,所以這時降維的方法就是把所有的數據都投影到一個二維平面上:

意味着現在可以把每個樣本用兩個數字表示出來,即下圖中的z1、z2:

這就是降維以及如何用它來壓縮數據,接下來將繼續探討如何用這個技術來對學習算法進行加速。

二:降維之數據可視化

用一個具體的例子來說:

假設收集了許多統計數據的大數據集,如下圖中的全世界各國的情況:

這里有很多的特征和國家,那么用什么方法能夠更好地理解這些數據呢?如何可視化這些數據?

這里有50個特征,但是很難繪制50維的數據,可以用使用降維的方法,例如用下面二維向量表示:

這樣的話,如果能用2個數字來表示50個特征,要做是從50維降到2維,就可以把這些國家在二維平面上表示出來,這樣做了之后,z的值通常不會是你所期望的,具有物理意義的特征,所以要弄清楚這些特征大致意味着什么

在圖中,每一個國家都可以用一個點來表示,橫軸可能表示國家的經濟規模、國家總體經濟活躍程度或者總GDP等一些特征,而縱軸可能對應於人均GDP、每個人的幸福程度或者個人經濟活躍程度等一些特征,這樣就可以通過這個圖了解國家的大致情況。

這就是降維如何把高維的數據降到二維或者三維,這樣就能把它繪制出來,並更好地理解這些數據。

三:主成分分析(PCA---降維最常用算法)(1)

對降維問題來說,目前最流行的的算法是叫做主成分分析法(PCA),這里將談論PCA的公式描述問題(試着用公式來表述PCA用途)

(一)投影誤差

假設有如圖的數據集,想要將它從二維降到一維,可能會選擇右圖中的線:

通過選擇的這條線,發現每個點到它們對應的直線上的投影點之間的距離是非常小的。所以,正式的說,PCA它會找一個低維平面(上圖中是這條直線)然后將數據投影在上面,使點到投影點之間的距離的平方最小。(這些距離有時也稱為投影誤差

在應用PCA之前,常規的做法是先進行均值歸一化和特征規范化,使得特征x1、x2的均值為0,並且其數值在可比較的范圍內。

對比上面右圖,我們繪制另外一條可以進行數據投影的直線(粉色):

可以看出投射誤差非常大。這就是為什么PCA會選擇紅色直線,而不是這條粉色直線。

(二)線性回歸和PCA對比

因為講述PCA的時候經常會畫一條直線,看起來有點像線性回歸,但事實上PCA不是線性回歸,它們是兩種不同的算法。線性回歸要做的是用所以的x值來預測y,然而在PCA中,沒有什么特殊的變量y是需要預測的。

主成分分析與線性回歸是兩種不同的算法。

主成分分析最小化的是投射誤差(Projected Error),而線性回歸嘗試的是最小化預測誤差。

線性回歸的目的是預測結果,而主成分分析不作任何預測。

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

(三) PCA定義

PCA做的就是如果想將數據從二維降到一維,要試着找一個向量(假設是向量u(1)∈Rn)投影后能夠使最小化投影誤差的方向。 

這就是從二維數據降到一維的例子,更通常的情況是有N維數據,並且想將其降到K維,這種情況下,我們不只是想找單個向量來對數據進行投影,而是想尋找K個方向來對數據進行投影,來最小化投影誤差。

正式的來說:要找出一組向量u(1),u(2),...,u(k),要做的是將這些數據投影到這K個向量展開的線性子空間上。

舉個例子,如果有下圖所示的三維點雲:

我們要想將3維素數據投射到2維空間中,那么也就是要找出一對向量,這兩個向量一起定義了一個二維平面,將數據投影到平面上,並且要求數據點投影到平面上的距離最小。

因此,PCA做的是它試圖找出一條直線、一個平面或其他維的空間,然后對數據進行投影,以獲得最小化平方投影、90度投影或正交投影的誤差。

(四)PCA總結

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

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

3.PCA技術的一個很大的優點是,它是完全無參數限制的。在PCA的計算過程中完全不需要人為的設定參數或是根據任何經驗模型對計算進行干預,最后的結果只與數據相關,與用戶是獨立的

4.但是,這一點同時也可以看作是缺點。如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特征,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高

四:主成分分析(PCA---降維最常用算法)(2)

達到獨自使用主成分分析算法,並且可以用PCA對自己的數據進行降維。

(一)數據預處理

在應用PCA之前首先是對數據的預處理(和監督學習類似):執行均值標准化,也可能根據數據也要進行特征縮放

1.均值標准化

我們需要計算出所有特征的均值μj,然后令每個特征的值減去該特征的均值,並將該值更新為該特征新的特征值 。這樣,該特征的均值正好為0. 

2.特征縮放(可選)

如果不同的特征有非常不相同的縮放,例如x_1房子大小和x_2卧室數量,這兩個特征在數量級上是非常不同,因此我們需要縮放每個特征到一個相對的價值范圍(我們還需要將其除以標准差σ2 )。

(二)計算協方差矩陣Σ及其特征向量

做完上面的數據預處理之后,接下來是PCA算法需要做的:

左邊的圖由二維降至一維:

PCA要做的是需要想出一個方法計算兩個東西,一個是計算這些向量(二維),例如u(1),另一個是如何計算這些數字(一維),例如

右邊的圖由三維降至二維:

PCA要做的是需要想出一個方法計算兩個東西,一個是計算這種情況下的向量(三維),例如u(1)和u(2),另一個是計算這些向量(二維),例如

下面是求解過程:

想把n維數據降到k維,首選要做的是計算協方差(Σ---大寫σ),然后計算協方差矩陣的特征向量,最終得到的是一個n*n的矩陣U:

這就是PCA算法,雖然沒有給出數學上的證明,來證明u(1)和、u(2)、z還有其他向量等等,但是得出的過程就是選擇了最小化的平方投影誤差,PCA要做的是嘗試找到一個面或線,把數據投影到這個面或線上,以便於最小化平方投影誤差。

五:壓縮重現

 在之前的學習中,我們一直把PCA作為壓縮算法來討論。

它可以把一個1000維的數據壓縮成100維的特征向量,或者把一個三維的數據壓縮成二維表示。

思考這樣的一個問題:如果這是一個壓縮算法,就應該有辦法從這個壓縮表示回到原來高維數據的一種近似表述,所以假設給定100維的z(i),怎么回到原來的表示x(i)(x(i)可能是1000維),接下來就來介紹如何去做。

在PCA算法中,可能有這樣的樣本:x(1),x(2),要取這些樣本,然后把它們投影到這個一維面上,現在只需一個實數比如z(1)來表示這些點被投影到這個一維面上后的位置,如下圖所示,所以給定一個點z(1),要怎么回到原來的二維空間?即:

所以如果要反過來求x的話,這個方程就是:xapprox=Ureduce*z.這里的Ureduce是一個n*k的向量,z是一個k*1的向量,把它們乘起來就得到了n*1維,所以xapprox是一個n維向量。

PCA的意圖就是,如果平方投影誤差不太大,這樣xapprox就會很接近原先用來求z的x值了。用圖來表示的話就是這個樣子(如下圖),返回去的這個過程得到的就是這些投影到直線上的點。

用原來的例子,從x(1)開始,然后得到z(1),如果把z(1)代到這個式子里,得到xapprox(1),它在R2空間里,繼續做同樣的步驟,下一點就是xapprox(2),所有這是一個對原始數據不錯的近似。

以上就是如何從低維表示z回到未壓縮的數據表示,得到一個原來數據x的近似,也把這個過程叫做原始數據的重構,這一過程就是通過壓縮表示,重建原來的數據x。

所以給定一個未標注的數據集,現在知道如何應用PCA把高維數據特征x映射到低維的表示z,從這章節的學習中,也知道了如何把低維表示z映射回到原來的高維數據的一個近似表示。

六:主成分數量的選取

(一)K值選取思想

在PCA算法中,將n維特征減少為某k維特征表示,這個數字k是PCA算法的一個參數,也被稱為主成分個數。這里將探討一般情況下如何考慮選擇這個參數k。

為了選擇k,即選擇這個主成分的數字,PCA努力做到就是最小化投影誤差平方的平均值,因此它試圖最小化這個數量,它是原始數據x(i)和投影xapprox(i)之間的距離,這就是投影誤差平方的平均值同時將定義數據的總方差,就是這些樣本x(i)的平方和的平均值,所以數據的總方差就是訓練集里的所有樣本的平均長度,這個說明了我的訓練樣本距離零向量的平均距離有多遠或者說我的訓練樣本距離原點有多遠

當試圖選擇k,一個常見的經驗方法是選擇最小的值使得這兩者之間的比值小於0.01

換句話說,一種常見的方式來選擇k是我們想讓投影的均方誤差,即x和其投影的平均距離除以數據的總方差,這也就是數據的波動程度,希望這個比例可以小於比如0.01或1%,這是另一種表述方式。大多數人選擇k並不是像多數人談論的那樣直接進行選擇,因為這個數無論是0.01或一些其他數值。另一種用PCA的語言來表述的方式是:99%的方差性會被保留,不必糾結這話是什么意思。

“99%的方差性會被保留”只是說左側的這個量小於0.01,如果你正在使用PCA,想要告訴別人你保留了多少主成分,這樣的表述比較好:我選擇的k使得99%的方差被保留。這是需要了解的很有用的概念,它的意思其實就是投影的均方誤差除以數據總方差不會超過1%。

(二)算法實現

1.下面是PCA算法選擇k的過程:

如果k=1檢查的結果不是小於0.01,將k的值取2,以此類推,直到結果驗證正確,此時就可以確定選擇的k值。

2.另一中選擇k的方式如下:

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

其中S如下:

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

也就是:

3.總結

相比於算法一:對於每選取一個K值后,都要進行一次計算。算法二中我們只需要計算一次,后面可以重復使用S矩陣。更加方便

七:應用PCA的建議

 將介紹如何使PCA加快學習算法的效率,並給出如何應用PCA算法的相關的建議。

(一)加速學習算法

假設有一個監督學習的問題,有訓練集

假設具有很高的維度,比如說是一個10000維的特征向量,在實際應用中,可能是一個計算機視覺的問題,有一些100*100的圖片,就會有10000個像素點。

對於這種高維度的特征向量,運行學習算法時將變得非常慢,而幸運的是,用PCA算法,可以減少數據的維度,從而使得算法運行更加高效。可以按照以下步驟來做:

1. 第一步是運用主要成分分析將數據壓縮至1000個特征
2. 然后對訓練集運行學習算法。
3. 在預測時,采用之前學習而來的U
reduce
將輸入的特征x轉換成特征向量z,然后再進行預測
注:如果我們有交叉驗證集合測試集,也采用對訓練集學習而來的U
reduce

這樣得出了新的訓練集,接着,可以把這個低維的訓練集輸入一個學習算法(可能是神經網絡或者邏輯回歸)。

注意:PCA所做的是定義一個從x到z的映射,這個映射只能通過在訓練集上運行PCA來定義,具體地說,PCA學習的這個映射所做的就是計算一系列參數,進行特征縮放和均值歸一化等等;在訓練集上,找到所有的參數后,可以把這個映射用在交叉驗證集或者測試集的其他樣本中。 

(二)PCA的應用

(1)首先可以進行壓縮,可能需要它來減少存儲數據所需的存儲器或硬盤空間;

(2)使用PCA去加速學習算法;

    以上兩個應用中,為了選擇K,經常會計算出方差保留的百分比(通常99%)。

(3)可視化應用。(一般選擇k=2或3)

(三)PCA的誤用

(1)嘗試用PCA去防止過擬合,以下是不要誤用的原因:

 如果真擔心過擬合問題,可以使用之前說到的正則化 方法來解決。

(2)有一些人在設計機器學習系統時,可能會寫下這樣的計划:

其實,在寫下包含PCA的項目計划之前,應該思考這樣的問題:如果直接去做而不使用PCA會怎么樣?

在實現PCA之前,直接做你想做的事,首先考慮使用最原始的數據x(i),只有這么做不能達到目的的情況下,才考慮使用PCA和z(i)

這就是PCA算法的介紹,PCA是非常常用的最強大的無監督學習算法之一,所以通過本章的學習,希望可以使用PCA去完成各種不同的目標。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM