【问题标题】:How do I get a right radial basis function that projects non-linearly separable data to linearly separable?如何获得将非线性可分数据投影为线性可分的正确径向基函数?
【发布时间】:2021-08-24 14:45:00
【问题描述】:

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

有了@Whole Brain's help,我知道了

使用此代码

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)) 根本不起作用。

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

【问题讨论】:

  • 您是在问如何制作一些数据(符合第一个 3-d 图)?或者您对您的数据感到满意并想知道如何更改/旋转您的绘图?您的 minimal reproducible example 不包括 make_circles - 我们不知道那是什么 - 我们需要能够重现您的数据和问题。
  • 可能是sklearn.datasets.make_circles

标签: python machine-learning data-mining


【解决方案1】:

您的代码的主要问题是从未指定 z 坐标,并且默认设置为 0,因此在 3d 空间中给出了平面图。

将绘图指令更改为下面的 sn-p,添加第三个坐标,生成真正的 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) 以更好地匹配示例图像)。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 2017-03-20
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2014-12-14
    • 2015-07-22
    • 2012-03-14
    • 2018-01-19
    相关资源
    最近更新 更多