我用下面的代码绘制了一个等高线图,它指示了SVC估计器在2D轴上的分离超平面。在
X,y= make_circles(n_samples=50,factor=.1,noise=.1)
x_fit=np.linspace(-1.5,1.5,10)
y_fit=np.linspace(-1.5,1.5,10)
Y,XX=np.meshgrid(x_fit,y_fit)
xy=np.vstack([XX.ravel(),Y.ravel()]).T
P=clf.decision_function(xy).reshape(XX.shape)
plt.contour(XX,Y,P,colors="k",levels=[-1,0,1],alpha=0.5,linestyles=["--","-","--"])
问题
基于this question和伊利亚诉舒罗夫的回答,对我来说还有一个问题。我知道,X和Y提供X和Y值,Z提供每个xy坐标的“深度”,因此必须是二维的。此外,X和Y值plt.轮廓()函数可以是1D或2D(如果是1D,meshgrid在内部计算)。在
但是X和Y是2D的好处/原因是什么? 因为实际上X和Y的“第二维度”不能在2D轴上绘制。那么,X和Y是2D的“算法性能”原因是什么还是什么原因?在
等高线图并不是专为Classifier绘制超平面而设计的。它表示具有二维格式的三维曲面;或绘制二维区域的高程。因此,
plt.contour()
必须以某种方式理解/了解覆盖整个区域的高程。一种方法或当前的方法是为覆盖二维区域的一组点提供一组高程。你提供的越多,最终的等高线图就越好。当提供一维x
和y
时,它表示一条线而不是一个区域,这不能用来插值二维区域。在另一种绘制超平面的方法是自己计算精确的平面。然后可以使用一维线空间绘制超平面。但我不认为这会比使用
plt.contour()
更容易,因为plt.contour()
通过插值模拟完成了艰难的计算。在编辑:在}一起工作?在
plt.contour()
中,Z
如何与X
和{对于}一起工作,需要一些假设。在
Z
与X
和{X
和Y
是二维的,Z
中的值是由X
和Y
中的相应值(按索引相同位置)指定的点的深度。在X
和Y
是一维的,它将首先转换为网格网格,如the source code所示。然后其余的工作方式与上面解释的一样。在因此,对于您的具体情况,使用}可以得到相同的结果,因为
x_fit
和{plt.contour()
为您生成了网格网格。只要你了解机制,任何一种方式都可以。我要说的唯一一件事是,如果您最终生成了用于计算P
的网格,为什么不使用meshgrid来避免假设/歧义呢?在相关问题 更多 >
编程相关推荐