机器学习系列(五)——matplotlib数据可视化与iris数
2019-06-07 本文已影响0人
Ice_spring
matplotlib基础
折线图
在实际中使用matplotlib并不多,除非要做专业的图像处理,我们更多使用的是它下面的pyplot。
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,50)#(0,10)切分50段
y=np.sin(x)
plt.plot(x,y)
plt.show()
画出的图像如下

可以加入很多渲染,如绘制多条曲线:
cosy=np.cos(x)
siny=y.copy()
plt.plot(x,siny)
plt.plot(x,cosy)
plt.show()
plot会很智能地绘制不同颜色:

颜色color可以手动指定,支持RGB方式和特殊名称:
plt.plot(x,siny,color='#000fff')
plt.plot(x,cosy,color='red')
plt.show()

修改绘制线条样式linestyle:
plt.plot(x,siny,color='#000fff',linestyle='--')
plt.plot(x,cosy,color='red')
plt.show()

手动指定坐标轴范围:
plt.plot(x,siny,color='#000fff',linestyle='--')
plt.plot(x,cosy,color='red')
plt.xlim(-5,15)
plt.ylim(-2,2)
plt.show()

指定坐标轴范围还有另外一种方法:
plt.plot(x,siny,color='#000fff',linestyle='--')
plt.plot(x,cosy,color='red')
plt.axis([-1,12,-2,1])
plt.show()

在轴方向加入名称label:
plt.plot(x,siny,color='#000fff',linestyle='--')
plt.plot(x,cosy,color='red')
plt.xlabel('x-axis')
plt.ylabel('y-value')
plt.show()

图示函数名,在绘制时加入label,图像会自动在合适的位置加入图示:
plt.plot(x,siny,color='#000fff',label='sin(x)')
plt.plot(x,cosy,color='red',label="cos(x)")
plt.legend()
plt.show()

整个图取标题:
plt.plot(x,siny,color='#000fff',label='sin(x)')
plt.plot(x,cosy,color='red',label="cos(x)")
plt.title('my function')
plt.legend()
plt.show()

散点图
基本散点图与plot画图差不多
plt.scatter(x,siny)
plt.show()

一般用于绘制二维特征,而用不同的颜色表示label,方便对数据的分析。
x=np.random.normal(0,1,1000)#mean=0,var=1
y=np.random.normal(0,1,1000)#mean=0,var=1
plt.scatter(x,y,alpha=0.5)#alpha不透明度,1代表完全不透明
plt.show()

注:可以去matplotlib官网或者查看文档方式进行更系统的函数参数学习。
iris数据集可视化探索
iris数剧集
查看数剧集包含什么键值
from sklearn import datasets
iris=datasets.load_iris()#iris在其中实际是一个字典
iris.keys()
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
依次是data,label,label_name,数剧集描述,特征名称,文件名。
iris.data.shape
out:(150, 4)
iris.feature_names#萼片长宽花瓣长宽
out:['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)']
iris.target中的元素只有三个取值0,1,2。shape为(150,),代表鸢尾花三种不同分类
target_names就是实际鸢尾花种类名称。
可视化探索
取data前两列
x=iris.data[:,:2]#只取前两列萼片长、宽
x.shape
out:(150, 2)
绘制x对应的散点图:
plt.scatter(x[:,0],x[:,1])
plt.show()

但实际上上图的信息量很少,下面将不同类别的鸢尾花按不同颜色绘制出来:
y=iris.target
plt.scatter(x[y==0,0],x[y==0,1],color='red')#取特征第0,1列,绘制类别为0的,颜色red
plt.scatter(x[y==1,0],x[y==1,1],color='blue')#取特征第0,1列,绘制类别为1的,颜色blue
plt.scatter(x[y==2,0],x[y==2,1],color='green')#取特征第0,1列,绘制类别为2的,颜色green
plt.xlabel('pedal length')
plt.ylabel('pedal width')
plt.show()

此时已经有一些规律可循了,对于散点图,有时为了标识不同类别,不只可以用不同颜色,还可以用不同样式marker:
y=iris.target
plt.scatter(x[y==0,0],x[y==0,1],color='red',marker='o')#取特征第0,1列,绘制类别为0的,颜色red
plt.scatter(x[y==1,0],x[y==1,1],color='blue',marker='+')#取特征第0,1列,绘制类别为1的,颜色blue
plt.scatter(x[y==2,0],x[y==2,1],color='green',marker='x')#取特征第0,1列,绘制类别为2的,颜色green
plt.xlabel('pedal length')
plt.ylabel('pedal width')
plt.show()

不同类型的数据不只用不同颜色还用了不同样式使分类更加直观。
这里只是取了前两个特征来分类,如果用后两个特征:
x=iris.data[:,2:]#取后两个特征
y=iris.target
plt.scatter(x[y==0,0],x[y==0,1],color='red',marker='o')#取特征第0,1,(原特征里是3,4列),绘制类别为0的,颜色red
plt.scatter(x[y==1,0],x[y==1,1],color='blue',marker='+')#取特征第0,1列,绘制类别为1的,颜色blue
plt.scatter(x[y==2,0],x[y==2,1],color='green',marker='x')#取特征第0,1列,绘制类别为2的,颜色green
plt.xlabel('pedal length')
plt.ylabel('pedal width')
plt.show()

这就是数据可视化的效果,能让我们对数据和分类有一个直观的映像,在后续的处理中也能更加快速选择合适的机器学习算法。