在 SVM 中练习内核技巧

Posted

技术标签:

【中文标题】在 SVM 中练习内核技巧【英文标题】:Practicing Kernel trick in SVM 【发布时间】:2016-05-28 14:53:54 【问题描述】:

我正在阅读 SVM 的理论。在内核技巧中,我的理解是,如果我们有一个在原始维度 n 中不是线性可分的数据,我们使用内核将数据映射到更高的空间以实现线性可分(我们必须根据数据集等)。但是,当我观看 Andrew ng Kernel SVM 的这段视频时,我的理解是我们可以将原始数据映射到更小的空间中,这让我感到困惑!?任何解释。

您能否通过具体示例向我解释 RBF 内核如何将每个原始数据样本 x1(x11,x12,x13,....,x1n) 映射到更高空间(尺寸为 m)为 X1(X11,X12,X13,...,X1m)。另外,我理解的是内核计算转换后数据的内积(所以在 RBF 之前还有一个转换,这意味着 RBF 将数据隐式转换到更高的空间,但是如何?)。

另外一件事:内核是一个函数k(x,x1):(R^n)^2->R =g(x).g(x1),其中g是一个变换函数,在RBF内核的情况下如何定义g?

假设我们在测试集中,我的理解是x是要分类的样本,x1是支持向量(因为只有支持向量会被用来计算超平面)。在 RBF 的情况下 k(x,x1)=exp(-(x-x1)^2/2sigma),那么改造在哪里?

最后一个问题:承认RBF做映射到更高维度的m,有可能显示这个m吗?我想看看理论上的现实。

我想用 RBF 内核实现 SVM。这里的m是什么以及如何选择呢?如何在实践中实现内核技巧?

【问题讨论】:

这个问题确实更适合数学或统计堆栈交换。不过有几件事:1)它被称为内核 trick 的原因是因为它 avoids the explicit mapping 到更高维空间,2)由 RBF 内核 is infinite dimensional 表示的特征空间。如果你对可视化实际的特征图感兴趣,我建议使用polynmial kernel。 @ChesterVonWinchester,感谢您抽出宝贵时间。真的,任何想学习机器学习或任何其他领域的人,在触碰黑匣子之前都必须了解理论! 【参考方案1】:

您能否解释一下 RBF 内核如何将每个原始数据样本 x1(x11,x12,x13,....,x1n) 映射到更高的空间(尺寸为 m)为 X1(X11,X12, X13,...,X1m) 举一个具体的例子。另外,我的理解是内核计算转换后数据的内积(所以在 RBF 之前还有另一个转换,这意味着 RBF 将数据隐式转换到更高的空间,但是如何?)。

正如您所说 - 内核是投影空间的内积,而不是投影本身。整个诀窍是您永远不要转换您的数据,因为这样做的计算成本太高

另外一件事:内核是一个函数k(x,x1):(R^n)^2->R =g(x).g(x1),其中g是一个变换函数,g怎么定义在 RBF 内核的情况下?

对于rbf核,g实际上是从R^n到连续函数空间(L2)的映射,每个点都映射成均值为x,方差为sigma^2的非归一化高斯分布。因此(直到我们将删除一些归一化常数 A)

g(x) = N(x, sigma^2)[z] / A # notice this is not a number but a function of z!

现在函数空间的内积是整个域的积的积分

K(x, y) = <g(x), g(y)> 
        = INT_R^n N(x, sigma^2)[z] N(y, sigma^2)[z] / A^2 dz 
        = B exp(-||x-y||^2 / (2*sigma^2)) 

其中 B 是某个常数因子(归一化),仅取决于 sigma^2,因此为了计算简单性,我们可以放弃它(因为缩放在这里并不重要)。

假设我们在测试集中,我的理解是x是要分类的样本,x1是支持向量(因为只有支持向量会被用来计算超平面)。在RBF的情况下k(x,x1)=exp(-(x-x1)^2/2sigma),那么变换在哪里呢?

如前所述 - 从未明确使用变换,您只需证明您的超平面与变换点的 内积 可以再次表示为带有支持向量的内积,因此您永远不会变换什么都行,只用内核

<w, g(x)> = < SUM_i=1^N alpha_i y_i g(sv_i), g(x)> 
          = SUM_i=1^N alpha_i y_i <g(sv_i), g(x)>
          = SUM_i=1^N alpha_i y_i K(sv_i, x)

其中 sv_i 是第 i 个支持向量,alpha_i 是在优化过程中找到的每样本权重(拉格朗日乘数),y_i 是第 i 个支持向量的标签。

最后一个问题:承认RBF做映射到更高维度的m,有可能显示这个m吗?我想看看理论上的现实。

在这种情况下m 是无穷大,因为您的新空间是 R^n -> R 域中的连续函数空间,因此单个向量(函数)被定义为连续体(集合的大小实数)值 - 每个来自 R^n 的可能输入值一个(这是一个简单的集合论结果,任何正 n 的 R^n 都是大小连续的)。因此,就纯数学而言,m = |R|,使用集合论,这就是所谓的 Beth_1 (https://en.wikipedia.org/wiki/Beth_number)。

我想用 RBF 内核实现 SVM。这里的m是什么以及如何选择它?如何在实践中实现内核技巧?

你不要选择m,它是内核自己定义的。在实践中实现内核技巧需要以表格形式表达所有优化例程,其中训练点单独用于内积的上下文中,然后用内核调用替换它们。这太复杂了,无法用 SO 形式描述。

【讨论】:

以上是关于在 SVM 中练习内核技巧的主要内容,如果未能解决你的问题,请参考以下文章

SVM算法应用综合练习--人脸微笑识别

优化 X_transpose*X CUDA 内核的技巧

scikit-learn 入门练习

最小割 专题练习

sklearn SVM 默认距离测量

算法练习80.字符串轮转——奇淫技巧