我的方法是研究数据:如何分离 XOR 问题中的点?当我开始学习 M.L.总的来说,特别是 SVM,我就是这样做的,解决了玩具问题,手工绘制,并尝试分离类。
当我第一次查看 XOR 问题时,我突然想到两个紫色点(左下方)的 X 和 Y 具有相同的符号,在一种情况下为负一个正,而两个绿点都有 X和相反符号的 Y。因此,对于绿色点,X 和 Y 的平方和将为 0(或非常小,在初始问题中有一点噪声),而对于紫色点,则为 2(或接近 2)。因此,添加第三个坐标Z = np.sqrt(np.square(X + Y)) 将很好地分开这两个集合:
附带说明,Z 与 doug's rbf 的表述并没有太大不同,如果您认为在这种情况下 np.sqrt(np.square(X + Y)) 与 np.abs(X + Y) 基本相同。
我无法访问 Crisitanini 的论文,但我也会以类似的方式解决这个问题,从玩具版本开始(顺便说一下,checkerboard code 感谢doug):
这里可能的直觉是黑色方块的行和列索引的总和总是偶数,而白色方块总是奇数,所以添加像(row_index + col_index) % 2 这样的第三维就可以了在这个简单的版本中。在一个更大、更复杂的棋盘数据集中,就像我在网上找到的这样:
事情没那么简单,但也许可以级联聚类以找到 16 个集群的平均 X 和 Y 位置(可能使用medoids clustering),然后应用“模内核技巧”的一个版本?
由于我没有处理大量分类问题的免责声明,到目前为止,我发现在制作复杂问题的玩具版本时,我通常对解决方案有一种“数字”直觉这可能会奏效。
最后,正如在对 doug 答案的评论中发布的那样,我没有发现 empirical approach like his 有任何问题,通过使用相同算法 (SVC) 在嵌套交叉验证中将所有可能的内核传递给网格搜索来研究所有可能内核的性能并且只改变内核。您可以通过在转换后的特征空间中绘制相应的边距来添加该方法:例如,对于 rbf,使用 Doug 建议的方程(以及 Sebastian Raschka 绘制决策区域的例程 - cell 13 here)。
2017 年 10 月 27 日更新
在我的 slack 频道的一次谈话中,另一位地球物理学家问我关于异或门设计为 0 和 1 而不是 -1 和 1 的情况(后者类似于勘探地球物理学中的一个经典问题,因此我最初的玩具示例)。
如果我要使用 0 和 1 处理 XOR 门,并且没有关于 rbf 内核的知识,那么在这种情况下,我也会根据这些问题的坐标来研究这个问题看看我能不能想出一个转变。
我在这里的第一个观察是Os 位于x=y 线上,Xs 位于x=-y 线上,因此x-y 的差异将是0(或小而有一点噪音),另一个分别为 +/-1。绝对值会处理符号,因此 Z = np.abs(X-Y) 会起作用。顺便说一句,这与doug'srbf = np.exp(-gamma * np.abs(x - y)**2) 非常相似(另一个支持他的答案的原因);事实上,他的 rbf 是一个更通用的解决方案,适用于所有 XOR 情况。