machine-learning - 说明径向基函数如何在支持向量机中工作

标签 machine-learning kernel svm gaussian

使用RBF时,我很难准确掌握SVM的工作方式。我对数学的了解还可以,但是到目前为止,我遇到的每个解释对我来说都太简短了。我目前的理解如下。假设我使用SVM作为不可线性分离的数据集的二进制分类器(那么rbf是正确的选择吗?)。训练SVM时,它将绘制出最能分离数据的超平面(我认为这就像3d中的平面,但具有更大的尺寸?)。

调整时,更改gamma值会更改超平面的表面(也称为决策边界?)。

这是我开始感到困惑的地方。

因此,伽玛值的增加会导致高斯变窄。这是否意味着可以将可以绘制的平面上的凹凸(如果在3d中绘制)更窄以更好地拟合训练数据?还是在2D中像说伽马定义分隔数据的线有多弯曲?

关于如何从有限数量的特征中产生无限的尺寸表示,我也感到很困惑?任何好的类比都会对我有很大帮助。

最佳答案

(因此,rbf是正确的选择吗?)


这取决于。 RBF是可以使用的非常简单的通用内核,但还有许多其他内核。以pykernels https://github.com/gmum/pykernels中包含的内容为例


  训练SVM时,它将绘制出最能分离数据的超平面(我认为这就像3d中的平面,但具有更大的尺寸?)。


让我们避免一些奇怪的混乱。这里什么也没画。 SVM将查找由v(法向矢量)和b(偏置,距原点的距离)定义的d维超平面,这是简单的点集,例如x。在2D超平面中是一条线,在3D超平面中是平面,在d + 1维中是d维物体,始终比空间低一维(线为1D,平面为2D)。


  调整时,更改gamma值会更改超平面的表面(也称为决策边界?)。


现在,这经常是一个错误。决策边界不是超平面。决策边界是超平面到输入空间的投影。您无法观察到实际的超平面,因为它通常具有很高的尺寸。您可以将此超平面表示为一个函数方程,仅此而已。另一方面,决策边界在输入空间中“存在”,如果输入是低维的,则甚至可以绘制该对象。但这不是一个超平面,而仅仅是这个超平面与您的输入空间相交的方式。这就是为什么即使超平面始终是线性且连续的,决策边界也经常是弯曲的甚至是不连续的原因-因为您会看到贯穿其中的非线性部分。现在<v, x> = b在做什么? RBF内核导致连续函数空间的优化。这些有很多(这些对象是连续的)。但是,SVM仅能表达这些家伙的一小部分-训练点中内核值的线性组合。固定要考虑的特定伽马限制函数集-伽马越大,内核越窄,因此要考虑的函数由此类“尖峰”分布的线性组合组成。因此,伽玛本身不会改变表面,它会改变所考虑的假设的空间。


  因此,伽玛值的增加会导致高斯变窄。这是否意味着可以将可以绘制的平面上的凹凸(如果在3d中绘制)更窄以更好地拟合训练数据?还是在2D中像说伽马定义分隔数据的线有多弯曲?


我想我已经回答了前面的问题-高伽玛意味着您仅考虑形式的超平面

<v, x> - b = SUM_i alpha_i K_gamma(x_i, x) - b


gamma,因此您将获得非常“尖锐”的基础元素。这将非常适合您的训练数据。决策边界的确切形状很难估计,因为这取决于训练过程中选择的最佳拉格朗日乘数K_gamma(x_i, x) = exp(-gamma ||x_i-x||^2)


  关于如何从有限数量的特征中产生无限的尺寸表示,我也感到很困惑?任何好的类比都会对我有很大帮助。


“无限表示”来自以下事实:为了使用向量和超平面,实际上每个点都映射到一个连续函数。因此,SVM在内部不再真正使用d维点,而是在使用函数。考虑2d情况,您有点[0,0]和[1,1]。这是一个简单的二维问题。在此处将具有rbf内核的SVM应用到-您将改为使用以[0,0]为中心,以[1,1]为中心的非标准化高斯分布。每个这样的高斯都是从R ^ 2到R的函数,表示其概率密度函数(pdf)。这有点令人困惑,因为内核看起来也像是高斯,但这仅是因为通常将两个函数的点积定义为它们的积的整数,而两个高斯积的整数也是....高斯!那么这个无限在哪里?请记住,您应该使用向量。如何将函数记为向量?您将必须列出其所有值,因此,如果您具有函数alpha_i,则必须列出无限数量的此类值以完全定义它。这就是无限维的概念-您正在将点映射到函数,就向量空间而言,函数是无限维,因此表示形式是无限维。

一个很好的例子可能是不同的映射。考虑一维数字1,2,3,4,5,6,7,8,9,10的数据集。让我们为奇数分配与偶数不同的标签。您无法线性分离这些家伙。但是您可以改为将每个点(数)映射到一种特征函数,形式为函数

f_x(y) = 1 iff x e [y-0.5, y+0.5]


现在,在所有这些函数的空间中,只需构建方程的超平面,就可以轻松地线性地将由奇数x创建的函数与其余的函数线性分离

<v, x> = SUM_[v_odd] <f_[v_odd](y), f_x(y)> = INTEGRAL (f_v * f_x) (y) dy


如果x是奇数,则等于1,因为只有该积分将为非零。显然,我只是使用有限数量的训练点(此处为v_odd),但是表示本身是无限的。这些额外的“信息”从哪里来?根据我的假设-我定义映射的方式在我考虑的空间中引入了特定的结构。与RBF类似,您将获得无限的维数,但这并不意味着您实际上在考虑每个连续函数-您将自己局限于以训练点为中心的高斯线性组合。类似地,您可以使用正弦内核,从而将您限制为正弦函数的组合。特定的“最佳”内核的选择是另外一个故事,很复杂,没有明确的答案。希望这个对你有帮助。

关于machine-learning - 说明径向基函数如何在支持向量机中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268692/

相关文章:

machine-learning - sp_randint 是如何工作的?

c - 如何检查进程是否是我的后代(内核模式)

c - 从内核空间写入文件

machine-learning - Scikit-learn 标签编码后进行一种热编码,从而为训练数据集和测试数据集产生不同的特征集。如何解决这个问题?

machine-learning - 训练 SVM 分类器时的奇怪行为

python - 与 MAPE(平均绝对百分比误差)相比,为什么我的 MAE(平均绝对误差)和 MSE(均方误差)较高?

python - Scikit Learn 多标签分类 : ValueError: You appear to be using a legacy multi-label data representation

python - 自动特征选择 - Sklearn.feature_selection

tensorflow - SSD Inception v2。 VGG16 特征提取器是否被 Inception v2 取代?

c - Linux 内核编程 : "Unable to handle kernel NULL pointer dereference"