QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1301|回复: 0
打印 上一主题 下一主题

主成分分析算法Python代码

[复制链接]
字体大小: 正常 放大

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2025-1-13 17:24 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
主成分分析(Principal Component Analysis, PCA)是一种常用的降维方法,旨在通过线性变换将高维数据投影到低维空间,同时尽可能保留数据的变化性(即信息)。PCA广泛应用于数据预处理、特征提取、可视化和去噪等领域。
1 B- W  _, a, ]) R/ r( [) X% s) J# T1 f! M! ^
## PCA 的基本步骤2 p1 o8 E" \7 s/ f

, k( l% ]4 m' K! y, n: ~" I1. **标准化数据**:
' E$ `( B: Y7 j! f0 e   - 将数据集中的每个特征(维度)调整为均值为0,方差为1。这样可以消除不同特征量纲的影响。
& C4 M5 `  p1 X* f0 f$ F: Y/ n7 t# Q
2. **计算协方差矩阵**:, ~" w) [( G! b. @
   - 协方差矩阵反映了特征之间的关系。使用标准化后的数据计算协方差矩阵,公式为:5 R7 |' V) y7 g* D
   \[2 X' M1 s" ~2 v& S7 b
   \text{Cov}(X) = \frac{1}{n-1}(X^TX)
# T) }$ x+ z3 E+ r) j' Y+ {   \]* X$ ^3 |7 T$ ^& d2 ~  G% Z5 q% _
   其中 \(X\) 为标准化后的数据矩阵,\(n\) 为样本数。5 ^6 o1 C, x/ l# j7 k

2 v$ ]) ^/ K5 g- s3. **计算特征值和特征向量**:" e0 |- M( m/ T" ]3 m: O
   - 通过求解协方差矩阵的特征值和特征向量,特征值表示每个主成分所解释的方差量,特征向量表示主成分的方向。
2 [9 w( C2 E5 z) S+ @$ S* \) Q/ X0 q6 ?1 _' p& V
4. **选择主成分**:
, g" e4 y$ _3 J5 {   - 根据特征值的大小选择最大的几个特征值及其对应的特征向量。这决定了保留的数据维度。
% k1 I4 Z. B: `/ J
" u6 Y7 x- e$ V4 T# |, J# w5. **投影到新空间**:
9 o+ `3 T# F1 Y/ e9 D   - 将原始数据投影到所选择的特征向量组成的新空间,得到降维后的数据。8 B8 f* B2 e6 c" U5 n7 H) I

# ~% i0 h! a/ g## 示例代码1 v4 w6 i/ c% ?9 h4 R/ q/ J" q

5 Q/ u1 H0 Z" }8 o+ J下面是一个简单的Python实现PCA的示例,使用`numpy`库来进行计算,并使用`matplotlib`来可视化结果:
1 n" I; x( T7 Q1 {; ^% t! q; v2 ^0 k( s1 f+ K+ f/ c
```python
# Z* V7 b2 R1 ~% p! Jimport numpy as np
# P& o/ h3 W+ q, L7 k4 simport matplotlib.pyplot as plt
- E3 F! a& I- k+ {from sklearn.datasets import load_iris
; [' a  E) g/ G1 @2 Y4 Ffrom sklearn.preprocessing import StandardScaler
5 R: ~, H. a4 l
; Z+ ]% Y. O8 O- m% ]# 加载数据集(这里使用Iris数据集作为示例)
" c5 M* u" J" s9 Y8 o7 U9 i. |data = load_iris()
% ^) ^0 d$ r1 F9 X% T$ L7 DX = data.data  # 特征数据
! I  G* p- E5 Fy = data.target  # 标签1 B, e1 k; v4 o8 j. v  C

2 T% w* X/ M9 @# 1. 标准化数据9 ~; U! ~- s% a) }/ R
scaler = StandardScaler()* r! V% n3 X( l
X_scaled = scaler.fit_transform(X)
: X4 j" a7 H, P8 @" ]: z' @' J, K
! d% Z# u0 `9 W+ X# 2. 计算协方差矩阵
: E5 q3 d/ F4 B2 acov_matrix = np.cov(X_scaled.T)5 ]; `) E* d! J% W) T3 }! Y8 l
6 k( w4 O" B4 Y2 b+ N. P; e4 T
# 3. 计算特征值和特征向量
' u' [/ w, V2 z/ O9 H8 j2 z9 @" Eeigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
: ?  L: \+ [0 [/ Q2 m3 f/ z& d! g1 Y
# 4. 按特征值从大到小排序特征向量
& k+ P2 c) _% y: R; W  i2 q, Ssorted_indices = np.argsort(eigenvalues)[::-1]2 Q2 k$ R! i6 @4 A  A8 p
eigenvalues_sorted = eigenvalues[sorted_indices]
- o' R) S2 q- t* u$ o; J& Leigenvectors_sorted = eigenvectors[:, sorted_indices]
0 U$ e" J, o1 c1 Q! R) ?, J- Q0 J' C; B" o6 Y, Z
# 选择前两个主成分
, V6 @* Z  v5 ~9 on_components = 2
, m/ t. g# w( a6 ], A9 Y, jW = eigenvectors_sorted[:, :n_components]9 ^+ O. l/ ?2 W7 e& z+ }
) F) v( f. a4 F! `) |  E. v" x7 a
# 5. 投影到新空间
  f- S7 B7 \( k3 f- s6 |3 K( ]X_pca = X_scaled.dot(W)7 r( u6 D5 L3 G2 m3 V0 Y6 K# K
3 [9 v4 l7 h, L, p5 j* }. C1 v
# 可视化结果0 W3 S2 o  b5 A2 C- F$ v7 x2 G
plt.figure(figsize=(8, 6))
1 x7 D: r7 A2 ]: h0 Yfor target, color in zip([0, 1, 2], ['red', 'green', 'blue']):
7 B1 m9 Y9 p$ R1 i; |0 B    plt.scatter(X_pca[y == target, 0], X_pca[y == target, 1], color=color, label=data.target_names[target])# Z5 ~$ S, f4 R$ P0 X0 ?
plt.xlabel('主成分 1')
0 n- h7 C% y' @( m1 P7 j* Dplt.ylabel('主成分 2')* l$ {* U$ I, y: n' E) |; G9 {
plt.title('PCA - Iris Dataset')1 J- X; P5 W0 H$ N
plt.legend()
1 l$ p  G. k' z) _0 C) W( x* _plt.grid()
3 I( z. P5 c; yplt.show(); u/ G0 ?4 f' J# k; S4 `" h
```
6 O/ x2 t8 T; D+ ~0 C, z: E) M" M
1 h: e3 x9 P9 g3 V5 A### 代码解析/ B, ?. m2 R) i) m+ e
4 W- w8 X' \& w3 N, [  b
1. **数据加载**:6 s$ h8 x, E1 U$ G3 N
   - 使用`sklearn`库的`load_iris`函数加载Iris数据集,获取特征数据\(X\)和标签\(y\)。
7 x6 _) n2 k8 w& x
* p; b& B  j; N# q7 U, K2. **数据标准化**:  l! r" t$ t2 W2 X( v
   - 使用`StandardScaler`将特征数据标准化,使每个特征的均值为0,方差为1。
3 I/ P+ L  y$ |
( o- D( y% v: d3. **计算协方差矩阵**:' W7 k% B6 F6 G" K( _
   - 使用`np.cov`计算标准化数据的协方差矩阵。
2 ]4 z+ a% ^5 x) }2 ]  F6 \' U3 h
4. **特征值和特征向量的计算**:$ Q9 r7 p* F( D6 M
   - 使用`numpy.linalg.eig`计算协方差矩阵的特征值和特征向量。% {( u$ ]  @- A% Z) U# K
: I1 ]+ {! G5 D3 n% K. {
5. **特征值的排序与选择**:
7 S. Q) B. r! W7 _   - 将特征值按降序排序,并根据排序结果选择相应的特征向量。5 g3 _& A! g7 k- I2 y3 g! P
  H& W5 R) A5 N( H. j) t
6. **数据投影**:5 P3 F$ D  I2 B
   - 将标准化后的数据投影到新的特征空间(即主成分空间)。6 z/ a7 ]3 \9 T! B% M2 u

! J! I) K$ n5 U7. **结果可视化**:
" u) y8 w8 t( A8 h" L) J7 F+ n   - 使用`matplotlib`绘制降维后的数据点,以展示不同类别的数据分布。6 ?0 Q" x: o/ z4 c5 r, p
9 V& N, E% v; U( c' b- u7 \
### 总结: R2 V+ b, K% l/ D  |% R( k4 y

; f4 X" [# c* @6 ~PCA是一种有效的降维技术,可以帮助我们在保持数据特征信息的同时,减少数据的维度。它非常适合于数据预处理、特征提取、可视化等任务。在实践中,使用现成的库(如`sklearn`)可以更加方便、普遍地实现PCA,包括数据的标准化、协方差计算和特征选择等。
' n4 d. m7 `" ^# r1 _
  D% Q  X' o( m# {如果你有具体的应用场景或需要更详细的解释,请告诉我!
' Y, @5 V4 B+ ~- Q
( x' V( U  }- i" f* Z$ j
$ Z* G4 o+ E& u- `$ j$ }7 K+ R0 ~( m) v$ C, E& ^

主成分分析算法Python代码.txt

930 Bytes, 下载次数: 1, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-17 04:57 , Processed in 1.273007 second(s), 54 queries .

回顶部