Python 如何从k近邻中提取边界值 如何仅从.predict中提取或返回边界值 MRE 将熊猫作为pd导入 将numpy作为np导入 从sklearn.dataset导入加载 从sklearn.neighbors导入KNeighborsClassifier 导入seaborn作为sns 将matplotlib.pyplot作为plt导入 从matplotlib.colors导入ListedColormap #准备数据 iris=加载_iris() X=iris.data y=iris.target df=pd.DataFrame(X,columns=iris.feature\u名称) df['label']=y 物种地图=dict(zip(范围(3),鸢尾。目标名称)) df['species']=df.label.map(物种地图) df=df.reindex([‘萼片长度(cm)’,‘萼片宽度(cm)’,‘花瓣长度(cm)’,‘花瓣宽度(cm)’,‘品种’,‘标签’],轴=1) #实例化模型 knn=Kneighbors分类器(n_=6) #预测“花瓣长度(cm)”和“花瓣宽度(cm)” knn.fit(测向iloc[:,2:4],测向标签) h=.02#网格中的步长 #为等高线图创建颜色贴图 cmap_light=ListedColormap(列表(sns.color_调色板('pastel',n_colors=3))) #绘制决策边界。 #为此,我们将为网格中的每个点[x_min,x_max]x[y_min,y_max]指定一种颜色。 x_min,x_max=df['petal length(cm)]。min()-1,df['petal length(cm)]。max()+1 y_min,y_max=df['花瓣宽度(cm)]。min()-1,df['花瓣宽度(cm)]。max()+1 xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h)) Z=knn.predict(np.c_uuxx.ravel(),yy.ravel())。重塑(xx.shape) #创建绘图 图,ax=plt.子批次() #添加数据点 sns.散点图(数据=df,x='花瓣长度(厘米)',y='花瓣宽度(厘米)',色调='物种',ax=ax,边缘颜色='k') #在地图上添加决策边界计数 最大轮廓f(xx,yy,Z,cmap=cmap_光,α=0.4) #传奇 lgd=plt.图例(bbox\u至\u锚定=(1.05,1),位置=左上角') plt.show() 结果图

Python 如何从k近邻中提取边界值 如何仅从.predict中提取或返回边界值 MRE 将熊猫作为pd导入 将numpy作为np导入 从sklearn.dataset导入加载 从sklearn.neighbors导入KNeighborsClassifier 导入seaborn作为sns 将matplotlib.pyplot作为plt导入 从matplotlib.colors导入ListedColormap #准备数据 iris=加载_iris() X=iris.data y=iris.target df=pd.DataFrame(X,columns=iris.feature\u名称) df['label']=y 物种地图=dict(zip(范围(3),鸢尾。目标名称)) df['species']=df.label.map(物种地图) df=df.reindex([‘萼片长度(cm)’,‘萼片宽度(cm)’,‘花瓣长度(cm)’,‘花瓣宽度(cm)’,‘品种’,‘标签’],轴=1) #实例化模型 knn=Kneighbors分类器(n_=6) #预测“花瓣长度(cm)”和“花瓣宽度(cm)” knn.fit(测向iloc[:,2:4],测向标签) h=.02#网格中的步长 #为等高线图创建颜色贴图 cmap_light=ListedColormap(列表(sns.color_调色板('pastel',n_colors=3))) #绘制决策边界。 #为此,我们将为网格中的每个点[x_min,x_max]x[y_min,y_max]指定一种颜色。 x_min,x_max=df['petal length(cm)]。min()-1,df['petal length(cm)]。max()+1 y_min,y_max=df['花瓣宽度(cm)]。min()-1,df['花瓣宽度(cm)]。max()+1 xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h)) Z=knn.predict(np.c_uuxx.ravel(),yy.ravel())。重塑(xx.shape) #创建绘图 图,ax=plt.子批次() #添加数据点 sns.散点图(数据=df,x='花瓣长度(厘米)',y='花瓣宽度(厘米)',色调='物种',ax=ax,边缘颜色='k') #在地图上添加决策边界计数 最大轮廓f(xx,yy,Z,cmap=cmap_光,α=0.4) #传奇 lgd=plt.图例(bbox\u至\u锚定=(1.05,1),位置=左上角') plt.show() 结果图,python,numpy,matplotlib,scikit-learn,knn,Python,Numpy,Matplotlib,Scikit Learn,Knn,期望图 不是颜色或样式,只是它只有决策边界和数据点 资源 所以这个问题不能回答问题 这显示了如何在不填充绘图的情况下绘制决策边界,但没有一个答案显示了如何提取决策边界值。 plt.轮廓(xx,yy,Z,cmap=plt.cm.成对) 自我回答 我已经提供了一个解决方案,但我不确定这是否是最好的解决方案。我当然愿意接受其他选择 也就是说,我不想要一个在tourtf或pcolormesh绘图中着色的解决方案 最好的解决方案将简洁地只提取决策边界值 这是我提出的一

期望图
  • 不是颜色或样式,只是它只有决策边界和数据点

资源
所以这个问题不能回答问题
    • 这显示了如何在不填充绘图的情况下绘制决策边界,但没有一个答案显示了如何提取决策边界值。
      • plt.轮廓(xx,yy,Z,cmap=plt.cm.成对)
自我回答
  • 我已经提供了一个解决方案,但我不确定这是否是最好的解决方案。我当然愿意接受其他选择
  • 也就是说,我不想要一个在
    tourtf
    pcolormesh
    绘图中着色的解决方案
  • 最好的解决方案将简洁地只提取决策边界值
      • 这是我提出的一个解决方案,它沿
        Z
        的两个轴使用
        .predict
        结果。这个想法是,每当结果发生变化时,这就是一个决策边界。
        • 使用
          .diff
          从自身减去
          Z
          ,移位1
        • 使用
          np.diff(Z)!=0
        • 使用
          mask
          xx
          yy
      • 使用OP中的现有代码
      #使用diff创建遮罩
      遮罩=np.diff(Z,轴=1)!=0
      mask2=np.diff(Z,轴=0)!=0
      #在xx和yy上涂上口罩
      xd=np.concatenate((xx[:,1:[mask],xx[1:,:][mask2]))
      yd=np.concatenate((yy[:,1:[mask],yy[1:,:][mask2]))
      #仅绘制决策边界
      图,ax=plt.子批次()
      散点图(x=xd,y=yd,color='k',edgecolor='k',s=5,ax=ax,label='decision boundary')
      plt.show()
      

      fig,ax=plt.subplot()
      sns.散点图(数据=df,x='花瓣长度(厘米)',y='花瓣宽度(厘米)',色调='物种',ax=ax,边缘颜色='k')
      散点图(x=xd,y=yd,color='k',edgecolor='k',s=5,ax=ax,label='decision boundary')
      lgd=plt.图例(bbox\u至\u锚定=(1.05,1),位置=左上角')
      

      xd
      yd
      正确覆盖
      plt.contourf