机器学习算法-PCA降维技术
機器學習算法-PCA降維
一、引言
???在實際的數據分析問題中我們遇到的問題通常有較高維數的特征,在進行實際的數據分析的時候,我們并不會將所有的特征都用于算法的訓練,而是挑選出我們認為可能對目標有影響的特征。比如在泰坦尼克號乘員生存預測的問題中我們會將姓名作為無用信息進行處理,這是我們可以從直觀上比較好理解的。但是有些特征之間可能存在強相關關系,比如研究一個地區的發展狀況,我們可能會選擇該地區的GDP和人均消費水平這兩個特征作為一個衡量指標。顯然這兩者之間是存在較強的相關關系,他們描述的都是該地區的經濟狀況,我們是否能夠將他們轉成一個特征呢?這樣就能達到降低特征維度的特征,同時也能夠避免因特征過多而產生的過擬合問題。
二、PCA降維技術
???用于給數據降低維度的方法大致有三種,主成分分析法、因子分析法、獨立成分分析法。由于主成分分析法在三者之中使用的比較多,這里我們只對主成分分析進行深入探討。
2.1 ?PCA算法思想
在主成分分析中,通過坐標變化將原來的坐標系轉化到新的坐標系。新坐標的坐標軸的選擇是與原始數據有關的,第一個坐標軸選擇的是原始數據中方差最大的方向,第二個坐標軸的選擇和第一個坐標正交且具有最大方差,這樣一直重復,直到坐標維數與數據的特征維數相同。可以發現,大部分的方差都包含在前面的幾個新的坐標軸中。因此可以忽略余下的坐標軸,這樣就對數據進行了一個降維。
2.2?PCA算法的計算方法
首先我們來介紹一些PCA的計算方法,在這之后我們將從數學上來對PCA算法進行分析。
PCA的計算過程如下:
Ste1:去除每維特征的均值,目的是將數據的中心移動到原點上。
Ste2:計算協方差矩陣。
Ste3:計算協方差矩陣的特征值和特征向量。
Ste4:將特征值從大到小序,找出其中最上面的N個特征向量。
Step5:將原始數據轉換到上述N個特征向量構建的新的空間中去。
通過以上5個步驟,我們就能將原始數據降低到我們想要達到的維度。主成分分析的主要思想是基于方差最大、維度最小理論,因此我們可以通過計算累計貢獻率來來確定N的值的大小。定義貢獻率如下:
?
其中λ(i)表示的為第i個維度對應的特征值。我們可以設置適當的閾值,一般為0.8,如果前N個特征值的貢獻率之和達到該閾值,我們就可以認為N維代表了原始數據的主要信息。
2.3 PCA技術的數學原理
在上一節中我們已經討論了PCA的計算方法,下面我們將討論為什么要這計算。在信號處理中認為信號具有較大的方差,而噪聲具有較小的方差。信噪比表示的是信號方差與噪聲方差之比。信噪比越高則表數據越好。通過坐標變換,我們可以計算在新坐標下每一個維度的方差,如果變換后某一個坐標軸上的方差很小我們就可以認為該維特征是噪聲及干擾特征。因此坐標變換最好的方式就是
將變換之后N維特征的每一維方差都很大。
?
圖1
如圖1所示藍色加粗線條表示坐標變化之后的某個維度,表示經過去除平均值之后的數據的第i個樣本,u是該維度的方向向量,表示的是在該維度上到原點的距離。現在我們要做的就是找出u使得數據在該維度上投影的方差之和最大。由于經過去除平均值處理之后的平均值為0,容易證明它們在任何方向上的投影的平均值也為0.因此在u方向的方差之后為:
?
上式中的中間部分正好表示的就是樣本特征的協方差矩陣如果用λ表示var,用表示,那么上式就能夠表示成為。根據特征值的的定義,λ就是的一特征值,u就是特征向量。最佳的投影直線是特征值λ最大時對應的特征向量,依次類推。也就是說特征值的大小等價于歸一化之后數據的的方差大小。因此我們只需要對協方差矩陣進行特征值分解,得到前N個特征值對應的特征向量,并且這N維新的特征是正交的。因此可以通過以下計算方式將n維原數據轉化為新的N維數據:
?
通過選取最大的前N維使得他們累計貢獻率達到一定值,我們就能拋棄掉方差較小的特征,實現降維的目的。
2.4?PCA技術的python實現
定義函數PCA如下:
def pca(dataMat, minRation):meanVals = mean(dataMat, axis=0)meanRemoved = dataMat - meanVals #去除平均值covMat = cov(meanRemoved,rowvar=0)#計算協方差矩陣eigVals,eigVects = linalg.eig(mat(covMat))#計算特征值特征向量eigValInd=argsort(-eigVals)#從小大到排序ratio=0topNfeat=1for i in range(len(eigVals)):index=eigValInd[i]ratio=ratio+eigVals[index]#計算累計貢獻率topNfeat=i+1if ratio>minRation:breakeigValInd=eigValInd[1:topNfeat+1]redEigVects=eigVects[:,eigValInd]lowDDataMat = meanRemoved * redEigVects#將數據轉化到新的維度空間return topNfeat lowDDataMat? ? 該函數輸入為一個原始矩陣,和累計貢獻率的閾值。首先去除平均值,然后利用numy庫提供的cov()函數計算去除平均值之后的數據的協方差矩陣。再通過linalg.eig()函數計算該協方差矩陣的特征值和特征向量。通過argsort函數對(-eigVals)進行排序,相當于對eigVals進行逆序排序,返回排序后的索引值。其中的循環是用來計算新空間下的維數,lowData是變換到新空間下的數據。最終該函數輸出為變換后的數據,以及該空間的維數topNfeat。
三、PCA技術的應用
3.1 問題描述
? ? ?延續之前的回聲探測的問題,即從60個不同的方向對巖石進行測試,根據回聲的結果來探測的物體是巖壁還是礦井。該數據集共有208個數據,每個數據的維度為60.
3.2?PCA降維處理
?
? 我們已經在adabost使用過這個例子,這次我們對進行PCA降維之后的數據再次用adabost算法,計算測試的準確率。測試的準確率及運行時間如下表。
| 累計貢獻率閾值p | 處理后的維數N | 測試的平均準確率r | 程序平均時間t |
| 0.80 | 7 | 0.27 | 1.44 |
| 0.85 | 9 | 0.26 | 1.84 |
| 0.90 | 12 | 0.28 | 2.40 |
| 0.95 | 17 | 0.30 | 3.01 |
| 0.98 | 24 | 0.21 | 5.1 |
| 1.00 | 60 | 0.28 | 5.70 |
結果發現如果把累計貢獻率設置為0.9則新的空間下的維度為19維,大大降低了數據的維度。而在相同的數據集上,降維之后算法的準確率幾乎沒有變化。這表明降維對于數據的處理是一種有效的手段。
四、總結
?
本文從方差理論的角度對CA降維技術的原理進行了分析,然后通過與之前Adaboost算法結合比較在降維前后算法準確率的變化。在本例中,數據集經降維處理之后在數據集上的準確率變化不大,但是時間卻大大縮短了。當然,在其的數據上我也做過一些實驗,發現有些數據算法效率能夠顯著提升,而有些則不能。因此降維技術并不是萬能的,而是需要根據實際數據集進行分析是否適合使用。
?
轉載于:https://www.cnblogs.com/xfydjy/p/9291119.html
總結
以上是生活随笔為你收集整理的机器学习算法-PCA降维技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle的下载安装教程以及所出现的问
- 下一篇: iview 使用笔记