在 SVM 中实践核技巧

3
我正在阅读SVM理论。在核技巧中,我的理解是,如果我们有一个数据集在原始的n维度上不是线性可分的,我们使用核函数将数据映射到一个更高的维度空间使其变得线性可分(我们必须根据数据集选择正确的核函数)。然而,当我看安德鲁·吴的这个视频时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
这个问题更适合在数学或统计StackExchange上讨论。不过有几点需要注意:1)所谓的核技巧是因为它避免了显式映射到高维空间,2)RBF核表示的特征空间是无限维的。如果您想要可视化实际的特征映射,建议使用多项式核。 - Matt Hancock
@ChesterVonWinchester,感谢您的时间。实际上,任何想要学习机器学习或其他领域的人,在接触黑匣子之前必须先理解理论! - Jeanne
1个回答

3
您好!以下是翻译的结果:

您能否解释一下径向基函数(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?

对于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的可能输入值都有一个。因此从纯数学的角度看,m = |R|,使用集合论,这被称为Beth_1 (https://en.wikipedia.org/wiki/Beth_number)。

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

你不需要选择m,它由核本身定义。在实践中实现核技巧需要将所有的优化例程表达为仅在内积上下文中使用训练点,并用核调用替换它们。这太过复杂,无法在SO形式中描述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接