numpy.meshgrid用法(懂的可略过此部分)
numpy.meshgrid(x, y) | 从两个坐标向量返回坐标矩阵 |
---|---|
参数 | x, y : ndarray,两个一维数组表示网格的x和y坐标 |
返回值 | X, Y : ndarray,对于长度为Nx=len(x)和Ny=len(y)的向量x、y,返回X、Y,其中X和Y是(Ny, Nx)形状的数组,其中x和y的元素重复出现,以沿着x的第一个维度填充矩阵,第二个维度填充矩阵。 |
meshgrid对于计算网格上的函数非常有用。
如下给出一个非常详细的例子。
import numpy as np
x = np.arange(-5, 0, 1)
y = np.arange(6, 9, 1)
xx, yy = np.meshgrid(x, y)
z = np.c_[xx.ravel(),yy.ravel()]
print("x:\n",x)
print("y:\n",y)
print("xx:\n",xx)
print("yy:\n",yy)
print("np.meshgrid(x, y):\n",np.meshgrid(x, y))
print("xx.ravel():\n",xx.ravel())
print("yy.ravel():\n",yy.ravel())
print("z:\n",z)
决策树
使用酒的数据集(酒数据集详情)构建决策树,设置决策树的最大深度为1时得到如下结果。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
#导入tree模型和数据加载工具
from sklearn import tree,datasets
#导入数据拆分工具
from sklearn.model_selection import train_test_split
wine=datasets.load_wine()
#只选取数据集前两个特征
X=wine.data[:,:2]
y=wine.target
#将数据集拆分为训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y)
#设定决策树分类器最大深度为1
clf=tree.DecisionTreeClassifier(max_depth=1)
#拟合训练数据集
clf.fit(X_train,y_train)
print(clf)
print(clf.score(X_test, y_test))
#定义图像中分区的颜色和散点的颜色
cmap_light=ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
#分别用样本的两个特征值创建图像和横轴、纵轴
x_min,x_max=X_train[:,0].min()-1,X_train[:,0].max()+1
y_min,y_max=X_train[:,1].min()-1,X_train[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))#从两个坐标向量返回坐标矩阵
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
#给每个分类中的样本分配不同的颜色
Z=Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)
#用散点画出样本
plt.scatter(X[:,0],X[:,1],c=y,cmap=cmap_bold,edgecolor='k',s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifieer:(max_depth=1)")
plt.show()
分类器只分出了两类,将决策树最大深度设置为3,分类结果如下。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
#导入tree模型和数据加载工具
from sklearn import tree,datasets
#导入数据拆分工具
from sklearn.model_selection import train_test_split
wine=datasets.load_wine()
#只选取数据集前两个特征
X=wine.data[:,:2]
y=wine.target
#将数据集拆分为训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y)
#设定决策树分类器最大深度为3
clf=tree.DecisionTreeClassifier(max_depth=3)
#拟合训练数据集
clf.fit(X_train,y_train)
print(clf)
print(clf.score(X_test, y_test))
#定义图像中分区的颜色和散点的颜色
cmap_light=ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
#分别用样本的两个特征值创建图像和横轴、纵轴
x_min,x_max=X_train[:,0].min()-1,X_train[:,0].max()+1
y_min,y_max=X_train[:,1].min()-1,X_train[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))#从两个坐标向量返回坐标矩阵
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
#给每个分类中的样本分配不同的颜色
Z=Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)
#用散点画出样本
plt.scatter(X[:,0],X[:,1],c=y,cmap=cmap_bold,edgecolor='k',s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifieer:(max_depth=3)")
plt.show()
最大深度为3时,能分出3个类别,继续调整最大深度为5,得到如下结果。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
#导入tree模型和数据加载工具
from sklearn import tree,datasets
#导入数据拆分工具
from sklearn.model_selection import train_test_split
wine=datasets.load_wine()
#只选取数据集前两个特征
X=wine.data[:,:2]
y=wine.target
#将数据集拆分为训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y)
#设定决策树分类器最大深度为5
clf=tree.DecisionTreeClassifier(max_depth=5)
#拟合训练数据集
clf.fit(X_train,y_train)
print(clf)
print(clf.score(X_test, y_test))
#定义图像中分区的颜色和散点的颜色
cmap_light=ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
#分别用样本的两个特征值创建图像和横轴、纵轴
x_min,x_max=X_train[:,0].min()-1,X_train[:,0].max()+1
y_min,y_max=X_train[:,1].min()-1,X_train[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))#从两个坐标向量返回坐标矩阵
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
#给每个分类中的样本分配不同的颜色
Z=Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)
#用散点画出样本
plt.scatter(X[:,0],X[:,1],c=y,cmap=cmap_bold,edgecolor='k',s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifieer:(max_depth=5)")
plt.show()
graphviz(Anaconda-python安装graphviz及报错解决)帮助演示决策树的工作过程,绘制最大深度为3时的图形如下。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
#导入tree模型和数据加载工具
from sklearn import tree,datasets
#导入数据拆分工具
from sklearn.model_selection import train_test_split
wine=datasets.load_wine()
#只选取数据集前两个特征
X=wine.data[:,:2]
y=wine.target
#将数据集拆分为训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y)
#设定决策树分类器最大深度为3
clf=tree.DecisionTreeClassifier(max_depth=3)
#拟合训练数据集
clf.fit(X_train,y_train)
print(clf)
print(clf.score(X_test, y_test))
#定义图像中分区的颜色和散点的颜色
cmap_light=ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
#分别用样本的两个特征值创建图像和横轴、纵轴
x_min,x_max=X_train[:,0].min()-1,X_train[:,0].max()+1
y_min,y_max=X_train[:,1].min()-1,X_train[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))#从两个坐标向量返回坐标矩阵
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
#给每个分类中的样本分配不同的颜色
Z=Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)
#用散点画出样本
plt.scatter(X[:,0],X[:,1],c=y,cmap=cmap_bold,edgecolor='k',s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifieer:(max_depth=3)")
plt.show()
#导入graphviz工具
import graphviz
#导入决策树中输出graphviz的接口
from sklearn.tree import export_graphviz
#选择最大深度为3的分类模型
export_graphviz(clf,out_file="C:/Users/Administrator/Desktop/wine.dot",class_names=wine.target_names,feature_names=wine.feature_names[:2],impurity=False,filled=True)
#打开一个dot文件
with open("C:/Users/Administrator/Desktop/wine.dot") as f:
dot_graph=f.read()
#显示dot文件中的图形
graphviz.Source(dot_graph)
此时,发现桌面上多了一个文件。
打开后看到代码文件如下。
此时,打开cmd窗口,切换到桌面,输入"dot -Tpng wine.dot -o wine.png",如下图。
发现桌面多了如下文件。
打开后,可看到如下的决策树。