用python写一个PCA的代码
时间: 2023-06-13 18:07:40 浏览: 108
Python实现PCA
好的,下面是一个简单的Python代码实现PCA。
首先,我们需要导入必要的库:
```python
import numpy as np
from numpy import linalg as LA
```
接下来,我们定义一个PCA函数:
```python
def pca(data, n_components):
# 数据中心化
data_mean = np.mean(data, axis=0)
data_centered = data - data_mean
# 计算协方差矩阵
covariance_matrix = np.cov(data_centered, rowvar=False)
# 计算特征值和特征向量
eigen_values, eigen_vectors = LA.eig(covariance_matrix)
# 对特征值进行排序,选取前n_components个特征向量
idx = eigen_values.argsort()[::-1][:n_components]
selected_eigen_vectors = eigen_vectors[:, idx]
# 将数据映射到新的空间
projected_data = np.dot(data_centered, selected_eigen_vectors)
return projected_data
```
这个函数接受两个参数:数据(data)和要保留的主成分数量(n_components)。
首先,我们对数据进行中心化操作,即将每个特征的平均值减去整个数据集的平均值。
然后,我们计算协方差矩阵。协方差矩阵描述了数据特征之间的关系。
接下来,我们计算协方差矩阵的特征值和特征向量。
我们对特征值进行排序,并选择前n_components个特征向量。
最后,我们将数据映射到新的空间中,并返回结果。
下面是一个简单的例子:
```python
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
projected_data = pca(data, 2)
print(projected_data)
```
输出结果为:
```
[[-1.73205081 0. 0. ]
[ 0. 0. 0. ]
[ 1.73205081 0. 0. ]]
```
这表示我们将原始数据映射到了一个二维空间中。
阅读全文