我的方法是研究数据:我将如何分离 XOR 问题中的点?当我开始学习一般的 ML,特别是 SVM 时,我就是这样做的,我做的是玩具问题,手绘它,并尝试将类分开。
当我第一次查看 XOR 问题时,我想到两个紫色点(左下方)的 X 和 Y 具有相同的符号,在一种情况下为负一个正,而两个绿点的 X 和 Y 为相反的迹象。因此,对于绿色点,X 和 Y 的平方和将为 0(或非常小,在初始问题中有一点噪声),而对于紫色点,则为 2(或接近 2)。因此,添加第三个坐标Z = np.sqrt(np.square(X + Y))
将很好地将这两个集合分开:

附带说明一下,如果您认为这与本例中的基本相同,则与doug 的 rbfZ
并没有太大的不同。np.sqrt(np.square(X + Y))
np.abs(X + Y)
我无法访问 Crisitanini 的论文,但我也会以类似的方式解决这个问题,从玩具版本开始(顺便说一下,棋盘代码感谢doug):

这里的一个可能的直觉是黑色方块的行和列索引的总和总是偶数,而白色方块总是奇数,所以(row_index + col_index) % 2
在这个简单的版本中添加类似的东西作为第三维就可以了。在一个更大、更复杂的棋盘数据集中,就像我在网上找到的这样:

事情不是那么简单,但也许可以级联聚类以找到 16 个聚类的平均 X 和 Y 位置(可能使用medoids 聚类),然后应用“模核技巧”的一个版本?
由于我没有处理大量分类问题的免责声明,到目前为止,我发现在制作复杂问题的玩具版本时,我通常对可能有效的解决方案有一种“数字”直觉.
最后,正如在对道格的回答的评论中发布的那样,我没有发现像他这样的经验方法有任何问题,通过使用相同算法 (SVC) 将所有可能的内核传递给网格搜索来研究所有可能内核的性能并更改只有内核。您可以通过在转换后的特征空间中绘制相应的边距来添加该方法:例如,对于 rbf,使用 Doug 建议的方程(以及 Sebastian Raschka 绘制决策区域的例程 -此处为单元格 13)。
2017 年10 月 27 日更新
在我的 slack 频道的一次对话中,另一位地球物理学家问我关于异或门设计为 0 和 1 而不是 -1 和 1 的情况(后者类似于勘探地球物理学中的一个经典问题,因此我最初的玩具示例)。
如果我要使用 0 和 1 处理 XOR 门,并且没有关于 rbf 内核的知识,那么在这种情况下,我也会根据这些问题的坐标来研究这个问题,看看是否我可以想出一个转变。

我在这里的第一个观察是,Osx=y
在线上,Xsx=-y
在线上,所以在一个情况下差异x-y
将是 0(或带有一点噪音的小),在另一个情况下分别为 +/-1。绝对值会处理符号,因此Z = np.abs(X-Y)
会起作用。顺便说一句,这与道格的 非常相似rbf = np.exp(-gamma * np.abs(x - y)**2)
(另一个支持他的答案的原因);事实上,他的 rbf 是一个更通用的解决方案,适用于所有 XOR 情况。