【问题标题】:Gaussian RBF Visualization in PythonPython中的高斯RBF可视化
【发布时间】:2021-02-23 21:42:12
【问题描述】:

有些日子我试图可视化由 SVC 模型中的 RBF 内核转换产生的所谓内核技巧。基本上,我试图将 2D 空间映射到 3D 空间,以便让查看者看到内核技巧如何添加维度以线性分离两个类之间的空间。

按照 sklearn 示例,我设法绘制了该技巧的 2D 示例。但是,我觉得仅仅真正掌握幕后发生的事情是不够的。

以下是我设法绘制的:

我想在三维空间上绘制相同的数据,也表示在两个类之间分割空间的平面。 我不是在这里要求实际的代码。相反,我想了解第三维的轴上发生了什么。事实上,我认为这样的轴应该等于exp(-gamma||x-y||^2)。但是,由于我的向量代数能力很差,我不知道如何计算它。

任何帮助将不胜感激。

干杯!

更新

以下允许我为 3D 绘图构建新矩阵:

def feature_map_2(X):  
    return np.asarray((X[:,0], X[:,1], np.exp( -gam*(( X[:,0]**2 + X[:,1]**2 -2*X[:,0]*X[:,1]))))).T

Z = feature_map_2(X)

在哪里gam = 1/n_features

然后,我按如下方式计算了边界:

#SVM 
clf = svm.NuSVC(kernel = 'linear', nu=0.5)
clf.fit(Z, y) 


w = clf.coef_.flatten()
b = clf.intercept_.flatten()

# create x,y
xx, yy = np.meshgrid(np.linspace(-6,6), np.linspace(-2,2))

# calculate corresponding z
boundary = lambda xx, yy: (-w[0] * xx - w[1] * yy - b) * 1. /w[2]

但是,结果与查看 2D 绘图时可能预期的不同。

【问题讨论】:

    标签: python mapping svm


    【解决方案1】:

    你是说支持向量机模型吗?

    https://jgreitemann.github.io/svm-demo

    可视化 3D 可能很困难,因为您需要将投影到屏幕上,然后再次转换为 2D 图像。

    要在 3D 空间中找到平面,您只需应用内核以使您的类线性可分,然后应用 Linear SVM

    方程w' x - b = 0用标量表示为w[0] * x[0] + w[1] * x[1] + w[2] * x[2] - b = 0,可以通过选择x的元素(具有非零系数)来参数化。比如w[2] != 0你可以把飞机写成。

    (U, V, (b - w[0] * U - w[1] * V) / w[2])

    这可以用在常见的曲面图函数中,例如在python中它会是这样的

    U, V = meshgrid(np.linspace(-1, 1, 100), np.linspace(-1, 1, 100))
    plt.pcolormesh(U, V, (b - w[0] * U - w[1] * V) / w[2]);
    

    【讨论】:

    • 谢谢你!不知何故,我设法建立了一个三维情节。我所做的是首先将点居中(通过减去平均值),然后构建一个与原始 n*2 矩阵相同的新 n*3 矩阵,但第三列等于||x0-x1||^2 = ||x0||^2 - 2<x0, x1> + ||x1||^2 请参阅更新后的帖子代码。
    猜你喜欢
    • 2020-07-01
    • 2017-04-15
    • 2012-09-19
    • 1970-01-01
    • 2018-07-16
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多