机器学习利用PCA完成鸢尾花数据集的降维与分类

作业

利用PCA,完成鸢尾花数据集的降维与分类(分类算法自己挑选,并给出比较),并给出所选算法与分类准确率直接的可视化对比图(曲线或柱状图均可)。

代码

原始(未降维)

# 读取数据
df = pd.read_csv('iris.csv')
def get_xycs(df):
    # 平面坐标系的位置只能表示2维数据
    x = df['sepal.length']  # x 轴坐标
    y = df['sepal.width']  # y 轴坐标
    c = df['petal.length'].map({'Setosa':'r','Versicolor':'g','Virginica':'b'})  # 颜色color
    s = df['petal.width']  # 大小size
    return x, y, c, s
# 根据X,Y值画散点图, 用颜色的深浅表示花萼的长度,用大小表示花萼的宽度, 每组数据只能是一种点样式
plt.figure(figsize=(5, 5), dpi=100)
# plt.scatter(x,y, c=c, s=50)  # 可以是标量,那么所有的点都一样
for sp in df['species'].unique():
    x, y, c, s = get_xycs(df[df['species'] == sp])
    plt.scatter(x, y, s=s * 30, cmap=plt.cm.seismic, label=sp)

plt.legend()
plt.show()

结果

在这里插入图片描述

利用PCA降维与分类

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
X, y = load_iris().data, load_iris().target
pca = PCA(n_components = 2)
x = StandardScaler().fit_transform(X)
pca_iris = pca.fit_transform(x)
pca_df = pd.DataFrame(pca_iris, columns=['pca1', 'pca2']) 
pca_df['target'] = y
x = StandardScaler().fit_transform(X)
fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = [0, 1, 2]
colors = ['r', 'g', 'b']
for target, color in zip(targets,colors):
    indicesToKeep = pca_df['target'] == target
    ax.scatter(pca_df.loc[indicesToKeep, 'pca1']
               , pca_df.loc[indicesToKeep, 'pca2']
               , c = color
               , s = 50)
ax.legend(targets)
ax.grid()

结果

在这里插入图片描述

问题

如何将四个属性值在二维平面展示

解决

这里所谓的降维, 更为准确的说应该是主成分分析, 而不是四维数据投影至一个平面上与二维数据比较。就是初始数据集,随机选两个属性,绘图,之后提取主成分分析后的两个属性,再绘制图。

心得体会

主成分分析, 数据之间的距离相对增大, 等有利于进行数据聚类分析, 准确率也有所提高。

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

  • 19
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞滕人生TYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值