系列文章:
吳恩達《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),歡迎關注!