支持向量机(五)能力扩展

前面我们推导了硬间隔、软间隔 SVM。学完之后大家可以留意到,硬间隔 SVM 要求数据线性可分,软间隔也只能处理近似线性可分的数据。但是,现实场景里大量数据并不是简单的线性分布:螺旋、环形缠绕的样本混杂在一起,哪怕我们不断放宽惩罚、允许部分样本错分,在原始特征空间中,也找不到一条直线能够把两类样本划分开来。

那如果两类样本相互交错、完全没法用直线分开,SVM 还有办法吗?

这就是我们这一讲要解决的问题。我们会引入核技巧,把 SVM 的能力从线性分类拓展到复杂非线性场景。

1. 解决思路

我们先想清楚根源:数据分不开,本质是现有特征下,不同类样本之间区分度不足。一个很自然的思路就是:在原有特征基础上,构造、新增特征,拉大样本之间的差异,让模型更容易区分。

例如:区分【慢跑的人】和【快走的人】 原始两个特征:

  • 步频(每分钟步数)
  • 步幅(每一步的长度)

只单独看步频:慢跑和快走步频区间大量重叠,分不开。只单独看步幅:也有重叠,分不开。

基于现有两个特征,构造派生新特征:速度 = 步频 × 步幅 用速度这个算出来的新特征,就能很好分开:快走一般上限低,慢跑速度更高。

接下来,我们尝试把这个思路应用到 SVM 中,使它更适应复杂的问题。前面我们学过,SVM 有两条求解路线:原始问题求解、对偶问题求解。下面我们分别看一看,“新增特征” 这个思路,在两种方案里能不能落地。


如果我们在原始问题上求解:

但是,问题是:

  • 构造多少个特征?少了,数据仍然区分不开。多了,会带来很高的计算代价。
  • 如何构造这些特征,能够在广泛的问题场景都有效?

结论:直接在原始问题上手动构造新特征,很难落地,这条路不好走。


我们再看对偶问题求解,仔细观察会发现一个关键点:对偶的全部计算,只依赖样本两两之间的内积。如果我们想用新增特征的思路,依然绕不开上面的难题:特征构造方案不好定、新增特征带来巨大计算开销。

但这里藏着一个巧妙解法:核函数。 核函数可以依托原有特征自动生成新特征,不需要人工设计,如果特征构造不好,还可以通过参数调整特征的生成。 最核心的优势:计算样本的内积,我们不需要显式写出这些新特征(隐式构造特征),可以直接算出变换后向量内积的结果,省下巨大计算量,这刚好适配对偶场景。

求解完成,就得到核函数版本的支持向量机,预测公式:

核函数的本质:它会悄悄帮我们自动构造一大堆新特征,不需要我们手动写出、算出这些新特征,就能直接拿到两个样本在这组新特征下的内积。

在 SVM 里,核技巧一般搭配对偶问题一起用。SVM 原始优化式里是 wx,形式上不是样本两两内积,不方便直接套用核函数。所以常规做法,是先转化成对偶问题,再引入核函数做计算。

如果模型效果不理想,可以调整核函数的相关参数,相当于让它换一种方式自动生成新特征,画出不一样的分界线,更好地区分不同样本。

2. 常用核函数

  • 线性核(Linear Kernel):适用于线性可分数据,计算效率较高,不需要进行复杂的特征映射。
  • 多项式核(Polynomial Kernel):适用于存在复杂特征交互关系的非线性数据。
  • 高斯径向基核(RBF Kernel):适用于复杂非线性数据,是支持向量机中最常用的核函数。
  • 双曲正切核(Sigmoid 核):在实际应用中使用较少。

注意:支持向量机在高维空间中是仍然是最大化间隔,寻找线性超平面,但是从原空间的角度来看,这个超平面就变成非线性的。