超平面热图是如何创建的,应该如何解释它们?
我想我可以回答这个问题,因为我在自己的库中实现了这样的东西,即使我真的不知道它是如何在其他库中实现的。尽管我有信心,如果有其他方法,它们不会有太大的不同。
我花了几个星期才理解如何绘制这样的图表。
让我们从一个通用函数开始. 您想要的是用表示函数值的颜色绘制点。一种方法是简化整个问题并为每个像素绘制一个点。这会起作用,但只会绘制阴影表面,并且不可能绘制各种格式的线条(带有一些颜色和线宽的虚线。
我发现的真正解决方案做了两个简化。第一个将不是使用渐变着色,而是可以对条带进行着色。假设你的函数 取值 . 您可以将您的共同域拆分为许多子区间,例如:, 等等。现在您要做的是为每个间隔绘制一个填充有适当颜色的多边形。因此,您的原始问题被简化为绘制一个更简单问题的多个实例。请注意,当您的间隔足够小时,它看起来像一个渐变,即使是训练有素的眼睛也不会注意到。
第二个简化是将需要绘制的空间分割成一个由小矩形组成的网格。因此,您需要用适当的更简单的多边形填充每个小矩形,而不是在整个表面上绘制多边形。
如果不是很明显,问题就简单多了。以一个矩形为例。这个矩形有四个角,你可以在那个矩形的中心再取一个点(在某些情况下你可能需要那个点)。
问题是如何在适当的区域填充适当的颜色?您需要评估所有四个角和中心的功能。
有一些具体情况:
- 在所有角落评估的函数都小于间隔的开头=>您无需执行任何操作
- 在所有角落评估的函数都大于区间的结尾=>您无需执行任何操作
- 在所有角落评估的函数都在区间内 => 用适当的颜色填充整个矩形
如果你愿意,你可以在这里停下来,但你的数字看起来不流畅。你可以更进一步:
- 左上,左下,右下间隔,右上更大=>有两个点,一个在上,一个在右侧,其中包含在间隔的最大值处评估的函数=>这两个点在一起右上角形成一个可以填充的三角形
- 许多其他情况只需要共同判断来决定要形成和应该填充哪些多边形。
使用此算法,您可以填充多边形或绘制线条。在 SVM 的特定情况下,您需要知道与是将点分为正样本和负样本的线。此外,评估函数的行或者对应于 SVM 的最大边距。
一段时间后,我发现这种方法被命名为等值线,或等值曲线。也许有更多类似的算法。
我的实现被命名为mesh contour(一开始我没有找到合适的名称),你可以在这里找到源代码。
一些例子: