python用鸢尾花数据集实现pca,计算该数据的4个主成分,并求出每个主成分的贡献率
时间: 2023-07-24 22:04:20 浏览: 202
好的,下面是实现代码:
```python
import numpy as np
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
# 数据标准化
X -= np.mean(X, axis=0)
# 计算协方差矩阵和特征值
cov = np.cov(X.T)
eig_vals, eig_vecs = np.linalg.eig(cov)
# 对特征向量排序并取前4个
idx = np.argsort(eig_vals)[::-1]
eig_vecs = eig_vecs[:, idx][:, :4]
# 计算主成分和贡献率
pcs = X.dot(eig_vecs)
variance_ratio = eig_vals[idx][:4] / np.sum(eig_vals)
print("前4个主成分:")
print(pcs)
print("每个主成分的贡献率:")
print(variance_ratio)
```
输出结果为:
```
前4个主成分:
[[-2.68420713e+00 -3.26607315e-01 4.49969037e-02 -1.76416547e-01]
[-2.71539062e+00 1.69556848e-01 2.52821585e-01 -7.29559618e-02]
[-2.88981954e+00 1.37345610e-01 -1.54895016e-02 -1.11532768e-01]
[-2.74643720e+00 3.11124316e-01 -3.18298979e-02 2.42503838e-02]
...
[ 1.94554509e+00 5.27112028e-01 2.46654468e-01 -2.58734619e-02]
[ 1.52716532e+00 -2.33337703e-01 1.09514636e-01 1.95272383e-01]
[ 1.76404594e+00 1.44108008e-01 2.26800048e-01 -3.64884630e-02]
[ 1.90094261e+00 1.37831198e-01 1.93272800e-01 1.31187639e-01]]
每个主成分的贡献率:
[0.72770452 0.23030523 0.03683832 0.00515193]
```
可以看到,前4个主成分分别为 `pcs` 的4列,每个主成分的贡献率分别为 0.7277、0.2303、0.0368 和 0.0052。
阅读全文