机器学习 · 互动实验室

核函数抬升

给每个点增加“离中心多远”这个特征,再看怎样分开

01平面上看02增加新坐标03切开后投影
看这里
新增坐标 · 越靠外,抬得越高
拖动旋转 · 滚轮缩放
回到原来的平面
完整抬升时
高度 = ½ × 距离²核方法通常隐式计算;这里把映射画出来。
内圈类外圈类切面 ↔ 分界圆描边高亮:当前分错的点

文字版:核函数抬升在做什么

有些数据在平面上怎么画直线都分不开——比如一圈点被另一圈点包住。核方法的思路是:给每个点增加一个新坐标,把它们抬到更高的维度上,在那里用一个平面切一刀;切完再投影回原来的平面,那条界线就变成了一个圆。

画面上正在发生什么

一开始是俯视的平面,内圈被外圈包住,页面会告诉你原平面上最好的直线也要分错不少个点。拉动「抬升程度」,每个点按「离中心有多远」被抬起来——越靠外抬得越高,于是内圈留在低处、外圈升到高处,两类在高度上分开了。

这时放一个水平切面进去,就能干净利落地把两类切开。打开「显示切面与地面分界圆」,再点「俯视」回到平面视角:刚才那个平面切口在地面上投影成了一个圆。同一刀,在高维里是平的,在原平面里是弯的。

什么时候它会骗你

  • 这一页把映射画了出来,真实的核方法通常不这么算。页面明确标注了这一点:实际的核技巧只计算两点在高维空间里的内积,从不真的把坐标算出来。这里显式画出映射是为了让机制看得见,不代表实现方式。
  • 核函数选错,等于换了一套错的假设。这一页用的新坐标是「到中心的距离」,正好配得上同心圆这种结构。换一种数据分布,这个映射就未必管用。高斯核、多项式核各自隐含着不同的相似度假设,选错了不会报错,只会效果平平。
  • 抬得越高越容易分开,也越容易过拟合。高斯核的带宽取得很小时,模型几乎能把任意数据分开——包括噪声。训练成绩接近完美而测试成绩很差,通常就是这个原因。

常见问题

核技巧为什么不用真的把数据升到高维?
因为 SVM 的求解过程只用到样本两两之间的内积,从不需要单个样本的高维坐标。核函数直接给出高维空间里的内积值,于是可以在无穷维空间里工作,计算量却只和样本数有关,不和维度有关。
常用的核函数有哪些?
线性核(等于不做映射)、多项式核(适合有交互作用的特征)、高斯核 RBF(最通用,按距离衰减的相似度)、Sigmoid 核。实践中默认从 RBF 开始试,并用交叉验证调它的带宽参数和惩罚参数 C。
线性不可分就一定要用核函数吗?
不一定。也可以手工构造特征(比如直接加一列「到中心的距离」),或者换用树模型、神经网络这些本身就能表达非线性的方法。核方法的优势在于样本量不大时既灵活又不容易过拟合。

本页为教学合成数据;抬升映射为显式绘制的教学演示,实际核方法隐式计算内积,不产生高维坐标。

作者与维护:覃秉丰 · 关于覃秉丰 · 引用本页讲解

继续学习