【发布时间】: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 绘图时可能预期的不同。
【问题讨论】: