如何获得将 non-linearly 可分离数据投影为线性可分离的正确径向基函数?

How do I get a right radial basis function that projects non-linearly separable data to linearly separable?

我正在尝试制作这样的情节

有了 ,我得到了这个

使用此代码

X, y = make_circles(100, random_state=96867, factor=.1, noise=.1)
red_mask = y==0
plt.scatter(X[red_mask, 0], X[red_mask, 1], s=50, facecolors="none", edgecolors="r")
plt.scatter(X[~red_mask, 0], X[~red_mask, 1], s=50, marker="+", c="b")

但是,当我尝试将数据投影到 3d 时

r = np.exp(-(X ** 2).sum(1))

ax = plt.subplot(projection='3d')
ax.scatter3D(X[red_mask, 0], X[red_mask, 1], facecolors="none", edgecolors="r")
ax.scatter3D(X[~red_mask, 0], X[~red_mask, 1], marker="+", c="b")
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('r')
plt.show()

我知道了

这似乎意味着径向基函数r = np.exp(-(X ** 2).sum(1))根本不起作用

如何获得将 non-linearly 可分离数据投影为线性可分离数据的右径向基函数?

您的代码的主要问题是从未指定 z 坐标,默认设置为 0,因此在 3d-space.[=17= 中给出平面图]

将绘图指令更改为下面的代码片段,添加第三个坐标,生成真正的 3d 绘图:

ax.scatter3D(X[red_mask, 0], X[red_mask, 1], r[red_mask], facecolors="none", edgecolors="r")
ax.scatter3D(X[~red_mask, 0], X[~red_mask, 1], r[~red_mask], marker="+", c="b")

要使蓝点以 0 为中心,您需要将内核更改为 r = np.exp((X ** 2).sum(1)),因为负指数使得离中心最远的点具有较低的 r 值。最终结果如下所示,并使数据线性可分(y 也更改为 abs(y) 以更好地匹配示例图像)。