用python语言实现主成分分析方法,画出鸢尾花数据集的前三个属性的最优直线近似图
时间: 2024-06-07 09:05:22 浏览: 77
NJUSE 大数据分析 课程作业,基于python实现使用多种方法分类鸢尾花数据集,推荐算法,MovieLens数据集
可以的,以下是Python代码和图示:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
# 导入数据集
iris = load_iris()
X = iris.data
y = iris.target
# 均值归一化
X_norm = X - np.mean(X, axis=0)
# 计算协方差矩阵
cov_mat = np.cov(X_norm.T)
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
# 对特征值进行排序
sorted_idx = eig_vals.argsort()[::-1]
eig_vals = eig_vals[sorted_idx]
eig_vecs = eig_vecs[:, sorted_idx]
# 取前三个特征向量,将数据投影到这三个维度上
projection_matrix = eig_vecs[:, :3]
X_pca = X_norm.dot(projection_matrix)
# 绘制图像
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for i in range(len(X)):
if y[i] == 0:
ax.scatter(X_pca[i, 0], X_pca[i, 1], X_pca[i, 2], c='r', marker='o')
elif y[i] == 1:
ax.scatter(X_pca[i, 0], X_pca[i, 1], X_pca[i, 2], c='g', marker='o')
else:
ax.scatter(X_pca[i, 0], X_pca[i, 1], X_pca[i, 2], c='b', marker='o')
ax.set_xlabel('PC1')
ax.set_ylabel('PC2')
ax.set_zlabel('PC3')
plt.show()
```
![PCA](https://cdn.jsdelivr.net/gh/lixin-wei/CDN/pca.png)
阅读全文