python之sklearn--鸢尾花数据集之数据降维(PCA主成分分析)

python之sklearn--鸢尾花数据集之数据降维(PCA主成分分析)

sklearn库:Scikit - learn(sklearn)是一个用于机器学习的开源 Python 库。它建立在 NumPy、SciPy 和 matplotlib 等其他科学计算库之上,为机器学习的常见任务提供了简单高效的工具,包括分类、回归、聚类、降维、模型选择和预处理等多种算法。

下载sklearn库:pip install scikit-learn


分模块解析


1.导入需要的模块

python 复制代码
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.decomposition import PCA  #PCA:主成分分析

2.加载数据

python 复制代码
iris = datasets.load_iris()  #加载鸢尾花数据集
x = iris.data[:,:2]   #仅考察前两个特征,即鸢尾花花萼的长宽
y = iris.target

3.计算用于绘制二维散点图时,x轴(花萼长度)和y轴(花萼宽度)的坐标范围

通过减去和加上0.5来适当扩展范围,使可视化效果更好。

python 复制代码
x_min,x_max = x[:,0].min() - .5,x[:,0].max() + .5
y_min,y_max = x[:,1].min() - .5,x[:,1].max() + .5

4.绘制二维散点图

python 复制代码
plt.figure(1,figsize=(6,4))  #创建编号为 1,大小为 (6, 4) 的图形
plt.clf()   #清除当前图形窗口中的内容
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Set1,edgecolors='k')   

scatter 函数用于绘制散点图,直观地展示数据点在二维空间中的分布情况通过。

X_reduced[:,0] 表示取这个数据集中每一行的第 1 列数据,作为散点图中每个点的 x 坐标;

X_reduced[:,1] 取每一行的第 2 列数据,作为 y 坐标;

c=y根据样本的类别标签来给点赋予不同的颜色(颜色映射使用plt.cm.Set1)。

cmap=plt.cm.Set1 是 matplotlib 中预定义的一种颜色映射,它能够提供一组离散的、区分度较高的颜色,适合用于区分不同类别等情况。

edgecolors='k' : edgecolor 参数用于指定散点的边缘颜色,'k'表示黑色的--->'black'

绘制二维图

python 复制代码
plt.xlabel('Sepal length')  #x轴标签名称
plt.ylabel('Sepal wigth')   #y轴标签名称
plt.xlim(x_min,x_max)   #设置x坐标范围
plt.ylim(y_min,y_max)   #设置y坐标范围
plt.xticks(())  #去掉x坐标轴上的刻度标记
plt.yticks(())  #去掉y坐标轴上的刻度标记
  1. 进行主成分分析并绘制 3D 散点图
python 复制代码
fig = plt.figure(2,figsize=(6,4))   
#创建编号为 2,大小为 (6, 4) 的图形
plt.clf()
#用于清除当前图形(Figure)对象中的所有内容
# ax = fig.add_subplot(1,1,1,projection = '3d') #这句代码也是可以做3D图形的
ax = Axes3D(fig,elev=-150,azim=110)

该图形窗口中创建一个 3D 坐标轴对象,并且通过elev(仰角)和azim(方位角)参数设置了视角,方便观察 3D 散点图的效果。

python 复制代码
X_reduced = PCA(n_components=3).fit_transform(iris.data)

使用PCA类对鸢尾花数据集的所有特征(这里没有像前面二维可视化那样只取部分特征)进行主成分分析。 将数据降到 3维空间(通过n_components=3指定),得到降维后的数据集X_reduced。

python 复制代码
ax.scatter(X_reduced[:,0],X_reduced[:,1],X_reduced[:,2],c=y,cmap=plt.cm.Set1,edgecolor='k',s=40)    #s是散点的大小
ax.set_title('First three PCA directions')  #设置标题
ax.set_xlabel('1st eigenvector')  #设置x标签--第一特征向量
ax.xaxis.set_ticklabels([])    #去掉x刻度显示
ax.set_ylabel('2nd eigenvector')  #设置y标签--第二特征向量
ax.yaxis.set_ticklabels([])    #去掉y刻度显示
ax.set_zlabel('3rd eigenvector')  #设置z标签--第三特征向量
ax.zaxis.set_ticklabels([])    #去掉z刻度显示
plt.show()   显示图片

完整代码

python 复制代码
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.decomposition import PCA 

iris = datasets.load_iris() 
x = iris.data[:,:2]   
y = iris.target

x_min,x_max = x[:,0].min() - .5,x[:,0].max() + .5
y_min,y_max = x[:,1].min() - .5,x[:,1].max() + .5

plt.figure(1,figsize=(6.4))
plt.clf()   
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Set1,edgecolors='k')   

plt.xlabel('Sepal length')
plt.ylabel('Sepal wigth')
plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)
plt.xticks(())  
plt.yticks(())

fig = plt.figure(2,figsize=(6,4))
plt.clf()

#ax = fig.add_subplot(1,1,1,projection = '3d')
ax = Axes3D(fig,elev=-150,azim=110)
plt.cla()

X_reduced = PCA(n_components=3).fit_transform(iris.data)

ax.scatter(X_reduced[:,0],X_reduced[:,1],X_reduced[:,2],c=y,cmap=plt.cm.Set1,edgecolor='k',s=40)
ax.set_title('First three PCA directions')
ax.set_xlabel('1st eigenvector')
ax.xaxis.set_ticklabels([])   
ax.set_ylabel('2nd eigenvector')
ax.yaxis.set_ticklabels([])
ax.set_zlabel('3rd eigenvector')
ax.zaxis.set_ticklabels([])
plt.show()

运行结果图

1.鸢尾花--iris二维散点图

1.鸢尾花--iris三维散点图

相关推荐
helloworldandy11 分钟前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖42 分钟前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472462 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威2 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ2 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha2 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy2 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
lly2024062 小时前
C++ 文件和流
开发语言
m0_706653232 小时前
分布式系统安全通信
开发语言·c++·算法
喵手3 小时前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集