关于等高线绘制和全平面坐标节点生成

  要明白机器学习画图的一个思路,就是全局生成坐标节点,然后让模型进行学习,这样可以得到一个全局的效果图(比如等高线),然后再把指定的数据扔到模型中让其学习,获取分类,然后再把这些局部点绘制出来,和整体的效果图进行比较,将会发现非常吻合。

  

 1 from matplotlib.colors import ListedColormap
 2 from pprint import pprint
 3 def plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True,
 4                            legend=False, plot_training=True):
 5     # python经典的生成全面点的实现
 6     x1s = np.linspace(axes[0], axes[1], 100)
 7     x2s = np.linspace(axes[2], axes[3], 100)
 8     x1, x2 = np.meshgrid(x1s, x2s)
 9     X_new = np.c_[x1.ravel(), x2.ravel()] # 所有的点生成,本身是一个二维数组
10     # 预测种类,clf.repdict(X_new)其实是一个行向量(X_new每个二元坐标组将会对应一个分类,所以X_new是二维,但是y_pred是一维),
11     # reshape就是要转换成和X1相对应的形式,x1是(100, 100)的二维数组;但是,问题是为什么要reshape一下?因为在下面的等高线绘制
12     # 的内部处理中,将会生成一个(100, 100)的点集,然后根据类型进行等高线着色,那么根据每个点集的索引(比如[0][1])找到对应的
13     # 分类进行,然后决定着色种类,所以y_pred需要进行reshape为二维数组。
14     y_pred = clf.predict(X_new).reshape(x1.shape)
15
16
17     print("len(x1):{},x1.size:{}".format(len(x1), x1.size))
18     pprint(x1)
19     print("len(x2):{},x2.size:{}".format(len(x2), x2.size))
20     pprint(x2)
21     print("len(X_new): {}; X_new.size: {}".format(len(X_new), X_new.size))
22     pprint(X_new)
23     tmp = clf.predict(X_new)
24     print("len(ctrl.predict(X_new)): {}; ctrl.predict(X_new).size: {}".format(len(tmp), tmp.size))
25     pprint(tmp)
26     pprint("x1.shape:")
27     pprint(x1.shape)
28     tmp2 = tmp.reshape(x1.shape)
29     print("len(ctrl.predict(tmp2.reshape)): {}; ctrl.predict(tmp2.reshape).size: {}".format(len(tmp2),
30                                                                                             tmp2.size))
31     pprint(tmp2)
32
33
34
35
36
37     custom_cmap = ListedColormap([‘#fafab0‘,‘#9898ff‘,‘#a0faa0‘])
38     plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap, linewidth=10)
39     if not iris:
40         custom_cmap2 = ListedColormap([‘#7d7d58‘,‘#4c4c7f‘,‘#507d50‘])
41         plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)
42     # 上面做的事情是全局的绘制等高线,那么对于指定数据(作为入参)的处理,是在下面进行的,指定数据绘制的结果应该是和等高线吻合的
43     if plot_training:
44         plt.plot(X[:, 0][y==0], X[:, 1][y==0], "yo", label="Iris-Setosa")
45         plt.plot(X[:, 0][y==1], X[:, 1][y==1], "bs", label="Iris-Versicolour")
46         plt.plot(X[:, 0][y==2], X[:, 1][y==2], "g^", label="Iris-Virginica")
47         plt.axis(axes)
48     if iris:
49         plt.xlabel("Petal length", fontsize=14)
50         plt.ylabel("Petal width", fontsize=14)
51     else:
52         plt.xlabel(r"$x_1$", fontsize=18)
53         plt.ylabel(r"$x_2$", fontsize=18, rotation=0)
54     if legend:
55         plt.legend(loc="lower right", fontsize=14)
56
57 plt.figure(figsize=(11, 4))
58 plot_decision_boundary(tree_clf, X, y)
59 plt.plot([2.45, 2.45], [0, 3], "k-", linewidth=2)
60 plt.plot([2.45, 7.5], [1.75, 1.75], "k--", linewidth=2)
61 plt.plot([4.95, 4.95], [0, 1.75], "k:", linewidth=2)
62 plt.plot([4.85, 4.85], [1.75, 3], "k:", linewidth=2)
63 plt.text(1.40, 1.0, "Depth=0", fontsize=15)
64 plt.text(3.2, 1.80, "Depth=1", fontsize=13)
65 plt.text(4.05, 0.5, "(Depth=2)", fontsize=11)
66
67 # save_fig("decision_tree_decision_boundaries_plot")
68 plt.show()

输出内容:

len(x1):100,x1.size:10000
array([[0.        , 0.07575758, 0.15151515, ..., 7.34848485, 7.42424242,
        7.5       ],
       [0.        , 0.07575758, 0.15151515, ..., 7.34848485, 7.42424242,
        7.5       ],
       [0.        , 0.07575758, 0.15151515, ..., 7.34848485, 7.42424242,
        7.5       ],
       ...,
       [0.        , 0.07575758, 0.15151515, ..., 7.34848485, 7.42424242,
        7.5       ],
       [0.        , 0.07575758, 0.15151515, ..., 7.34848485, 7.42424242,
        7.5       ],
       [0.        , 0.07575758, 0.15151515, ..., 7.34848485, 7.42424242,
        7.5       ]])
len(x2):100,x2.size:10000
array([[0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.        ],
       [0.03030303, 0.03030303, 0.03030303, ..., 0.03030303, 0.03030303,
        0.03030303],
       [0.06060606, 0.06060606, 0.06060606, ..., 0.06060606, 0.06060606,
        0.06060606],
       ...,
       [2.93939394, 2.93939394, 2.93939394, ..., 2.93939394, 2.93939394,
        2.93939394],
       [2.96969697, 2.96969697, 2.96969697, ..., 2.96969697, 2.96969697,
        2.96969697],
       [3.        , 3.        , 3.        , ..., 3.        , 3.        ,
        3.        ]])
len(X_new): 10000; X_new.size: 20000
array([[0.        , 0.        ],
       [0.07575758, 0.        ],
       [0.15151515, 0.        ],
       ...,
       [7.34848485, 3.        ],
       [7.42424242, 3.        ],
       [7.5       , 3.        ]])
len(ctrl.predict(X_new)): 10000; ctrl.predict(X_new).size: 10000
array([0, 0, 0, ..., 2, 2, 2])
u‘x1.shape:‘
(100L, 100L)
len(ctrl.predict(tmp2.reshape)): 100; ctrl.predict(tmp2.reshape).size: 10000
array([[0, 0, 0, ..., 1, 1, 1],
       [0, 0, 0, ..., 1, 1, 1],
       [0, 0, 0, ..., 1, 1, 1],
       ...,
       [0, 0, 0, ..., 2, 2, 2],
       [0, 0, 0, ..., 2, 2, 2],
       [0, 0, 0, ..., 2, 2, 2]])


  

原文地址:https://www.cnblogs.com/xiashiwendao/p/9826451.html

时间: 2024-10-27 07:26:06

关于等高线绘制和全平面坐标节点生成的相关文章

matlab等高线绘制

参考代码: figure;// Figure建立新的图形 z=double(z); x=1:length(z); y=x; [X2,Y2]=meshgrid(x,y); subplot(121); [C,h]=contour(X2,Y2,z);// contour函数在MATLAB中,该函数用于绘制矩阵的等高线. axis([0 2300 0 2300 ]);//设置图像的坐标轴 title('距月面2400m处的等高线图','FontSize',14); colormap(gray); z1=

MyEclipse添加XML的xsd文件和dtd文件(自动补全xml节点代码)

因为自己遇到这个问题,并且也百度了,关于这个设置问题也有许多,但还是自己梳理一下,配图说明. 配置xsd 这个以配置spring-context-2.5.xsd为例说明: 先注册 .进入:Window   ->  Preferences  ->  MyEclipse  ->Files and Editors -> XML -> XML Catalog ,最终界面如下图: 选中“User Specified Entries” 点击右边的“Add” 点击“File System”

最全省份城市生成代码

1.进入国家统计局官网 查找最新省市区数据 http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html 2.将数据放到txt文件,然后我们可以看到省份都是以 0000  结尾,市都是以 00 结尾,转为Json代码如下 class Program { static void Main(string[] args) { var provinces = new List<Province>(); var citys

等高线生成算法(转载)

等高线生成算法 输入:离散的采样点坐标和高度值(x_0,y_0,value_0),(x_1,y_1,value_1)......(x_n, y_n, value_n) 输出:等高线图,如下所示 wiki上的Marching squares算法对此有很好的说明,我也是按照wiki上面的步骤来实现这个算法的,下面对该算法的步骤进行简要说明. 输入参数: 1.点的集合(x_0,y_0,value_0),(x_1,y_1,value_1)......(x_n, y_n, value_n) ; 2.高度值

等高线生成算法

输入:离散的采样点坐标和高度值(x_0,y_0,value_0),(x_1,y_1,value_1)......(x_n, y_n, value_n) 输出:等高线图,如下所示 wiki上的Marching squares算法对此有很好的说明,我也是按照wiki上面的步骤来实现这个算法的,下面对该算法的步骤进行简要说明. 输入参数: 1.点的集合(x_0,y_0,value_0),(x_1,y_1,value_1)......(x_n, y_n, value_n) ; 2.高度值数组,即每条等高

zTree异步生成数据时无法获取到子节点的选中状态

最近在项目中遇到一个问题,需求如下: 根据选中不同的人员(ID)向后台发送ajax请求,通过返回的数据来生成该人员的权限访问树,该树目录最少为3级目录,在生成的时候会自动勾选上次保存过的选中状态,点击保存后会将选中状态发送给后端用于保存.(zTree的api参考网站http://www.ztree.me/v3/api.php) 遇到的bug: 用户必须再次点击已选中的根目录,并重新选中一次才能在保存的时候将其根目录及所有选中的子节点ID号提供给后端,如果用户不做任何操作直接点击保存,则只能获取到

python+matplotlib 绘制等高线

python+matplotlib 绘制等高线 步骤有七: 有一个m*n维的矩阵(data),其元素的值代表高度 构造两个向量:x(1*n)和y(1*m).这两个向量用来构造网格坐标矩阵(网格坐标矩阵m*n维,可见与data同) 构造网格坐标矩阵X,Y 进行颜色填充 画等高线 等高线的描述 删掉坐标系 1. 构造一下高度矩阵: def f(x,y): """ 计算高度的函数 :param x: 向量 :param y: 向量 :return: dim(x)*dim(y)维的矩

用OpenGL进行曲线、曲面的绘制

实验目的 1)理解Bezier曲线.曲面绘制的基本原理:理解OpenGL中一维.二维插值求值器的用法. 2)掌握OpenGL中曲线.曲面绘图的方法,对比不同参数下的绘图效果差异: 代码1:用四个控制点绘制一条三次Bezier曲线 #include "stdafx.h" #include <stdlib.h> #include <time.h> #include <GL/glut.h> //4个控制点的3D坐标--z坐标全为0 GLfloat ctrl

第八章:节点模块

DOM节点操作占我们前端工作很大一部分,其节点的操作又占50%以上.由于选择器引擎的出现,让繁琐的元素选择简单化,并且一下子返回一大堆元素,这个情景时刻暗示着我们操作元素就像css为元素添加样式那样,一操作就操作一组元素. 一些大胆的API设计被提出来.当然我们认为时髦新颖的设计其实都是很久以前被忽略的设计或者其它领域的设计.例如:集化操作,这是数据库层里边的ROM就有的.链式操作,javascript对象基于原型的构造为它大开方便之门.信息密集的DSL,有rails这座高峰让大家崇拜.jQue