PCA实现鸢尾花数据集降维可视化

基于《Python机器学习》——北京理工大学 学习笔记

PCA实现高维数据可视化

数据来源

http://archive.ics.uci.edu/ml/datasets/Iris

主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处PCA可以把具有相关性的高维变量合成为线性无关的低维变量,称为主成分。主成分能够尽可能保留原始数据的信息。

目标 :已知鸢尾花数据是4维的,共三类样本。使用PCA实现对鸢尾花数据进行降维,实现在二维平面上的可视化。

原理 :矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。

import matplotlib.pyplot as plt                  #导入相关工程包
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
 
data = load_iris()                               #加载鸢尾花数据
y = data.target                                 #使用Y表示数据集中的标签
X = data.data                                   #使用X表示数据集中的属性数据
pca = PCA(n_components=2)                        #加载PCA算法,设置降维后主成分数为2
reduced_X = pca.fit_transform(X)                  #对原始数据进行降维并保存在reduced_X中
 
red_x, red_y = [], []                          #第一类数据点
blue_x, blue_y = [], []                         #第二类数据点
green_x, green_y = [], []                         #第三类数据点
 
for i in range(len(reduced_X)):                   #利用for语句按类别把鸢尾花数据保存在不同列表中
    if y[i] == 0:
        red_x.append(reduced_X[i][0])
        red_y.append(reduced_X[i][1])
    elif y[i] == 1:
        blue_x.append(reduced_X[i][0])
        blue_y.append(reduced_X[i][1])
    else:
        green_x.append(reduced_X[i][0])
        green_y.append(reduced_X[i][1])
 
plt.scatter(red_x, red_y, c='r', marker='x')          #降维后数据点的可视化
plt.scatter(blue_x, blue_y, c='b', marker='D')
plt.scatter(green_x, green_y, c='g', marker='.')
plt.show()

主要参数

  1. n_components:指定主成分的个数,即降维后数据的维度。
  2. svd_solver :设置特征值分解的方法,默认为‘auto’,其他可选有‘full’, ‘arpack’, ‘randomized’。

plt.scatter()用法:
函数的原型:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)

参数的解释:

x,y:表示的是大小为(n,)的数组,也就是我们即将绘制散点图的数据点

s:是一个实数或者是一个数组大小为(n,),这个是一个可选的参数。

c:表示的是颜色,也是一个可选项。默认是蓝色’b’,表示的是标记的颜色,或者可以是一个表示颜色的字符,或者是一个长度为n的表示颜色的序列等等,感觉还没用到过现在不解释了。但是c不可以是一个单独的RGB数字,也不可以是一个RGBA的序列。可以是他们的2维数组(只有一行)。

marker:表示的是标记的样式,默认的是’o’。

原文链接:https://blog.csdn.net/m0_37393514/article/details/81298503


  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值