機器學習入門系列之PCA降維

目錄

 

前言

PCA降維原理

PCA如何降維

Sklearn實現

總結


前言

今天來說說機器學習中一個比較重要的概念——主成分分析(Principal Component Analysis),簡稱PCA。根據字面意思強行解釋一波,就是對主要的成分分析。專業一點就是:在減少樣本維數的同時儘可能的保留原樣本的信息,僅保留樣本中所存在的主要特性,從而可以大大節省空間和數據量。

 

降維的好處:

  1. 提升效率。我們往往面臨成百上千的特徵,如果對全部特徵都處理,導致訓練預測等處理特別慢

  2. 不遺漏任何一個特徵。以前特徵數量過多時,會採用丟棄的策略,使用PCA可以將所有的特徵映射到固定的數量維度上。

  3. 將高維度的特徵映射到低維度,便於理解以及可視化

 

PCA降維原理

比如,我們有兩個特徵,如下圖

 

現在需要對兩個特徵進行降維,降到一個維度。我們會想到可以將特徵分別映射到X軸或Y軸,如下:

此時我們發現右邊的降維效果似乎是更好一點,因爲點和點之間的距離保持了原來的分佈,更具有區分度。

但是如果這樣降維,我們就會損失某個特徵,而且有時候還不能最大程度的保持原分佈。所以試想,在點之間是否可以找出一條直線,使得點映射到線上之後,可以最大的保持之前的分佈與間距

 

PCA如何降維

如何找一條直線,向量W=(W1,W2),使得特徵1和特徵2映射到該直線後,樣本點之間的間距是最大的?

掐指一算,此乃最優解問題。我們在前面講了梯度下降法可以找到一個目標函數的最小值,同理我們只需要找到一個表示樣本間距的目標函數,然後使用梯度上升法求得最大值即可

在統計學中,一般用方差來定義樣本的間距,方差公式如下:

對應的,樣本如果有多個特徵,X和均值X都爲向量,那麼公式就變爲:

 

此時X都爲矩陣,所以括號內部爲向量,其實就是兩個向量相減求模,所以可以寫成以下公式:

此時就要進行PCA第一步,demean,即均值歸零。所以原公式可以變爲:

如圖,上面的線是我們要找的方向,下方的點是第i行的樣本點,映射到w上,即對w做垂線,交點爲。我們要求解的就是的模的平方,即藍色線的平方。

將向量映射到另一個向量上,求長度,其實就是向量的點乘。

由於向量w是方向向量,所以模爲1

其實在直角三角形中, 就是

所以就有

此時方差的公式可以變爲

如果是n維數據,那麼就有以下公式。

此時,我們就需要對以上函數求得最大值,可以利用梯度上升法/數學解法進行求取最優解,此處就不介紹了,可參考餅乾大神的數據降維2:PCA算法的實現及使用

 

Sklearn實現

import numpy as np
import matplotlib.pyplot as plt

X = np.empty((100, 2))
X[:,0] = np.random.uniform(0., 100., size=100)
X[:,1] = 0.75 * X[:,0] + 3. + np.random.normal(0, 10., size=100)
plt.scatter(X[:,0],X[:,1])
plt.show()

 


from sklearn.decomposition import PCA
#初始化實例對象,傳入主成分個數,即降維後的維數
pca = PCA(n_components=1)
pca.fit(X)
# 對樣本X進行降維
X_reduction = pca.transform(X)
X_reduction.shape
#OUT:(100,1) 可以看出X_reduction只有一個特徵了。

​​​​​

我們可以疊加到一張圖上進行更清晰的查看

#對降維後的數據進行恢復成高維數據,但已經不是最原始的數據
X_restore = pca.inverse_transform(X_reduction)
plt.scatter(X[:,0],X[:,1])
plt.scatter(X_restore[:,0],X_restore[:,1],color='r')

 

 

總結

上面只是使用PCA進行簡單數據的降維操作,PCA可以對更高維的數據進行特徵抽取,使得算法更加精準,效率更高。

PCA對高維數據進行降維處理後,可以對降維後的數據再次進行恢復操作,使得轉換到高維數據,但此時的高維數據已經不是最原始的數據了,而是經過PCA優化過後的數據(已經經過了demean處理),所以PCA往往也用來做降噪,人臉識別等等,後續會結合實際案例運用PCA大法,不要走開喔~

更多精彩:

機器學習入門系列之KNN

機器學習入門系列之線性迴歸

機器學習入門系列之評價模型的好壞

機器學習入門系列之特徵處理

機器學習入門系列之梯度下降

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