我正在阅读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
是什么,如何选择它?在实践中如何实现核技巧?
回答:
你能解释一下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 # 请注意,这不是一个数字,而是一个关于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形式中描述起来太复杂了。