【使用 PCA 实现对鸢尾花四维数据(Iris)进行降维处理】

【任务描述】:

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 实现对鸢尾花四维数据(Iris)进行降维处理】_第1张图片

【使用 PCA 实现对鸢尾花四维数据(Iris)进行降维处理】_第2张图片

 【使用 PCA 实现对鸢尾花四维数据(Iris)进行降维处理】_第3张图片

 【模型训练】

pca = PCA(n_components=2)  # 实例化 n_components:降维后需要的维度,即需要保留的特征数量,可视化一般取值2
pca = pca.fit(X)  # 拟合模型
X_dr = pca.transform(X)  # 获取新矩阵

【使用 PCA 实现对鸢尾花四维数据(Iris)进行降维处理】_第4张图片

 【结果可视化】

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()  # 画图

【使用 PCA 实现对鸢尾花四维数据(Iris)进行降维处理】_第5张图片

【完整代码】

# -*- 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()  # 画图

【总结】

PCA优缺点

优点

  • 减少特征空间维度,降低了数据复杂度
  • 方便模型拟合

缺点

  • 计算成本高
  • 可能会降低模型精度,因为会丢弃一些信息
  • 转换过程复杂,结果难以解释
  • 对异常值敏感

你可能感兴趣的:(Python大数据,python)