整理PCA中心化和 SVD 的算法和代码
时间: 2024-09-24 16:18:04 浏览: 39
PCA(主成分分析)和SVD(奇异值分解)都是无监督学习中的基础工具,它们在数据预处理阶段都有中心化的步骤。以下是简化的算法概述以及Python示例代码:
**PCA中心化(假设使用NumPy库)**:
1. **数据标准化(中心化)**:首先,我们需要减去每个特征的平均值,使其变为零均值。
```python
import numpy as np
def center_data(X):
return X - np.mean(X, axis=0)
```
2. **计算协方差矩阵**:然后计算中心化后的数据的样本协方差矩阵。
```python
def compute_covariance_matrix(X):
centered_X = center_data(X)
return np.cov(centered_X.T)
```
3. **特征值分解**:对协方差矩阵做EVD(或等价地对样本方差矩阵做EVD),获得特征值和特征向量。
```python
def eigendecomposition(cov_matrix):
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
return eigenvalues, eigenvectors
```
**SVD**:
1. **中心化**:同样先中心化数据。
```python
def svd_preprocessing(X):
return X - np.mean(X, axis=0)
```
2. **奇异值分解**:直接使用NumPy的`numpy.linalg.svd`函数。
```python
def singular_value_decomposition(X):
u, s, v = np.linalg.svd(svd_preprocessing(X), full_matrices=False)
return u, s, v
```
这里`u`是左奇异向量矩阵,`s`是对角矩阵包含奇异值,`v`是右奇异向量矩阵。
阅读全文