【任务描述】:
Task Eighteen:
使用 PCA 实现对鸢尾花四维数据(Iris)进行将为处理,并对降维后的数据根据 不同的类别用不同颜色显示在二维坐标系中。
【维度与降维算法PCA】
维度:指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数量。
降维:降维算法中的”降维“,指的是降低特征矩阵中特征的数量。
PCA降维算法:主成分分析技术,sklearn中的一个降维算法。
from sklearn.decomposition import PCA
【数据集查看】
iris = load_iris() # 获取鸢尾花数据集
Y = iris.target # 数据集标签 ['setosa', 'versicolor', 'virginica'],山鸢尾、变色鸢尾、维吉尼亚鸢尾
X = iris.data # 数据集特征 四维,花瓣的长度、宽度,花萼的长度、宽度
【模型训练】
pca = PCA(n_components=2) # 实例化 n_components:降维后需要的维度,即需要保留的特征数量,可视化一般取值2
pca = pca.fit(X) # 拟合模型
X_dr = pca.transform(X) # 获取新矩阵
【结果可视化】
colors = ['red', 'black', 'orange']
plt.figure() # 画布
for i in [0, 1, 2]:
plt.scatter(X_dr[Y == i, 0] # x轴
, X_dr[Y == i, 1] # y轴
, alpha=1 # 图表的填充不透明度(0到1之间)
, c=colors[i] # 颜色
, label=iris.target_names[i] # 标签
)
plt.legend() # 显示图例
plt.title('PCA of IRIS dataset') # 设置标题
plt.show() # 画图
【完整代码】
# -*- coding = utf-8 -*-
# @Time : 2022/3/13 20:39
# @Author : 轻狂
# @Stu_number : 202031061516
# @File : PCA降维算法_鸢尾花案例.py
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
iris = load_iris() # 获取鸢尾花数据集
Y = iris.target # 数据集标签 ['setosa', 'versicolor', 'virginica'],山鸢尾、变色鸢尾、维吉尼亚鸢尾
X = iris.data # 数据集特征 四维,花瓣的长度、宽度,花萼的长度、宽度
# Y
# X
# X.shape
# pd.DataFrame(X)
# 调用PCA
pca = PCA(n_components=2) # 实例化 n_components:降维后需要的维度,即需要保留的特征数量,可视化一般取值2
pca = pca.fit(X) # 拟合模型
X_dr = pca.transform(X) # 获取新矩阵
# X_dr
# 也可以fit_transform一步到位
# X_dr = PCA(2).fit_transform(X)
# 要将三种鸢尾花的数据分布显示在二维平面坐标系中,对应的两个坐标(两个特征向量)应该是三种鸢尾花降维后的
# X_dr[Y == 0, 0] #这里是布尔索引,即取出Y=0的行的第0列
# 对三种鸢尾花分别绘图
colors = ['red', 'black', 'orange']
# iris.target_names
plt.figure() # 画布
for i in [0, 1, 2]:
plt.scatter(X_dr[Y == i, 0] # x轴
, X_dr[Y == i, 1] # y轴
, alpha=1 # 图表的填充不透明度(0到1之间)
, c=colors[i] # 颜色
, label=iris.target_names[i] # 标签
)
plt.legend() # 显示图例
plt.title('PCA of IRIS dataset') # 设置标题
plt.show() # 画图
【总结】