【機器學習】【PCA,SVM,K-Means】

PCA,全稱Principal Component Analysis,主成分分析,用於數據壓縮,加快訓練速度。

PCA降維,消除訓練集中冗餘特徵,例如:數據集中有一類特徵是釐米長度,又有一類特徵是英寸長度。在處理音頻的時候,有那麼大維度的特徵,我們不可能人工的檢查出這類冗餘特徵,就需要進行PCA降維。

具體的PCA降維過程及原理什麼的,網上肯定有很多解釋,這裏只總結一下PCA降維一些具體操作。

對了,這幅圖是解釋一下,PCA與線性迴歸的區別。(左圖爲線性迴歸,右圖爲PCA)

線性迴歸(左圖)是爲了最小化點和直線間的平方誤差,是某個點與預測值之間的差值;而PCA(右圖)是最小化點和線之間的最小距離,也就是正交距離。該篇文章所有圖均來源於:網易公開課-吳恩達老師-機器學習

這裏爲了能夠好理解,假設訓練集的特徵爲二維。

PCA降維:我們需要將n維的特徵向量壓縮爲k維,即x(i)∈R^n→Z(i)∈R^k(表示第i個樣本,特徵向量爲n維,壓縮到第i個樣本,特徵向量爲k維)

首先,對m個樣本求得一個協方差矩陣,如下圖:(Sigma表示該矩陣)

其次,通過對Sigma矩陣進行奇異值分解

具體爲何對Sigma進行奇異值分解,暫時還沒進入深入研究,當然可以直接調庫來進行svd操作,得到的U矩陣是我們需要的

得到的U矩陣,是一個n*n的矩陣,因爲x(i)是n*1的向量,x(i)*x(i)^T,即(n*1)*(1*n)→R^(n*n),即Sigma其實是n*n矩陣。

接下來,我們選擇矩陣U的前k列,將這個新矩陣進行轉置並與樣本矩陣做矩陣乘法,如下圖所示:

對U轉置後的矩陣維度爲k*n,訓練集矩陣X則是n*m(n爲特徵參數個數,m爲樣本個數)

得出的Z矩陣維度爲k*m,矩陣Z的每一個列向量即爲壓縮後的樣本特徵向量。即Z(i)對應X(i)。(Z(i)表示Z的第i個列向量)

 

 

SVM,Support Vector Mashine支持向量機,有兩類,線性SVM和非線性SVM,由於它的某種特性(下面會提到)又被稱爲大間距分類器。

首先,爲什麼稱其爲大間距分類器?下面通過一張圖來了解。

爲了方便理解,這裏特徵向量維度爲2,圖中需要將訓練集分爲兩類。我們可以直接進行線性區分。但是決策的邊界並不是唯一的,如:

這樣,洋紅色線條和綠色線條都是用來分類的邊界。

但是,SVM會選擇這條黑色的線條來進行分類,從圖中可以直觀的看到,對於此時的訓練數據進行SVM分類,顯得更加穩健。

大致瞭解SVM的作用之後,可以看看SVM的代價函數

其中cost1和cost0函數通過logistic迴歸中的log函數演變過來的。圖形如下:

代價函數中,C代表類似於logistic正則化項的1/λ,控制方差與偏差的權重。應用SVM對這樣的數據進行分類,黑色的線代表線性SVM的邊界。

如果設置常數C的初始值非常大的話,且分類過程只應用了SVM時,那麼單個特殊的數據對分類結果的影響就非常大。例如下圖:

當然,如果C的值設置得比較小時,那麼SVM就會忽略掉這些特殊的點。

那麼,爲什麼這個代價函數能使得SVM與樣本間距最大呢???吳老師的課中講的很清楚。這裏簡單總結下,以防自己以後忘了。

首先是線性代數的相關知識,假設兩個向量u=[u1,u2]^T,v=[v1,v2]^T,那麼u^T*v=u1*v1+u2*v2,也稱u和v的內積,兩個二維向量在圖中表示如圖:

圖中p稱爲v在u上投影的量,向量u的長度||u||=sqrt(u1^2+u2^2)(sqrt代表開根號),u和v的內積另一種計算方法爲u^T*v=p*||u||,即u^T*v=u1*v1+u2*v2=p*||u||。當然,p有可能爲負值,也就是v與u夾角超過90度的情況。好了,接下來繼續看看SVM的代價函數

爲了方便,我們假設特徵數n=2,那麼該過程就是最小化1/2*(θ1^2+θ2^2),然後將其變形一下:

1/2*(sqrt(θ1^2+θ2^2))^2

根據上一步的線性代數知識:sqrt(θ1^2+θ2^2)=||θ||,θ爲參數向量。那麼此時,這步的目的就轉化爲了min(1/2||θ||^2)

繼續看上一步的代價函數cost1和cost0函數中的根據前面的線性代數知識,轉變一下內積的計算方法,如下圖

我們將其放在分類訓練數據中:

將該數據分爲兩類,其中綠線表示決策邊界,可以看出,該邊界並不算一個很好的分類邊界,需要知道一點,θ參數向量與該決策邊界是垂直的,然後,將所有樣本投影到θ參數向量上,並且,當y(i)=1時,我們希望p(i)*||θ||>=1,當y(i)=0時,我們希望p(i)*||θ||<=-1。如圖

無論是處於θ向量的上方或者下方的數據,我們的代價函數都希望||θ||儘量小,那麼我們就需要|p(i)|儘量大,即當p(i)>0時,p(i)儘量大,p(i)<0時,p(i)儘量小。於是SVM就形成了下面的圖:

這也就是爲何SVM被稱爲大間距分類器的原理。

接下來簡單說一下非線性SVM的核函數和處理過程。肯定有很多博客介紹過,所以只是簡單介紹一下。

首先,將m個訓練樣本的特徵向量,作爲l向量(landmark,爲什麼要用標記向量呢...一筆帶過,也可以看下面這個圖

,爲了實現分類,那麼離l向量近的數據爲一類,離l向量較遠的爲一類,這樣就實現了非線性的分類)

將m個訓練樣本的特徵向量,作爲l向量

通過x(i)與核函數,來計算出每個特徵向量的f(i),圖中similarity爲核函數。

那麼每個f(i)的維度即爲總樣本量爲m+1(多的一個維度爲偏移量)。所以,我們需要訓練的代價函數:

此時訓練得到的θ就是支持向量機的參數。非線性SVM核函數有多種,比較常用的有高斯核函數,如下

K-Means,非監督學習將數據分爲K類,簡單說一下過程,隨機初始化K個與數據同維度的向量,然後通過計算樣本數據與該K個向量的距離,選出距離最近的,這樣就將數據分爲K類,然後,再取K類的中心點(取平均值爲一種方法),再將樣本分爲K類,如此反覆,最後通過設置循環次數或者偏移距離來終止循環。