超平面热图是如何创建的,应该如何解释它们?

数据挖掘 机器学习 Python 支持向量机 监督学习 判别分析
2021-10-10 19:21:06

对于非线性数据,当我们使用支持向量机时,我们可以使用诸如高斯 RBF、多项式等内核来在不同的(我们可能不知道的)特征空间中实现线性,并且算法在该特征空间中学习最大分离超平面.

我的问题是我们如何创建热图,如下图所示,以显示此最大值。在我们的原始空间中分离超平面,它应该如何解释?

在此处输入图像描述

1个回答

我想我可以回答这个问题,因为我在自己的库中实现了这样的东西,即使我真的不知道它是如何在其他库中实现的。尽管我有信心,如果有其他方法,它们不会有太大的不同。

我花了几个星期才理解如何绘制这样的图表。

让我们从一个通用函数开始f:R×RR. 您想要的是用表示函数值的颜色绘制点。一种方法是简化整个问题并为每个像素绘制一个点。这会起作用,但只会绘制阴影表面,并且不可能绘制各种格式的线条(带有一些颜色和线宽的虚线。

我发现的真正解决方案做了两个简化。第一个将不是使用渐变着色,而是可以对条带进行着色。假设你的函数f 取值 [1,1]. 您可以将您的共同域拆分为许多子区间,例如:[1,0.9], [0.9,0.8]等等。现在您要做的是为每个间隔绘制一个填充有适当颜色的多边形。因此,您的原始问题被简化为绘制一个更简单问题的多个实例。请注意,当您的间隔足够小时,它看起来像一个渐变,即使是训练有素的眼睛也不会注意到。

第二个简化是将需要绘制的空间分割成一个由小矩形组成的网格。因此,您需要用适当的更简单的多边形填充每个小矩形,而不是在整个表面上绘制多边形。

如果不是很明显,问题就简单多了。以一个矩形为例。这个矩形有四个角,你可以在那个矩形的中心再取一个点(在某些情况下你可能需要那个点)。

问题是如何在适当的区域填充适当的颜色?您需要评估所有四个角和中心的功能。

有一些具体情况:

  • 在所有角落评估的函数都小于间隔的开头=>您无需执行任何操作
  • 在所有角落评估的函数都大于区间的结尾=>您无需执行任何操作
  • 在所有角落评估的函数都在区间内 => 用适当的颜色填充整个矩形

如果你愿意,你可以在这里停下来,但你的数字看起来不流畅。你可以更进一步:

  • 左上,左下,右下间隔,右上更大=>有两个点,一个在上,一个在右侧,其中包含在间隔的最大值处评估的函数=>这两个点在一起右上角形成一个可以填充的三角形
  • 许多其他情况只需要共同判断来决定要形成和应该填充哪些多边形。

使用此算法,您可以填充多边形或绘制线条。在 SVM 的特定情况下,您需要知道与f(x,y)=0是将点分为正样本和负样本的线。此外,评估函数的行1或者1对应于 SVM 的最大边距。

一段时间后,我发现这种方法被命名为等值线,或等值曲线。也许有更多类似的算法。

我的实现被命名为mesh contour(一开始我没有找到合适的名称),你可以在这里找到源代码。

一些例子:

颗粒颜色步长的网格曲线

用于精细颜色步骤的网格曲线

基于合成数据的 SVM