机器学习之数据处理与可视化鸢尾花数据分类|特征属性比较
Posted 上进小菜猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之数据处理与可视化鸢尾花数据分类|特征属性比较相关的知识,希望对你有一定的参考价值。
@[toc]
一,前言
1.1 本文基于原理
大部分的机器学习模型所处理的都是特征,特征通常是输入变量所对应的可用于模型的数值表示。
大部分情况下,收集得到的数据需要经过处理后才能够为算法所使用。通常情况下,一个数据集当中存在很多种不同的特征,其中一些可能是多余的或者与我们要预测的值无关的,可通过数据处理和可视化进行筛选。
特征选择技术的必要性也体现在简化模型、减少训练时间、避免维度爆炸和提升泛化性避免过拟合。
1.2 目的
1.熟悉机器学习之数据处理与可视化方法
2.使用数据处理与可视化方法分析数据特征
1.3 目标以及内容
1.安装scikit-learn机器学习及其相关的python包;
2.在程序里下载鸢尾花数据集;
3.使用matplotlib对鸢尾花数据集的特征两两对比绘图;
4.对绘出的鸢尾花可视化图分析哪些特征可明显区分出鸢尾花类别;
1.4 本文基于环境
1.PC机
2.Windows10
3.Scikit-learn安装包
4.jupyter编辑器或pycharm等python编辑器
二,实验过程
2.1 安装scikit-learn机器学习相关的模块
安装过程略,直接安装scikit-learn模块,可以采用国内镜像安装,比较节省时间。
输入
pip show scikit-learn
检测一下本机环境是否成功安装【scikit-learn】本模块。
2.2 在程序里下载鸢尾花数据集
我们这里采用load_iris数据集,一共包括150行记录,其中前四列为花萼长度,花萼宽度,花瓣长度,花瓣宽度4个识别鸢尾花的属性,sepal_len,sepal_wid,petal_len,petal_wid。
第5列为鸢尾花的类别(包括Setosa,Versicolour,Virginica三类)
代码如下
1.import matplotlib.pyplot as plt
2.from sklearn.datasets import load_iris
3.iris = load_iris()
4.X = iris.data
5.print(X.shape, X)
我们输出X来看一下这150组数据:
2.3 使用matplotlib对鸢尾花数据集的特征两两对比绘图
因为我们会使用figure方法,我们先定义一下大小,让16个子图可以合适的输出。如下代码:
plt.figure(figsize=(44,44))
我们需要输出16个子图,设置变量为4,遍历俩次。
feature_max_num=4
遍历俩次,如下:
for feature in range(feature_max_num):
for feature_other in range(feature_max_num):
可以想象一下:
分别是 0-0,0-1,0-2,0-3,1-0,1-1……
有16种组合,还需取特征值要用。
我们需要设置一下每个子图的位置,可以依次画出这些子图,优点是简单明了,缺点是略显麻烦。
如下代码:
plt.subplot(feature_max_num,feature_max_num,feature*feature_max_num+feature_other +1,frame_on= True)
我们需要思考一下,如果0-0,1-1,2-2,这种属于特殊情况,我们分别处理一下。
plt.scatter的属性我们需要了解一下:如下
- x, y → 散点的坐标
- s → 散点的面积
- c → 散点的颜色(默认值为蓝色,b,其余颜色同plt.plot( ))
- marker→ 散点样式(默认值为实心圆,o,其余样式同plt.plot( )) alpha → 散点透明度([0,1]之间的数,0表示完全透明,1则表示完全不透明)
- linewidths →散点的边缘线宽 edgecolors → 散点的边缘颜色
if feature==feature_other: #特殊情况
如果,feature==feature_other,遍历值相同的话,x, y → 散点的坐标是相同的,这不是很直观,我们直接把x散点的坐标设置一个自增变量,让它从0到49自增。
plt.scatter([i for i in range(50)],X[0:50,feature],color=green,marker=o,label=setosa)
...
...
其他情况的话:x, y → 散点的坐标是不同,正常进行绘制即可
else:
plt.scatter(X[0:50,feature],X[0:50,feature_other],color=green,marker=o,label=setosa)
...
...
上述代码解释:
分别代表x, y → 散点的坐标,因为上文我们有150组目标数据,我们根据不同的特征值从数据集里获取到我们需要目标数据集。进行绘图处理。
需要了解语法:
a[:,1]的含义,即可看懂。
下面我们需要设置X轴和Y轴的标签。语法如下:
- xlabel:类型为字符串,即标签的文本。
- fontdict: dict, 一个字典用来控制标签的字体样式
- labelpad:类型为浮点数,默认值为None,即标签与坐标轴的距离。
- loc:取值范围为left, center, right,默认值为rcParams["xaxis.labellocation"](center),即标签的位置。
- **kwargs:Text 对象关键字属性,用于控制文本的外观属性,如字体、文本颜色等。
plt.xlabel(iris.feature_names[feature])
plt.vlabel(iris.feature_names[feature_other])
最后设置图例位置,输出图像。
plt.legend(loc=best)
plt.show()
效果图如下:
2.4 对绘出的鸢尾花可视化图分析哪些特征可明显区分出鸢尾花类别
根据图0-2 ,1-3层次分明。
可以看出萼片长度和花瓣长度,萼片宽度和花瓣宽度特征可明显区分出鸢尾花类别。
三,附本文涉及到的源码
本文涉及到的源码如下,可以直接运行:
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
print(X.shape, X)
plt.figure(figsize=(44,44))
feature_max_num=4
for feature in range(feature_max_num):
for feature_other in range(feature_max_num):
plt.subplot(feature_max_num,feature_max_num,feature*feature_max_num+feature_other +1,frame_on= True)
if feature==feature_other:
plt.scatter([i for i in range(50)],X[0:50,feature],color=green,marker=o,label=setosa)
plt.scatter([i for i in range(50)],X[50:100,feature],color=blue,marker=x,label=versicolor)
plt.scatter([i for i in range(50)],X[100:,feature],color=red,marker=+,label=Virginica)
else:
plt.scatter(X[0:50,feature],X[0:50,feature_other],color=green,marker=o,label=setosa)
plt.scatter(X[50:100,feature],X[50:100,feature_other],color=blue,marker=x,label=versicolor)
plt.scatter(X[100:,feature],X[100:,feature_other],color="red",marker=+,label=Virginica)
plt.xlabel(iris.feature_names[feature])
plt.vlabel(iris.feature_names[feature_other])
plt.legend(loc=best)
plt.show()
以上是关于机器学习之数据处理与可视化鸢尾花数据分类|特征属性比较的主要内容,如果未能解决你的问题,请参考以下文章
机器学习之分类问题实战(基于UCI Bank Marketing Dataset)