主成分分析(PCA)
主成分分析(Principal Component Analysis,PCA)是一種常用的無監督學習方法
利用正交變換把由線性相關變數表示的觀測資料 轉換為 少數幾個由線性無關變數表示的資料,線性無關的變數 稱為 主成分
主成分的個數通常小於原始變數的個數,所以PCA屬於降維方法
主要用於發現資料中的基本結構,即資料中變數之間的關係,是資料分析的有力工具,也用於其他機器學習方法的前處理
PCA屬於多元統計分析的經典方法
1. 總體主成分分析
第一軸選取方差最大的軸 y1
主成分分析 的主要目的是降維,所以一般選擇 k( k≪mk\ll mk≪m)個主成分(線性無關變數)來代替m個原有變數(線性相關變數),使問題得以簡化,並能保留原有變數的大部分資訊(原有變數的方差)。
在實際問題中,不同變數可能有不同的量綱,直接求主成分有時會產生不合理的結果。
為了消除這個影響,常常對各個隨機變數實施規範化,使其均值為0,方差為1。
主成分分析的結果可以用於其他機器學習方法的輸入。
將樣本點投影到以主成分為座標軸的空間中,然後應用聚類演算法,就可以對樣本點進行聚類
定義:
假設 x\pmb xxxx 為 mmm 維隨機變數,均值為 μ\muμ,協方差矩陣為 Σ\SigmaΣ
隨機變數 x\pmb xxxx 到 mmm 維隨機變數 y\pmb yyyy 的線性變換
yi=αiTx=∑k=1mαkixk,i=1,2,...,my_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,myi=αiTxxx=k=1∑mαkixk,i=1,2,...,m
其中 αiT=(α1i,α2i,...,αmi)\alpha_i^T = (\alpha_{1i},\alpha_{2i},...,\alpha_{mi})αiT=(α1i,α2i,...,αmi)
如果該線性變換滿足以下條件,稱之為總體主成分:
αiTαi=1,i=1,2,...,m\alpha_i^T\alpha_i = 1, i = 1, 2,...,mαiTαi=1,i=1,2,...,m
cov(yi,yj)=0(i≠j)cov (y_i,y_j) = 0(i \neq j)cov(yi,yj)=0(i=j)
y1y_1y1 是 x\pmb xxxx 的所有線性變換中方差最大的,y2y_2y2 是與 y1y_1y1 不相關的 x\pmb xxxx 的所有線性變換中方差最大的,以此類推,y1,y2,...,ymy_1,y_2,...,y_my1,y2,...,ym 稱為第一主成分…第 mmm 主成分
假設 x\pmb xxxx 是 mmm 維隨機變數,其協方差矩陣 Σ\SigmaΣ 的特徵值分別是 λ1≥λ2≥...≥λm≥0\lambda_1 \ge \lambda_2 \ge ... \ge \lambda_m \ge 0λ1≥λ2≥...≥λm≥0,特徵值對應的單位特徵向量分別是 α1,α2,...,αm\alpha_1,\alpha_2,...,\alpha_mα1,α2,...,αm,則 x\pmb xxxx 的第 iii 主成分可寫作:
yi=αiTx=∑k=1mαkixk,i=1,2,...,my_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,myi=αiTxxx=k=1∑mαkixk,i=1,2,...,m
並且,x\pmb xxxx 的第 iii 主成分的方差是協方差矩陣 Σ\SigmaΣ 的第 iii 個特徵值,即:
var(yi)=αiTΣαi=λivar (y_i) = \alpha_i^T\Sigma\alpha_i = \lambda_ivar(yi)=αiTΣαi=λi
主成分性質:
主成分 y\pmb yyyy 的協方差矩陣是對角矩陣 cov(y)=Λ=diag(λ1,λ2,...,λm)cov(\pmb y) = \Lambda = diag(\lambda_1,\lambda_2,...,\lambda_m)cov(yyy)=Λ=diag(λ1,λ2,...,λm)
主成分 y\pmb yyyy 的方差之和等於隨機變數 x\pmb xxxx 的方差之和
∑i=1mλi=∑i=1mσii\sum\limits_{i=1}^m \lambda_i = \sum\limits_{i=1}^m \sigma_{ii}i=1∑mλi=i=1∑mσii
其中 σii\sigma_{ii}σii 是 xix_ixi 的方差,即協方差矩陣 Σ\SigmaΣ 的對角線元素
主成分 yky_kyk 與變數 xix_ixi 的 相關係數 ρ(yk,xi)\rho(y_k,x_i)ρ(yk,xi) 稱為因子負荷量(factor loading),它表示第 kkk 個主成分 yky_kyk 與變數 xix_ixi 的相關關係,即 yky_kyk 對 xix_ixi 的貢獻程度
ρ(yk,xi)=λkαikσii,k,i=1,2,...,m\rho(y_k, x_i) = \frac{\sqrt{\lambda_k}\alpha_{ik}}{\sqrt{\sigma_{ii}}},k,i=1,2,...,mρ(yk,xi)=σiiλkαik,k,i=1,2,...,m
2. 樣本主成分分析
是基於樣本協方差矩陣的主成分分析
給定樣本矩陣 XXX
XXX 的樣本協方差矩陣
S=[sij]m×n,sij=1n−1∑k=1m(xik−xˉi)(xjk−xˉj)i=1,2,...,m,j=1,2,...,m,其中xˉi=1n∑k=1nxikS = [s_{ij}]_{m \times n}, \quad s_{ij} = \frac{1}{n-1}\sum\limits_{k=1}^m(x_{ik}-\bar x_i)(x_{jk}-\bar x_j)\\
i = 1,2,...,m,\quad j = 1,2,...,m, 其中 \bar x_i = \frac{1}{n}\sum\limits_{k=1}^n x_{ik}S=[sij]m×n,sij=n−11k=1∑m(xik−xˉi)(xjk−xˉj)i=1,2,...,m,j=1,2,...,m,其中xˉi=n1k=1∑nxik
給定樣本 XXX,考慮 x\pmb xxxx 到 y\pmb yyyy 的線性變換 y=ATx\pmb y = A^T \pmb xyyy=ATxxx
如果滿足以下條件,稱之為樣本主成分:
樣本第一主成分 y1=α1Txy_1 = \alpha_1^T \pmb xy1=α1Txxx 是在 α1Tα1=1\alpha_1^T\alpha_1 = 1α1Tα1=1 條件下,使得 α1Txj(j=1,2,...,n)\alpha_1^T \pmb x_j (j=1,2,...,n)α1Txxxj(j=1,2,...,n) 的樣本方差 α1TSα1\alpha_1^TS\alpha_1α1TSα1 最大的 x\pmb xxxx 的線性變換,以此類推。
樣本第 iii 主成分 yi=αiTxy_i = \alpha_i^T \pmb xyi=αiTxxx 是在 αiTαi=1\alpha_i^T\alpha_i = 1αiTαi=1 和 αiTxj\alpha_i^T\pmb x_jαiTxxxj 與 αkTxj(k
3. 主成分分析方法
3.1 相關矩陣的特徵值分解演算法
針對 m×nm \times nm×n 樣本矩陣 XXX ,求樣本相關矩陣 R=1n−1XXTR = \frac{1}{n-1}XX^TR=n−11XXT
再求樣本相關矩陣的 kkk 個特徵值和對應單位特徵向量,構造正交矩陣
V=(v1,v2,...,vk)V = (v_1,v_2,...,v_k)V=(v1,v2,...,vk)
VVV 的每一列對應一個主成分,得到 k×nk \times nk×n 樣本主成分矩陣 Y=VTXY=V^TXY=VTX
3.2 矩陣奇異值分解演算法
針對 m×nm \times nm×n 樣本矩陣 XXX ,X′=1n−1XTX' = \frac{1}{\sqrt{n-1}}X^TX′=n−11XT
對矩陣 XXX 進行截斷奇異值分解,保留 kkk 個奇異值、奇異向量
得到 X′=USVTX' = USV^TX′=USVT
VVV 的每一列對應一個主成分,得到 k×nk \times nk×n 樣本主成分矩陣 Y=VTXY=V^TXY=VTX
4. sklearn.decomposition.PCA
sklearn.decomposition.PCA 官網介紹
class sklearn.decomposition.PCA(n_components=None, copy=True,
whiten=False, svd_solver='auto', tol=0.0,
iterated_power='auto', random_state=None)
引數: 鄭州哪個人流醫院好
n_components:保留主成分個數,沒有賦值,特徵個數不變
屬性:
components_:主成分
explained_variance_:各特徵方差
explained_variance_ratio_:各特徵方差百分比
singular_values_:主成分的奇異值
n_components_:保留特徵個數
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
plt.scatter(X[:, 0], X[:, 1])
plt.show()
for n in range(1, 3):
print("PCA n_components = {}".format(n))
pca = PCA(n_components=n)
pca.fit(X)
print("特徵方差")
print(pca.explained_variance_)
print("特徵方差佔比")
print(pca.explained_variance_ratio_)
print("主成分奇異值")
print(pca.singular_values_)
print("主成分")
print(pca.components_)
print("主成分個數")
print(pca.n_components_)
PCA n_components = 1
特徵方差
[7.93954312]
特徵方差佔比
[0.99244289]
主成分奇異值
[6.30061232]
主成分
[[-0.83849224 -0.54491354]]
主成分個數
1
PCA n_components = 2
特徵方差
[7.93954312 0.06045688]
特徵方差佔比
[0.99244289 0.00755711]
主成分奇異值
[6.30061232 0.54980396]
主成分
[[-0.83849224 -0.54491354]
[ 0.54491354 -0.83849224]]
主成分個數
2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2689002/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PCA主成分分析(上)PCA
- 主成分分析(PCA)簡介PCA
- 主成分分析(PCA)原理詳解PCA
- 主成分分析(PCA)原理總結PCA
- 主成分分析(PCA) C++ 實現PCAC++
- 用scikit-learn學習主成分分析(PCA)PCA
- 基於PCA(主成分分析)的人臉識別PCA
- 主成分分析(PCA)Python程式碼實現PCAPython
- 演算法金 | 再見,PCA 主成分分析!演算法PCA
- 聊聊基於Alink庫的主成分分析(PCA)PCA
- 機器學習_用PCA主成分分析給資料降維機器學習PCA
- 運用sklearn進行主成分分析(PCA)程式碼實現PCA
- 【機器學習】--主成分分析PCA降維從初識到應用機器學習PCA
- 【數學】主成分分析(PCA)的詳細深度推導過程PCA
- 手把手 | 用StackOverflow訪問資料實現主成分分析(PCA)PCA
- 特徵向量/特徵值/協方差矩陣/相關/正交/獨立/主成分分析/PCA/特徵矩陣PCA
- OpenCV3.3中主成分分析(Principal Components Analysis, PCA)介面簡介及使用OpenCVPCA
- opencv——PCA(主要成分分析)數學原理推導OpenCVPCA
- 主成分分析推導
- 主成分與因子分析
- R語言邏輯迴歸、GAM、LDA、KNN、PCA主成分分類分析預測房價及交叉驗證R語言邏輯迴歸GAMLDAKNNPCA
- 主成分分析及其matlab實現Matlab
- Python數模筆記-Sklearn(3)主成分分析Python筆記
- 材料成分分析
- 主成分分析(Principal components analysis)-最大方差解釋
- 通俗易懂解釋什麼是PCIA(主成分分析) - stackexchange
- opencv PCA 主軸方向角度範圍OpenCVPCA
- 主成分分析(Principal components analysis)-最小平方誤差解釋
- 機器學習降維之主成分分析機器學習
- 軟體成分分析(SCA)完全指南
- 找最大數;及序列生成分析
- Statspack之六-生成分析報告
- Qiime1-12.菌群組成分析
- Spark2 oneHot編碼--標準化--主成分--聚類Spark聚類
- 機器學習之pca機器學習PCA
- 華為員工構成分析 外籍員工佔近20%
- 軟體成分安全分析(SCA)能力的建設與演進
- 漫談軟體成分分析(SCA)安全測試技術