python用鸢尾花数据集实现pca,计算该数据的4个主成分,并求出每个主成分的贡献率
时间: 2023-07-24 17:04:20 浏览: 197
python导入鸢尾花数据集,使用主成分分析函数对鸢尾花数据集降维数据集和原始数据集分别进行线性判别比较分析的准确率
好的,下面是实现代码:
```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。
阅读全文