主成分分析(Principal Component Analysis, PCA)是一种常用的降维方法,旨在通过线性变换将高维数据投影到低维空间,同时尽可能保留数据的变化性(即信息)。PCA广泛应用于数据预处理、特征提取、可视化和去噪等领域。8 R) y8 f$ y3 @
5 F4 h) V* e. i
## PCA 的基本步骤 8 p6 q# _' A! H4 O& M- ]. h" ~" C6 F4 _# B; l1 A/ i5 X) k; M8 T
1. **标准化数据**: ( e4 W9 }; d& g0 S - 将数据集中的每个特征(维度)调整为均值为0,方差为1。这样可以消除不同特征量纲的影响。 ; i9 G6 F' n" t& T; y 8 I9 }0 `+ D/ l2. **计算协方差矩阵**:: T c( D4 D; y; w/ j
- 协方差矩阵反映了特征之间的关系。使用标准化后的数据计算协方差矩阵,公式为:1 f6 X P4 \% r7 \5 M; ?8 T. z
\[ 8 J L; N+ m1 `8 o, t \text{Cov}(X) = \frac{1}{n-1}(X^TX)5 l( o. h0 O! V
\]1 F; _9 r/ z- h- b( L+ ^3 n% P+ w
其中 \(X\) 为标准化后的数据矩阵,\(n\) 为样本数。9 |6 p6 R/ B& A# A, @
$ {1 P, M* y# X) x* `* Z) A
3. **计算特征值和特征向量**:2 \) ?. d; K1 n2 i. o0 s% D$ N6 b! H
- 通过求解协方差矩阵的特征值和特征向量,特征值表示每个主成分所解释的方差量,特征向量表示主成分的方向。9 w9 W6 |" h( c. f. v0 j) b) w- j
! P' V O" G+ s6 u2 i, N
4. **选择主成分**: 1 Q9 p% s$ a7 G$ s, X - 根据特征值的大小选择最大的几个特征值及其对应的特征向量。这决定了保留的数据维度。 ; n3 O4 s+ H. a8 T . ~( U1 g# u5 C/ W$ P" M# B' k5. **投影到新空间**:) w+ Q1 X' h% @' o1 A
- 将原始数据投影到所选择的特征向量组成的新空间,得到降维后的数据。 " z0 q# | U: a: P- R0 w5 K . J- i2 M4 W' L0 ]7 N3 l, b1 a3 `. K, f## 示例代码" [8 h: [# j! i5 s5 H B1 p' }
- ?: l0 C7 P, [& e8 W
下面是一个简单的Python实现PCA的示例,使用`numpy`库来进行计算,并使用`matplotlib`来可视化结果:$ H8 @1 x! M T9 S
! a }. S, q/ ?0 K5 B1 T```python , @2 X, T5 G8 `" n; Q9 p8 L* Pimport numpy as np : A- P' e2 l* w# f% B2 k2 nimport matplotlib.pyplot as plt2 x% G, i A. H
from sklearn.datasets import load_iris+ Y- o g% L# D1 p- y o
from sklearn.preprocessing import StandardScaler1 u7 J' ~, Q, h
H& B( f8 b1 d8 F% \- t- m7 C9 }" F6 {4 ~# 加载数据集(这里使用Iris数据集作为示例)8 u; G' ?; C1 D, i1 _
data = load_iris(), K' m y# g V( }0 l8 A& N: J' C
X = data.data # 特征数据 6 T! j6 i7 ]+ O; i( q3 x/ cy = data.target # 标签( ]. M5 E, m3 I+ N
) [; c( s7 n- M$ \1 d D
# 1. 标准化数据8 H. d$ e* J, q6 L- F4 X5 _5 @ ?
scaler = StandardScaler() / D9 L2 U: g6 N* UX_scaled = scaler.fit_transform(X)# X O6 j; i6 H* i8 u