决策树能学会解决异或问题吗?

数据挖掘 随机森林 决策树
2021-09-27 06:53:40

我在网上读到决策树可以解决异或类型的问题,如图所示(异或问题:1)和(决策树的可能解决方案:2)。

我的问题是决策树如何学会在这种情况下解决这个问题。我只是看不到任何指标(信息增益,基尼分数,...)选择图像 2 中的一个拆分而不是任何其他随机拆分的方法。

是否有可能用决策树解决提出的问题?使用随机森林会以任何方式解决问题吗?

先感谢您。

2个回答

是的,决策树可以学习 XOR。

我在网上读到决策树可以解决 xOR 类型的问题......

很多时候,事情的措辞不够仔细。神经网络可以完美地对整数列表进行排序,但是要训练一个来做到这一点非常困难。您的图像显示一棵树可以很容易地表示 XOR 函数,但您的问题是如何学习这样的树结构。

我的问题是决策树如何学会在这种情况下解决这个问题。我只是看不到任何指标(信息增益,基尼分数,...)选择图像 2 中的一个拆分而不是任何其他随机拆分的方法。

事实上,第一次分裂可能是非常随机的,或者由于噪音(如果你去sign(xy)连续x,y而不是离散的x,y和异或)。但是,只要你的算法在第一次分裂中进行一次暴跌,接下来的分裂是显而易见的,你的树就会成功。

是否有可能用决策树解决提出的问题?

这是一个笔记本(github/colab,欢迎提出建议)证明是的,(sklearn)决策树可以学习sign(xy)(当点非常接近 0 时可能会出现一些错误);但它也继续显示出一些困难,例如,当变量不是x,y可用于树进行拆分。Up-shot:噪声变量可能会破坏我上面提到的第一次分裂,甚至有用的变量也会使树失去对 XOR 的跟踪。

使用随机森林会以任何方式解决问题吗?

可能不是基本问题,但它看起来有助于解决上面的噪声变量等问题。

是的,可以使用决策树实现 XOR。

异或门:

if x == y
  class = 0
else
  class = 1

因此,一个简单的离散决策树可以是:

N1: is x == 1 ? (yes -> N2, no -> N3)
N2: is y == 1 ? (yes -> class=0, no -> class=1)
N3: is y == 1 ? (yes -> class=1, no -> class=0)

因此,您可以使用三个决策节点实现 XOR。

这也可以应用于连续值。我将用您提供的示例进行演示。在您的示例中,我们需要制作一个考虑以下内容的决策树:

if (x < 0.5 AND y > 0.4) OR (x > 0.5 AND y < 0.4)
  class = 1
else
  class = 2

与离散示例一样,这可以使用三个决策节点来解决:

N1: is x > 0.5 ? (yes -> N2, no -> N3)
N2: is y > 0.4 ? (yes -> class=2, no -> class=1)
N3: is y > 0.4 ? (yes -> class=1, no -> class=2)

请注意,当一个点恰好落在边界上时,您可以选择 > 或 >= 将分类偏向您的首选类别。

我已在此处粘贴您的示例图片以供参考: 你的例子