X值和Y值的二维等值线图

2024-04-26 08:06:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我用下面的代码绘制了一个等高线图,它指示了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=["--","-","--"])

enter image description here

问题

基于this question和伊利亚诉舒罗夫的回答,对我来说还有一个问题。我知道,X和Y提供X和Y值,Z提供每个xy坐标的“深度”,因此必须是二维的。此外,X和Y值plt.轮廓()函数可以是1D或2D(如果是1D,meshgrid在内部计算)。在

但是X和Y是2D的好处/原因是什么? 因为实际上X和Y的“第二维度”不能在2D轴上绘制。那么,X和Y是2D的“算法性能”原因是什么还是什么原因?在


Tags: 代码makenp绘制原因pltfitxy
1条回答
网友
1楼 · 发布于 2024-04-26 08:06:29

等高线图并不是专为Classifier绘制超平面而设计的。它表示具有二维格式的三维曲面;或绘制二维区域的高程。因此,plt.contour()必须以某种方式理解/了解覆盖整个区域的高程。一种方法或当前的方法是为覆盖二维区域的一组点提供一组高程。你提供的越多,最终的等高线图就越好。当提供一维xy时,它表示一条线而不是一个区域,这不能用来插值二维区域。在

另一种绘制超平面的方法是自己计算精确的平面。然后可以使用一维线空间绘制超平面。但我不认为这会比使用plt.contour()更容易,因为plt.contour()通过插值模拟完成了艰难的计算。在

编辑:在plt.contour()中,Z如何与X和{}一起工作?在

对于ZX和{}一起工作,需要一些假设。在

  • 如果XY是二维的,Z中的值是由XY中的相应值(按索引相同位置)指定的点的深度。在
  • 如果XY是一维的,它将首先转换为网格网格,如the source code所示。然后其余的工作方式与上面解释的一样。在

因此,对于您的具体情况,使用x_fit和{}可以得到相同的结果,因为plt.contour()为您生成了网格网格。只要你了解机制,任何一种方式都可以。我要说的唯一一件事是,如果您最终生成了用于计算P的网格,为什么不使用meshgrid来避免假设/歧义呢?在

相关问题 更多 >