吳恩達《Machine Learning》精煉筆記 9:PCA 及其 Python 實現

紅色石頭發表於2021-01-23

系列文章:

吳恩達《Machine Learning》精煉筆記 1:監督學習與非監督學習

吳恩達《Machine Learning》精煉筆記 2:梯度下降與正規方程

吳恩達《Machine Learning》精煉筆記 3:迴歸問題和正則化

吳恩達《Machine Learning》精煉筆記 4:神經網路基礎

吳恩達《Machine Learning》精煉筆記 5:神經網路

吳恩達《Machine Learning》精煉筆記 6:關於機器學習的建議

吳恩達《Machine Learning》精煉筆記 7:支援向量機 SVM

吳恩達《Machine Learning》精煉筆記 8:聚類 KMeans 及其 Python實現

在本文中主要介紹的是資料降維相關的內容,重點講解了PCA演算法

  • 為什麼要實施降維
    • 資料壓縮
    • 資料視覺化
  • PCA演算法
    • PCA和線性迴歸演算法的區別
    • PCA演算法特點
    • Python實現PCA
  • sklearn中實現PCA

為何降維

在現實高維資料情況下,會有資料樣本稀疏、距離計算困難等問題,被稱為維數災難。

解決的方法就是降維,也稱之為“維數約簡”,即透過某種資料方法將原始高維屬性空間轉成一個低維“子空間”。在這個子空間中,樣本密度大大提高,將高維空間中的一個低維“嵌入”。

降維Dimensionality Reduction

資料降維主要是有兩個動機:

  • 資料壓縮Data Compression
  • 資料視覺化Data Visualization

資料壓縮Data Compression

上圖解釋:

1.在一個三維空間中的特徵向量降至二維的特徵向量。
2.將三維投影到一個二維的平面上,迫使所有的資料都在同一個平面上。
3.這樣的處理過程可以被用於把任何維度的資料降到任何想要的維度,例如將1000維的特徵降至100維。

資料視覺化Data Visualization

降維能夠幫助我們進行資料的視覺化工作。

上面圖的解釋:

1.假設給定資料,具有多個不同的屬性
2.某些屬性表示的含義可能相同,在圖形中可以放到同一個軸上,進行資料的降維

PCA- Principal Component Analysis

在PCA中,要做的是找到一個方向向量(Vector direction),當把所有的資料都投射到該向量上時,PCA的關鍵點就是找到一個投影平面使得投影誤差最小化。

方向向量是一個經過原點的向量,而投射誤差是從特徵向量向該方向向量作垂線的長度。

PCA與線性迴歸的區別

1.線性迴歸中的縱軸是預測值,PCA中是特徵屬性
2.誤差不同:PCA是投射誤差,線性迴歸是嘗試最小化預測誤差。
3.線性迴歸的目的是預測結果,PCA·是不做任何分析。

PCA演算法

主成分分析中,首先對給定資料進行規範化,使得資料每一變數的平均值為0,方差為1。
之後對資料進行正交變換,用來由線性相關表示的資料,透過正交變換變成若干個線性無關的新變數表示的資料。

新變數是可能的正交變換中變數的方差和(資訊儲存)最大的,方差表示在新變數上資訊的大小。將新變數一次成為第一主成分,第二主成分等。透過主成分分析,可以利用主成分近似地表示原始資料,便是對資料降維。

PCA演算法中從n維到k維的過程是

  • 均值歸一化。計算所有特徵的均值,令xj=xj−μj,如果特徵不在一個數量級上,需要除以標準差
  • 計算協方差矩陣 covariance matrix

  • 計算協方差矩陣∑的特徵向量 eigenvectors

在西瓜書中的描述為

主成分個數確定

關於PCA演算法中主成分個數k的確定,一般是根據公式:

不等式右邊的0.01可以是0.05,或者0.1等,都是比較常見的。當為0.01的時候,表示保留了99%的方差資料,即大部分的資料特徵被保留了。

當給定了個數k,協方差矩陣S中求解出來的各個特徵值滿足公式:

也就是滿足:

這個和上面的公式是等價的。

重建的壓縮表示

重建的壓縮表示Reconstruction from Compressed Representation指的是將資料從低維還原到高維的過程。

將指定的點位置對映到一個三維曲面,反解前面的方程:

PCA特點

1.PCA本質上是將方差最大的方向作為主要特徵,讓這些特徵在不同正交方向上沒有相關性。
2.PCA是一種無引數技術,不需要進行任何引數的調節

Python實現PCA

利用numpy、pandas、matplotlib庫實現PCA演算法

sklearn中實現PCA

Linear dimensionality reduction using Singular Value Decomposition of the data to project it to a lower dimensional space. The input data is centered but not scaled for each feature before applying the SVD.
用sklearn學習PCA:

用sklearn學習PCA:

https://www.cnblogs.com/pinard/p/6243025.html

實現模組

在scikit-learn中,與PCA相關的類都在sklearn.decomposition包中。最常用的PCA類就是sklearn.decomposition.PCA。

白化:對降維後的資料的每個特徵進行歸一化,讓方差都為1

class sklearn.decomposition.PCA(n_components=None, # 降維後的特徵數目,直接指定一個整數
                                copy=True,
                                whiten=False, # 判斷是否進行白化,預設是不白化
                                svd_solver='auto', # 指定奇異值分解SVD的方法
                                tol=0.0,
                                iterated_power='auto',
                                random_state=None)

demo

在這裡講解一個例子,利用PCA演算法來進行IRIS資料的分類


本文首發於公眾號:AI有道(ID: redstonewill),歡迎關注!

相關文章