python用鸢尾花数据集实现pca,并可视化
时间: 2023-07-24 21:04:20 浏览: 120
好的,以下是用Python实现PCA并可视化鸢尾花数据集的代码:
```python
# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
# 加载鸢尾花数据集
iris = load_iris()
# 将特征矩阵和标签向量分别存储在 X 和 y 中
X = iris.data
y = iris.target
# 实例化PCA类
pca = PCA(n_components=2)
# 对特征矩阵进行降维
X_pca = pca.fit_transform(X)
# 可视化降维后的数据
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.xlabel('Component 1')
plt.ylabel('Component 2')
plt.show()
```
运行以上代码,将得到一个可视化的散点图,其中每个点代表一个数据样本,颜色表示样本所属的类别,横坐标和纵坐标分别表示第一主成分和第二主成分的值。通过这个图可以看出,经过PCA降维后,不同类别的数据点更加分散,且不同类别之间的区分度更加明显。
相关问题
python用鸢尾花数据集实现pca
好的,以下是Python代码实现鸢尾花数据集的PCA:
```python
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据标准化
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
# 计算协方差矩阵
cov_mat = np.cov(X_std.T)
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
# 对特征值进行排序
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i]) for i in range(len(eig_vals))]
eig_pairs.sort(reverse=True)
# 选择前两个特征向量
w = np.hstack((eig_pairs[0][1].reshape(4, 1), eig_pairs[1][1].reshape(4, 1)))
# 将数据转换到新的空间
X_pca = X_std.dot(w)
# 将结果可视化
df = pd.DataFrame(data=X_pca, columns=['PC1', 'PC2'])
df['target'] = y
```
代码的实现步骤如下:
1. 加载鸢尾花数据集,并将数据标准化。
2. 计算协方差矩阵。
3. 计算协方差矩阵的特征值和特征向量。
4. 对特征值进行排序,选择前两个特征向量。
5. 将数据转换到新的空间。
6. 将结果可视化。
在这个例子中,我们选择了前两个特征向量进行转换,因此我们可以将数据可视化为二维图形。可以使用Matplotlib等库将结果绘制成散点图等形式。
用python利用鸢尾花数据原理实现pca算法
主成分分析(PCA)是一种常用的维度降低算法,它的主要思想是利用线性变换将高维数据映射到低维空间中。使用PCA算法可以消除高维数据中的冗余、相关信息,从而提高模型训练的效率和准确率。
Python是一种强大的编程语言,拥有丰富的科学计算库和工具。我们可以使用其中的NumPy和Scikit-learn库来实现PCA算法。
首先,需要导入必要的库:
```python
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
```
其中,load_iris函数用于加载鸢尾花数据,返回一个包含样本数据的Bunch对象。
接下来,读取数据并计算协方差矩阵:
```python
iris = load_iris()
X = iris.data
n_samples, n_features = X.shape
mean = np.mean(X, axis=0)
X_centered = X - mean
covariance_matrix = np.cov(X_centered.T)
```
其中,np.mean函数用于计算样本数据的均值,np.cov函数则用于计算协方差矩阵。
接下来,使用numpy的linalg.eig函数计算协方差矩阵的特征值和特征向量:
```python
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
```
其中,eigenvalues包含了协方差矩阵的特征值,eigenvectors则包含了对应的特征向量。
最后,根据特征值排序并选择前k个特征向量,将样本数据投影到选择出的主成分上:
```python
k = 2
idx = eigenvalues.argsort()[::-1][:k]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:,idx]
X_pca = np.dot(X_centered, eigenvectors)
```
其中,argsort函数将特征值从大到小排序,[::-1]则表示逆序,最后选择前k个特征向量。
最后,我们可以使用matplotlib库将降维后的数据可视化:
```python
plt.figure()
for c, i, target_name in zip("rgb", [0, 1, 2], iris.target_names):
plt.scatter(X_pca[iris.target == i, 0], X_pca[iris.target == i, 1], c=c, label=target_name)
plt.legend()
plt.title('PCA of IRIS dataset')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
```
如此便实现了鸢尾花数据的PCA算法。
阅读全文