阿南带你理解支持向量机

向量也支持阿南~

Posted by Nam on February 20, 2020

前言

关于支持向量机的博客我很久之前就想下笔写了,由于拖延症的关系一直放到现在 -.-! 今天下笔写这篇博客,也是为了已经打响的春招做准备!现在受疫情以及经济大环境不景气的情况下,要找到一份称心的工作着实要下一番功夫!而支持向量机又是算法、机器学习和人工智能岗位必考的模型。

好了,让我们开始进入面试中最为热门的支持向量机部分吧! Let us go!

支持向量机

支持向量机 (Support Vector Machine, SVM),一个听起来特学术、特唬人的名字,实际上我们之前早已接触过它的兄弟模型 感知机 (Perceptron)(详情请见 阿南带你理解感知机)。相比于感知机要求 数据集必须线性可分 的约束来说,支持向量机就不存在这个约束,这个我们将在后面的核函数中提到。以下给出支持向量机的的定义:

支持向量机: 是一种二分类模型,其目的是在输入的特征空间中找到一个最大 间隔 (margin) 的决策超平面,其中 间隔最大 使得支持向量机有别于感知机。 此外,支持向量机是通过直接学习最终的判别函数 $y=f(x)$,故属于 判别模型


线性可分支持向量机

首先讲一下比较理想的情况,假设我们面对的是一个线性可分的数据集:

\[T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\]

其中,$x_i\in \chi=R^n, y_i\in \gamma ={+1,-1}$。其中$x_i$是数据集中第$i$个特征向量样本或称之为实例,$y_i$为$x_i$的类标记。

对于线性可分的数据集,感知机的策略是利用最小化误分类的原则求出决策超平面,此时符合条件的决策超平面是无穷多个。而支持向量机则由于采用了 最大化间隔 的策略,因此只存在一个最优的决策超平面。

那么,什么是间隔呢?如何找到最大间隔的决策超平面呢?

疑问

一般来说,样本与分离超平面的距离对应于这个样本属于特定类别的确信度。换句话说就是,离间隔越远就越”安全“,被误判的可能性就越小。于是有了 函数间隔 (functional margin) 的概念:

函数间隔 (functional margin): 对给定的数据集 $T$ 和超平面 $(w,b)$, 定义超平面 $(w,b)$ 关于样本点 $(x_i,y_i)$ 的函数间隔为:

\[\hat \gamma_i =y_i(w\cdot x_i +b) \tag{1}\]

定义超平面 $(w,b)$ 关于数据集 $T$ 的函数间隔为超平面 $(w,b)$ 中关于数据集 $T$ 内所有样本点 $(x_i,y_i)$ 的函数间隔中的最小值:

\[\hat \gamma = \min_{i=1,2,...,N} \gamma_i \tag{2}\]

然鹅,单纯的函数间隔并不足以用来确定决策超平面,因为如果成比例的改变 $w$ 和 $b$ 例如将其统一增加至 $2w$ 和 $2b$ 所有实例的函数间隔都会变为原来的两倍。注意,这里是数据集中所有实例的函数间隔都翻倍了,也就是所有实例与决策超平面之间的相对距离没有改变。

我们的目的是要找到一个间隔最大的决策超平面,如果可以通过改变 $w$ 和 $b$ 来改变函数距离的话,那么就不能用函数间隔去找到最优的决策超平面了。因为支持向量机是要找到一个间隔最大的超平面,但是我们总能通过改变 $w$ 和 $b$ 来改变函数距离甚至可以使得相对最小的函数间隔 $\hat \gamma$ 都变得无穷大,导致我们不能将最大化函数间隔作为我们的优化目标。

为了解决这个问题,我们引入了 几何间隔 的概念:

\[\gamma = \frac{\hat \gamma}{||w||} = \frac{w}{||w||}\cdot x_i + \frac{b}{||w||} \tag{3}\]

在这里我们将函数间隔除以 $\mid \mid w\mid \mid$ 转变为几何间隔,这样无论如何成比例的改变 $w$ 和 $b$ 都不会影响最终的间隔。因此我们取 $\hat \gamma=1$,便得到如下最优化问题:

\[\begin{aligned} & \min_{w,b} \frac{1}{2}||w||^2 \\ & s.t. \ \ \ y_i(w\cdot x_i +b)-1\ge 0 \end{aligned} \tag{4}\]

我来简单地解释一下这其中的转变。刚开始我们的优化目标是最大化函数间隔 $\hat \gamma$,但是后来发现函数间隔会随着 $w, b$ 一起成比例的改变,无法作为优化目标。

于是我们转变为最大化几何间隔 $\gamma = \frac{\hat \gamma}{\mid \mid w\mid \mid}$,并且为了方便起见,我们 Normalize 函数间隔为 $1$ 即 $\hat \gamma = 1$。此时我们的目标就是 $\max \frac{1}{\mid \mid w\mid \mid}$

同时,$\max \frac{1}{\mid \mid w\mid \mid} \equiv \min \mid \mid w\mid \mid \equiv \min \frac{1}{2} \mid \mid w\mid \mid^2$。最后加上常数系数 $\frac{1}{2}$ 是为了后续计算的方便,并不影响优化的结果。

我们发现上述问题是 凸二次规划 问题,这为后面的求解提供了理论支持。

凸优化问题是指约束最优化问题:

\[\begin{aligned} & \min_w f(w) \\ & s.t. \ \ \ g_i(w)\le 0 \\ & \ \ \ \ \ \ \ \ h_i(w)=0 \end{aligned} \tag{5}\]

期中,目标函数 $f(w)$ 和不等式约束 $g_i(w)\le 0$ 都是 $R^n$ 上的连续可微的凸函数,约束函数 $h_i(w)$ 是 $R^n$ 上满足 $h(w) = a\cdot w + b$ 的仿射函数。

当目标函数 $f(w)$ 是二次函数且约束函数 $g_i(w)$ 也是仿射函数时,上述凸优化问题就转化为凸二次规划问题。

因此我们的目标很简单,只需根据上述优化问题计算出解 $w^{*},b^{*}$ 就得到了决策超平面 $w^{*} \cdot x + b^{*}=0$ 以及分类决策函数 $f(x)=sign(w^{*}\cdot x + b^{*})$。


软间隔最大化的线性支持向量机

然而,现实并不总是那么的美好,我们面对的数据集往往是线性不可分的。也就是说,我们不可能找到一个完美的分离超平面能够把两类样本完全真确地分离开。因此最大化间隔也就无从谈起了。

线性不可分

不过没关系,阿南总能想出办法~ 我们稍微降低自己滴要求,不要幻想我们可以把所有样本都能正确地分离开。我们要允许模型 “犯少量的错”,这样我们就能在犯少量错的前提下依旧找到间隔最大化的决策超平面!

因为线性不可分就意味着某些样本点不能够满足函数间隔大于 $1$ 的约束条件(注意,我们在线性可分支持向量机的优化部分 $(4)$ 中已将函数间隔归一化为 $1$。因此,在线性可分支持向量机的基础上,我们引入 松弛变量 $\xi$ (slack variable)。约束条件就变为:

\[y_i(w\cdot x_i +b) \ge 1-\xi_i \tag{6}\]

同时,为了避免模型犯太多错误,我们需要让模型为每一次错误付出代价 $\xi_i$。此时目标函数由原来的 $\frac{1}{2}\mid \mid w\mid \mid^2$ 变为:

\[\frac{1}{2}||w||^2 + C\sum_{i=1}^{N}\xi_i \tag{7}\]

上式 $(7)$ 中的 $C>0$ 为惩罚参数,用来模型对错误的容忍度。因为我们的目标就是最小化目标函数,因此越大的 $C$ 对应的就是越小的 $\sum_{i=1}^{N}\xi_i$,也就是越不能容忍犯错,同时我们还要最小化 $\frac{1}{2}\mid \mid w\mid \mid^2$ 也就是最大化间隔。

线性不可分的线性支持向量机的学习策略就转变成如下凸二次规划问题:

\[\begin{aligned} & \min_{w,b,\xi}\frac{1}{2}||w||^2 + C\sum_{i=1}^{N}\xi_i \\ & s.t. \ \ \ y_i(w\cdot x_i +b)\ge 1-\xi_i \\ & \ \ \ \ \ \ \ \ \xi_i\ge 0 \end{aligned} \tag{8}\]

对凸二次规划问题 $(8)$ 构建拉格朗日函数:

\[\begin{aligned} & L(w,b,\xi,\alpha,\mu) = \frac{1}{2}||w||^2 + C\sum_{i=1}^{N}\xi_i - \sum_{i=1}^{N}\alpha_i(y_i(w\cdot x_i +b)-1+\xi_i)- \sum_{i=1}^{N}\mu_i\xi_i \\ & s.t. \ \ \alpha_i(y_i(w\cdot x_i + b)-1 +\xi_i) = 0 \\ & \ \ \ \ \ \ \ \ \mu_i \xi_i = 0 \\ & \ \ \ \ \ \ \ \ y_i(w\cdot x_i + b) -1 + \xi_i \ge 0 \\ & \ \ \ \ \ \ \ \ \alpha \ge 0 \\ & \ \ \ \ \ \ \ \ \mu_i \ge 0 \\ & \ \ \ \ \ \ \ \ \xi_i \ge 0 \end{aligned} \tag{9}\]

构建好拉格朗日函数 $L(w,b,\xi,\alpha,\mu)$ 之后我们就要着手实现我们的目标:最小化目标函数 $\frac{1}{2}||w||^2 + C\sum_{i=1}^{N}\xi_i$,但是我们发现拉格朗日函数中还有两个拉格朗日乘子 $\alpha, \mu$,因此我们要先针对 $\alpha, \mu$ 极大化拉格朗日函数,令: \(\theta(w,b,\xi) = \max_{\alpha,\mu} L(w,b,\xi,\alpha,\mu) \tag{10}\)

易知,当约束条件全部满足时,则有 $\theta(w,b,\xi) = \frac{1}{2}\mid \mid w\mid \mid^2 + C\sum_{i=1}^{N}\xi_i$,也就是我们所想要极小化的目标函数。

因此,在满足所有约束条件的情况下最小化 $\frac{1}{2}\mid \mid w\mid \mid^2 + C\sum_{i=1}^{N}\xi_i$ 实际上等价于直接最小化 $\theta(w,b,\xi)$。具体写出来即是: \(\min_{w,b,\xi} \theta(w,b,\xi) = \min_{w,b,\xi}\max_{\alpha,\mu} L(w,b,\xi,\alpha,\mu) \tag{11}\)

用 $p^{*}$ (这里的 $p$ 是 $primary$ 即原始的,最初的的意思) 表示这个问题的最优解。

然鹅如果直接求解上式我们会发现一上来就有 $6$ 个约束,我们很难直接对 $\alpha,\mu$ 直接求偏导来找到能使 $L(w,b,\xi,\alpha,\mu)$ 最大的各个 $\alpha,\mu$ 值。因为对于每一个 $\alpha$ 均为一次函数,我们求偏导令其为零之后得到的是 $y_i(w\cdot x_i + b) = 1 - \xi_i$,而这个等式很难利用,因此我们不准备先对 $\alpha$ 求偏导。

那我们能不能调换一下式 $(11)$ 中关于极小极大的求解顺序呢?

答案是可以! 我们根据原始问题 $(11)$ 构建的对偶问题

不过这里要注意!使用强对偶必须需要满足下列两个条件:

  1. 严格条件
  2. KKT条件

严格条件是指原始问题是凸函数,约束条件是仿射函数。

在满足 $KKT$ 条件的前提下,根据拉格朗日对偶性,可以将原始问题 $(11)$ 转变为对偶的广义拉格朗日函数的极大极小问题:

\[\max_{\alpha} \min_{w,b,\xi} L(w,b,\xi,\alpha,\mu) \tag{12}\]

对偶问题 (dual problem) $(12)$ 与 原始问题 (primary problem) $(11)$ 是等价的,即它们拥有相同的解 $w^{*}, b^{*}$。 为了得到最优解 $w^{*}, b^{*}$,我们先求 $L(w,b,\xi,\alpha,\mu)$ 对 $w,b,\xi$ 的极小:

\[\begin{aligned} & \nabla_w L(w,b,\xi,\alpha,\mu) = w - \sum_{i=1}^{N} \alpha_i y_i x_i = 0 \\ & \nabla_b L(w,b,\xi,\alpha,\mu) = -\sum_{i=1}^{N}\alpha_i y_i = 0 \\[2ex] & \nabla_{\xi_i} L(w,b,\xi,\alpha,\mu) = C-\alpha_i-\mu_i=0 \end{aligned}\]

得到:

\[w=\sum_{i=1}^{N}\alpha_iy_ix_i \tag{13}\] \[\sum_{i=1}^{N} \alpha_iy_i = 0 \tag{14}\] \[C-\alpha_i -\mu_i = 0 \tag{15}\]

将结果 $(13)~(15)$ 带入至 $(12)$ 中,得到:

\[\min_{w,b,\xi} L(w,b,\xi,\alpha,\mu) = -\frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j <x_i\cdot x_j> + \sum_{i=1}^{N}\alpha_i \tag{16}\]

再对 $(16)$ 求关于 $\alpha$ 的极大,即得到对偶问题:

\[\begin{aligned} & \max_{\alpha} -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j <x_i\cdot x_j> + \sum_{i=1}^{N}\alpha_i \\ & s.t. \ \ \ \sum_{i=1}^{N}\alpha_i y_j=0 \\ & \ \ \ \ \ \ \ \ C-\alpha_i -\mu_i = 0 \\ & \ \ \ \ \ \ \ \ \alpha_i \ge 0 \\ & \ \ \ \ \ \ \ \ \mu_i\ge 0 \end{aligned} \tag{17}\]

此处我们仔细观察式 $(17)$ 的约束条件,可以将最后三个约束条件统一写成:

\[0\le \alpha_i \le C\]

同时我们把 $(17)$ 中的求极大通过乘以 $-1$ 转变为求极小,即:

\[\min_{\alpha} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j <x_i\cdot x_j> - \sum_{i=1}^{N}\alpha_i \tag{18}\]

OK,此时我们就可以给出线性支持向量机的学习算法了~

输入: 训练数据集 $T={(x_1,y_1),(x_2,y_2),…,(x_N,y_N)}$,其中,$x_i\in \chi=R^n, y_i\in \gamma ={+1,-1}$。其中$x_i$是数据集中第$i$个特征向量样本或称之为实例,$y_i$为$x_i$的类标记。

输出: 决策超平面和分类决策函数。

  1. 设定惩罚参数 $C$ 的初始值,根据 $(17),(18)$ 构造如下凸二次规划问题:

\(\begin{aligned} & \min_{\alpha} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j <x_i\cdot x_j> - \sum_{i=1}^{N}\alpha_i \\ & s.t. \ \ \ \sum_{i=1}^{N}\alpha_iy_i=0 \\ & \ \ \ \ \ \ \ \ \ 0\le \alpha_i \le C \end{aligned} \tag{19}\)

  1. 计算 \(w^* = \sum_{i=1}^{N}\alpha_i^*y_ix_i \tag{20}\) 选择 $\alpha_i$ 的一个分量 $\alpha_j^{*}$ 适合条件 $0\le \alpha_j^{*}\le C$,计算: \(b^*=y_j-\sum_{i=1}^{N}y_i \alpha_i^*<x_i\cdot x_j> \tag{21}\)

  2. 得出决策超平面: \(w^* \cdot x + b^* =0 \tag{22}\) 以及我们一直以来所追求的分类决策函数: \(f(x) = sign(w^* \cdot x + b^*) \tag{23}\)

在第二步,关于 $w$ 的解来自 $(13)$,对 $b$ 的解来自 $(9)$ 中第一个等式约束以及 $y^2 = 1$ 的结论。

其实,讲到现在都还没有提到 支持向量机 中的 支持向量 是什么意思。这是一个非常重要的概念,在面试中如果提到支持向量机一定会问到这个概念。

支持向量: 对决策超平面的求解有贡献的向量,称之为 支持向量 (support vector)

对应等式约束 $\alpha_i(y_i(w\cdot x_i + b)-1 +\xi_i) = 0$ 中,所有 $\alpha_i > 0$ 的实例均是支持向量。

下图中红色的点即为支持向量。

支持向量图解

如下是对支持向量的归纳:

  1. 间隔上的实例
  2. 间隔错误一侧的实例
  3. 决策超平面上的实例
  4. 决策超平面错误一侧的实例

合页损失函数

对于线性支持向量机,其模型为分离超平面:$w^{*} \cdot x + b^{*} = 0$ 以及决策函数 $f(x) = sign(w^{*} \cdot x + b^{*})$,其学习策略是 软间隔最大化,学习算法为 凸二次规划

线性支持向量机还有另外一种解释就是最下化以下目标函数: \(\sum_{i=1}^N \max{[0,\ 1-y_i(w\cdot x+b)]} + \lambda||w||^2 \tag{24}\)

函数第一项是 经验损失经验风险,用于度量模型对数据的拟合程度: \(\max{[0,\ 1-y_i(w\cdot x+b)]} \tag{25}\)

同时我们也将式 $(25)$ 称为 合页损失函数 (Hinge loss function)。该损失函数的特点就是只有当样本点 $(x_i,y_i)$ 被正确分类且其函数间隔(确信度) $y_i(w\cdot x_i +b)$ 大于 $1$ 时损失才是 $0$,否则损失是 $1-y_i(w\cdot x+b)$。

loss

因此铰链损失相比于 $0-1$ 损失的优点就在于只有我们足够确信某个实例 $x_i$ 足够正确时,此时我们才将当前实例的损失降低至 $0$。

对于式 $(24)$ 的最右边那一项 $\lambda \mid \mid w \mid \mid^2$ 我们称之为 模型复杂度,作为惩罚项用于控制整体模型的复杂程度。

经验风险: 度量了模型对数据的拟合程度。

结构风险: 度量了模型的复杂程度。

如果只一味地追求 经验风险最小化 那么在样本量比较小时很有可能发生过拟合的现象。而如果在经验风险的基础上加上惩罚项 $\lambda \mid \mid w \mid \mid^2$ 用以权衡经验风险和模型复杂度。

结构风险小需要经验风险与模型复杂度同时小。结构风险小的模型往往对训练数据以及未知的测试数据都有较好的预测。

结构风险最小化的策略认为结构风险最小的模型是最优的模型。所以求最优模型就是求解最优化问题:

\[\min_{w} \underbrace{\sum_{i=1}^N \overbrace{\max{[0,\ 1-y_i(w\cdot x+b)]}}^{铰链损失}}_{经验风险} + \underbrace{\lambda||w||^2}_{模型复杂度} \tag{26}\]


非线性支持向量机

在上文中我们已经能够熟练地使用 线性支持向量机 对近乎线性可分的数据集进行精确划分。

然鹅!现实世界并不总是那么滴美好,实际生活中我们面对的数据集往往是非线性的,比如说下面这样:

非线性

很明显,这个数据集是两个半径不同的圆加上了少量的噪音生成得到的,我们无法通过画一条直线将两个类别分离开。那难道我们的支持向量机就只能止步于此了吗?

不可能!我们还有拿手好戏 - 核函数 (Kernel function)!

在二维的世界中看这个数据的分布的确是线性不可分的,然鹅如果我们将数据通过投影映射到高维空间后便能解决在低维空间中线性不可分的问题!下面给出原始数据集通过变换映射到三维空间中的结果:

高维度

正如你所看到的,在线性不可分的情况下我们通过 升高维度 的方式在新的高维空间中将数据表达出来,此时便可以利用线性支持向量机的方法求得最优分离超平面!

因此我们就针对原始的输入空间 $X$ 做如下映射 $\phi(\cdot)$ :

\[z_1 = x_1^2 \\ z_2 = x_2^2 \\ z_3 = x_2 \tag{27}\]

经过映射 $\phi:R^2 \to R^3$ 之后我们的数据集变成线性可分的,此时我们就可以使用上文的线性支持向量机的方法去求解分离超平面。

但是这样问题就解决了吗? 并!没!有!

因为首先我们需要构建一个映射 $\phi$ 后分别计算新样本 $x_i$ 的映射 $\phi(x_i)$ 以及训练集 $X$ 中实例 $x$ 的映射 $\phi(X)$,随后根据式 $(17)$ 再计算它们之间的点积 $<\phi(x_i)\cdot \phi(x)>$。

发现问题了吗?一旦维度过高上述的计算就会变得十分复杂,就会出现 “维数灾难”

但是如果我们不直接去定义映射 $\phi$,而直接去定义一个变换 $K$ 直接得到原始输入空间经过映射 $\phi$ 后再点乘的最终结果又会有什么不同呢?

没错,那我们就可以在原始输入空间的维度下对数据进行计算,大大降低了 时间复杂度空间复杂度

给一个栗子把:

假设我们想要对原始输入空间 $X$ 做如下映射 $H(\cdot)$:

\[X = \begin{bmatrix} x_1\\ x_2 \end{bmatrix} \to H(X) = \begin{bmatrix} X^2 \\ X \\ Const \end{bmatrix} \tag{28}\]

可以发现这个映射把原始二维空间 $X$ 映射至一个新的三维空间 $H(X)$ 中。我们在这里取 $C=\frac{1}{2}$。

现在,我们定义 核函数 $K(X,Y)=(X^TY+\frac{1}{2})^2$。

并且我们会发现!经过核函数 $K(X,Y)$ 得到的结果与先经过映射 $\phi(\cdot)$ 再点积后的结果 $<\phi(X)\cdot \phi(Y)>$ 一致。

\[\begin{aligned} K(X,Y) & = (X^TY+\frac{1}{2})^2 = (\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}^T \begin{bmatrix} y_1 \\ y_2 \end{bmatrix} + \frac{1}{2}) \\ & = (x_1y_1 + x_2y_2 + \frac{1}{2})^2 \\ & = x_1^2y_1^2 + 2x_1y_1x_2y_2 + x_2^2y_2^2 + x_1y_1 + x_2y_2 + \frac{1}{4} \\ & = [\begin{bmatrix} x_1 & x_2 \end{bmatrix} \begin{bmatrix} y_1 \\ y_2 \end{bmatrix}]^2 + \begin{bmatrix} x_1 & x_2 \end{bmatrix} \begin{bmatrix} y_1 \\ y_2 \end{bmatrix} + \frac{1}{4} \\ & = (X^TY)^2(X^TY) + \frac{1}{4} \\ & = <\begin{bmatrix} X^2 \\ X \\ \frac{1}{4} \end{bmatrix},\begin{bmatrix} Y^2 \\ Y \\ \frac{1}{4} \end{bmatrix}> \\ & = <H(X),H(Y)> \end{aligned} \tag{29}\]

我们发现,核函数再原始维度中计算得到的结果完全等价于原问题。这就意味着我们可以避免定义复杂的高维映射后还要在高维空间进行复杂的计算,只需把数据带入核函数后直接就可以在低维空间快速地得到结果。

核函数总结: 核函数是二元函数,输入是映射之前的两个向量,其输出等价于两个向量映射之后的内积。

同时我们拥有许多核函数可以选择:

线性核: \(K(X,Y) = <X,Y> \tag{30}\)

多项式核: \(K(X,Y) = ((X,Y)+Const)^d \tag{31}\)

高斯核: \(K(X,Y) = \exp\{-\frac{||X-Y||^2}{2\sigma^2}\} \tag{32}\)

其中,线性核相当于不对原始数据进行任何变换。

如何选择核函数?

实际应用中 高斯核 是最为常用的核函数,我们通过调节 $\sigma$ 参数可以灵活的调整其效果。以下是高斯核函数的优缺点:

优点:

  1. 可以映射到无限维
  2. 决策边界更为多样
  3. 只有一个参数,相比多项式核容易选择

缺点:

  1. 可解释性差 (无限多维的转换,无法算w)
  2. 计算速度比较慢 (需要解对偶问题)
  3. 参数选不好时容易过拟合

总结

相信看完上面的文章大家应该能够对支持向量机有一个系统深入的了解了,接下来我们总结以下支持向量机的优缺点吧!

优点:

  1. 由于SVM是一个凸优化问题,所以求得的解一定是全局最优而不是局部最优。
  2. 适用于非线性问题 (用核技巧)。
  3. 拥有高维样本空间的数据也能用SVM,这是因为数据集的复杂度只取决于支持向量而不是数据集的维度,这在某种意义上避免了 “维数灾难”。
  4. 理论基础比较完善,可以根据实际情况进行优化调整。

缺点:

  1. SVM算法对大规模训练样本难以实施

    SVM的空间消耗主要是存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及 $n$ 阶矩阵的计算($n$ 为样本的个数),当 $n$ 数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有SMO算法及SOR算法等。如果数据量很大,SVM的训练时间就会比较长。比如垃圾邮件的分类检测就没有使用SVM分类器,而是使用了简单的 Naive Bayes 分类器,或者是使用 Logistic Regression 模型分类。

  2. 用SVM解决多分类问题存在困难

    经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。

  3. 对缺失数据敏感,对参数和核函数的选择敏感

    支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法。目前比较成熟的核函数及其参数的选择都是人为的,根据经验来选取的,带有一定的随意性.在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时候应该将领域知识引入进来,但是目前还没有好的方法来解决核函数的选取问题。