matplotlib可视化之等⾼线图urf()与机器学习中绘制
决策边界
函数功能:⽤来绘制等⾼线和决策边界
调⽤⽅法:urf(X,Y,Z,cmap)
参数说明:
X:⽹格点的横坐标
Y:  ⽹格点的纵坐标
Z:⽹格点的值(等⾼线图的⾼度值)
cmap:颜⾊图,指定Z不同值(不同⾼度)所对应不同的填充⾊
⼀、绘制等⾼线图:
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(2)
matplotlib中subplotx = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
xx, yy = np.meshgrid(x, y)  # ⽣成⽹格点的横坐标xx与纵坐标yy
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)  # 三维中的⾼度值
plt.show()
⼆、对于等⾼线图和⽹格点的理解:
等⾼线图实质上是三维图在⼆维平⾯上的映射,⽽⽹格点就是x,y轴所形成的平⾯上的点,由于z轴是基于⼆维上的,即指⼆维平⾯,⽽整个平⾯可以看成密密⿇⿇的⽹格点堆在⼀起形成的。
可通过np.meshgrid(x,y)函数⽣成⽹格点坐标,函数返回⽹格点的横坐标和纵坐标的两个数组
由上图可知,当⽹格点数⽬多的时候就形成了⾯,x和y相当于⼀维线,然后通过np.meshgrid⽣成⽹格点,可理解为两条线围成⼀个⾯,所有的三维图都是基于⽹格点绘制的
三、在机器学习中绘制决策边界:
在机器学习中经常需要分析观察决策边界,在此举⼀个机器学习的⼩案例并绘制决策边界:
import numpy as np
import pandas as pd
import sklearn
from sklearn import datasets,model_selection
from sklearn.svm import SVC  # ⽀持向量机分类模型
from sklearn.preprocessing import MinMaxScaler # 数据归⼀化函数
def data_plot():
# 使⽤葡萄酒数据集
wine = datasets.load_wine()
wine_data = wine.data
data = pd.DataFrame(wine_data,columns = wine.feature_names)
target = wine.target
# 选取前两个特征作为数据
data = data.iloc[:,:2]
scaler = MinMaxScaler()          # 归⼀化特征函数
data = scaler.fit_transform(data) # 对特征数据进⾏归⼀化
# 根据两个特征数据绘制散点图
plt.scatter(data[:,0],data[:,1],c = target,s= 50, cmap = plasma,edgecolors = 'k')
plt.xlim(-0.5,1.5)
plt.ylim(-0.5,1.5)
plt.show()
# 划分数据集
x_train, x_test, y_train,y_test = ain_test_split(data,target,test_size = 0.2,random_state = 100)    # 创建⽀持向量机模型
svc = SVC()
# 训练模型
svc.fit(x_train,y_train)
print('模型在测试集上的准确率:',svc.score(x_test,y_test))
print('-'*120)
# 构建⽣成⽹格点的函数
def make_meshgrid(x,y):
x_min, x_max = x.min()-0.5,x.max()+0.5
y_min, y_max = y.min()-0.5,y.max()+0.5
xx,yy = np.meshgrid(np.linspace(x_min,x_max,300),np.linspace(y_min,y_max,500))
return xx,yy
# 对⽹格点进⾏预测并得到标签类别
xx,yy = make_meshgrid(data[:,0],data[:,0])
xy = np.c_[xx.ravel(),yy.ravel()]
z = model2.predict(xy).reshape(xx.shape)
# 绘制决策边界
fig = plt.figure()
ax = fig.add_subplot(111)
print('绘制决策边界:')
plt.scatter(data[:,0],data[:,1],c = target,s= 50, cmap = plasma,edgecolors = 'k')
plt.show()
# 调⽤函数
data_plot()