P4-13.2 kernel 的入门含义¶
Section ID:
P4-13.2Version:v2026.07.20
P4-13.1 把 SVM (support vector machine) 读成了 寻找大 margin boundary 的分类器。接着自然会冒出下一个问题。
如果 boundary 必须保持成一条直线,那么那些用直线不好分开的数据该怎么办?
这个问题正是现在必须介绍 kernel 的原因。
kernel 是这样一种想法:让数据在另一种表示空间里被比较,从而让原本在线性空间里难以分开的结构变得更容易处理。
所以,13.2 的核心不是 一个新的魔法函数,而是这样一种观点:只要表示方式变了,即使线性 boundary 也会拥有不同的意义。
这一节不会重新长篇重复 SVM 的基本定义。寻找大 margin boundary 这个核心直觉,会通过 P4-13.1 和 概念词汇表 再接回来。这里专注的是:为什么要引入改变表示空间的想法。
本节范围¶
这一节回答下面这些问题。
- 为什么有些数据只靠线性 boundary 很难分开?
- 改变表示或 feature space 到底是什么意思?
- 为什么说 kernel 能
不显式构造所有新特征,也照样有帮助? - polynomial、RBF 这些名字分别在暗示什么?
- 什么时候 kernel-based SVM 值得成为候选?
gamma、degree、coef0 这些设置该怎样读,以及验证成本该怎么看,会在 P4-9.1 和 P4-9.2 再接回来。也就是说,这一节先专注抓住 只要 representation space 改变,linear boundary 的意义也会改变 这个想法。
用kernel 的入门含义留下的判断标准¶
- 能举例说明为什么线性 boundary 有时会显得不够。
- 能说明如果 feature space 改变,同一批数据会被读成不同的结构。
- 能在入门层面把 kernel 解释成
一种相似度计算方式,也是间接使用更丰富表示空间的想法。 - 能从直觉上说出 polynomial kernel 和 RBF kernel 分别在意什么样的非线性。
- 能把 kernel-based 方法放在
当线性 boundary 看起来不足时才想起的候选这个位置上,而不是当成默认答案。
这一节建议怎么读¶
因为这里会一下子冒出好几个新词,第一次读时最好只按下面四个问题来抓。
- 为什么光靠
找到更好的直线有时还不够? - feature space 一旦改变,到底会多看到什么?
- 直接加新特征,和用 kernel 间接实现类似效果,这两件事怎样连起来?
- polynomial 和 RBF 分别在强调什么结构?
只要这四步顺序抓住了,kernel 就更容易被读成 关于问题表示的第四个问题,而不是被误当成 一个全新的模型名字。
学习背景¶
P4-13.1 把 SVM 读成寻找 好的线性 boundary 的模型。但现实数据常常会表现成下面这种样子。
- class 以弯曲的方式纠缠在一起
- 呈现中心和外圈这样的圆形结构
- 两个特征的乘积或交互似乎很重要
此时问题就不会停在 还有没有更好的直线?,而会转成 在这个空间里用直线来读问题,本身是不是就太受限了?
| 前一节 | 到这一节发生变化的问题 |
|---|---|
| P4-13.1 SVM 的直觉 | 什么是好的直线 boundary? |
| P4-13.2 kernel 的入门含义 | 用来阅读直线 boundary 的空间本身,是否应该改变? |
所以,13.2 不是在推翻 13.1。它是在承认线性 boundary 的力量之后,再补上一句:只要表示改变了,线性本身的意义也会改变。
主要学习内容¶
前面已经看过什么,而这一节新改变了什么¶
如果这一节看起来像突然讲了新故事,最好先把前面已经看过的三件事重新抓住。
- P4-11.2 看过
线性 score 和 decision boundary。 - P4-12.2 看过
表示方式和计算标准一变,同样的数据也会被读成不同的结构。 - P4-13.1 看过
在同一坐标空间里,怎样找到更好的线性 boundary。
P4-13.2 不是把这三件事扔掉,而是在问:当它们都还不够时,下一步应该多问什么。
如果 13.1 是在同一个空间里找更好的 boundary,那么 13.2 就是在问:这个空间本身有没有把问题揭示得足够简单。
为什么有些数据无法被直线很好地分开¶
最有名的例子就是 XOR 这种分类问题。假设二维平面里有四个点。
- 左下和右上属于 class 0
- 左上和右下属于 class 1
在这种情况下,很难用一条直线把两个 class 干净地切开。无论画哪条直线,都很容易把对角线方向的两个点留在同一边。
问题不一定是数据本身太难,而可能是当前坐标与特征表示对线性分离并不友好。
关键点在于:不是数据天生 太难,而可能只是当前表示方式对线性分离不友好。所以,如果原始空间里的直线 boundary 看起来总是别扭,那么在 boundary 本身之前,就有理由先问表示方式是不是应该改变。
这里重要的是把 是不是该继续找更好的直线? 和 是不是该改变读取直线的空间本身? 分开。
- P4-13.1 的问题是:能不能在同一坐标空间里找到更好的 boundary?
- P4-13.2 的问题是:这个坐标空间本身,是否足够简单地揭示了问题结构?
所以,回头看 soft margin 或 C,更接近 在同一个空间里把 boundary 选得更好;而 kernel 更接近 重新阅读 boundary 所处的空间本身。
改变表示到底是什么意思¶
改变表示,不等于 丢掉原始特征。通常它更接近下面这些动作。
- 组合已有特征
- 构造新的交互特征
- 用另一种视角重新看同一批数据
例如有两个特征 \(x_1\) 和 \(x_2\),就可以再加上像 x1 * x2 这样的新特征。这样一来,原本在二维空间里难以分开的结构,在新空间里就可能变得简单得多。
这个流程可以简单画成下面这样。
flowchart TD
A["原始特征<br/>x1, x2"]
B["加入新的交互视角<br/>例如 x1 * x2"]
C["新的特征空间"]
D["在线性分隔器下也许就能分开"]
A --> B --> C --> D
这张图展示的就是 kernel 想法的起点。比起先把 boundary 变复杂,更重要的是:只要 feature representation 改变,同样的数据就可能重新被更简单的线性 boundary 读懂。
这里最核心的一句话是:
kernel 的起点,是在改变 boundary 之前,先改变表示方式。
读者尤其要抓住下面几点。
- 不需要太快就断定 class 复杂是因为
模型太弱。 - 更应该先问:
当前坐标轴和特征组合是不是没有把结构揭示得足够简单? - kernel 是对这个问题的一种代表性回答。
所以,kernel 与其说是把模型变复杂的技术,不如说更接近 重新设定读取问题的坐标系 的技术。
直接做 feature expansion 和 kernel 的想法,有什么相同又有什么不同¶
这里很容易一下子读太快,所以最好先把共同点和不同点分开。
| 比较问题 | 直接 feature expansion | kernel 的想法 |
|---|---|---|
| 共同目标 | 在更丰富的表示空间里重新读取结构 | 在更丰富的表示空间里重新读取结构 |
| 人直接做什么 | 显式地构造 x1 * x2、x1^2 这样的新特征 | 用原始空间里的计算,间接实现丰富空间里的比较效果 |
| 读者首先要抓什么 | 哪种组合特征看起来必要? | 想强调哪种相似度结构? |
所以,kernel 并不是和 direct feature expansion 竞争的另一种魔法。更自然的读法是:它把同一个更宽的想法,也就是 在更丰富的表示里看问题,用一种更一般化的计算路径实现了出来。
kernel 这个名字到底指什么¶
在这一节里,比起数学严密性,更重要的是先抓住:这个名字到底指向什么。
kernel 是这样一种核心计算:给定两个输入,它会告诉你在更丰富的表示空间里,这两个输入到底有多相似、或多接近。
所以,kernel 指向的并不是 所有新特征本身,而是那个空间里最核心的比较计算。也正因为如此,读者不需要一开始就抓太多问题。
- 这个 kernel 强调的到底是哪种相似度?
- 它会不会让交互更显眼?
- 它会不会对局部、附近的结构反应更强?
只要这三个问题抓住了,读者看到的就不再只是名字,而是 这个 kernel 到底在推动哪种比较方式。
为什么说不需要把所有新特征都显式做出来¶
在入门层面,先抓住下面这句话就足够了。
kernel 的想法,是用原始空间里的计算,替代掉在更丰富表示空间里本来要用到的 inner product 或 similarity。
这意味着:你不一定要把高维空间里的所有新特征一项一项都写出来,才能像是在那个更丰富空间里比较两个点。
这个想法可以画成下面这个流程。
flowchart TD
A["原始输入对"]
B["显式构造特征映射吗?"]
C["核函数 计算"]
D["在隐含空间里运行线性 SVM"]
A --> B
A --> C --> D
这张图展示了为什么说 kernel 能 不显式地把所有新特征都做出来,却依然有帮助。关键就在这条绕行路径:从原始输入对直接计算 similarity,然后像是在那个隐含的新空间里运行一个 linear SVM。
读者此时应该先留下的判断其实很简单。
我能不能自己直接设计这些组合特征?还是我更想先决定要强调哪种相似度结构?
kernel 更接近第二个问题。
细部学习内容¶
polynomial 和 RBF 分别在暗示什么¶
这一节不需要把所有 kernel 都背下来。只要先抓住两个代表性名字各自在强调什么就够了。
polynomial kernel¶
- 它更在意 feature 之间的乘积、平方和交互
- 当
x1^2、x1*x2、x2^2这种组合看起来很重要时,就很容易想到它 - 在入门层面,它可以被读成一种接近
显式加入很多交互特征的想法
RBF kernel¶
- 它更在意点周边的局部性(locality) 和基于距离的相似度
- 它给人的感觉是:点一旦远开,相似度就会很快下降,而附近点的反应会更强
- 在入门层面,它常被介绍成一种能让曲线 boundary 更灵活的代表 kernel
最简单的对比可以压成下面这样。
| kernel | 读者的第一感觉 |
|---|---|
| polynomial | 更强调交互特征 |
| RBF | 更敏感地强调附近的局部结构 |
同样的差别,也可以用更贴近实务的方式再读一次。
| kernel | 数据暗示的结构 | 读者的问题 |
|---|---|---|
| polynomial | 特征之间的乘积、平方、组合看起来很重要 | 是不是组合比单个值更重要? |
| RBF | 附近的点形成局部团块,boundary 看起来是弯曲的 | 是不是附近区域的形状在分开 class? |
所以,kernel 的名字不只是一个选项标签,它还在暗示 正在用什么镜头重新读数据。
圆形结构应该怎样重读¶
XOR 是交互特征的代表性例子。相对地,当想到 RBF 时,通常更适合想象 中心和外圈 这样的圆形结构。
可以想象下面这种场景。
- 靠近中心的点属于 class 0
- 半径更大的外圈点属于 class 1
这时,只看 x1 或只看 x2 的直线 boundary 会显得别扭。但如果表示方式更强地在乎 离原点有多远 这种距离感,问题就会清楚得多。
在入门层面,这可以压成下面几句话。
- polynomial 更自然地连接到
强调特征组合的想法 - RBF 更自然地连接到
强调局部或距离结构的想法
所以,两者都在处理非线性,但它们并不是用同一种方式来读非线性。
如果把这个差异翻成项目记录语言,可以写成下面这样。
| 比较项 | 原始空间 | 新表示或 kernel 视角 | 读取方式 |
|---|---|---|---|
| 模糊案例 | class 看起来混在一起 | 分离可能更清楚 | 表示一变,同一个案例也会被读成不同结构 |
| 是否需要 review | 高 | 可能减少,或性质改变 | review 问题本身也会跟着变化 |
| 下一个问题 | 线性标准是否不足? | 哪种 kernel 更合适? | 不要把表示问题和 boundary 问题拆开看 |
所以,kernel 这一节与其读成 公式更复杂了,不如读成 同一批案例在另一个空间里被重新排布了。即使最后分类结果看起来类似,也仍然要单独确认:哪些案例还在模糊,哪些案例变得更清楚。
logistic regression、linear SVM、kernel SVM 是怎样连起来的¶
这三种方法并不是三个完全隔离的世界。它们更大的不同,在于分别让读者先看 boundary 的哪个层面。
| 模型 | 中心想法 |
|---|---|
| logistic regression | 线性 score 与像 probability 一样的输出 |
| linear SVM | 留有更大 margin 的线性 boundary |
| kernel SVM | 改变表示空间后,让原本看起来非线性的结构也能重新用 linear SVM 的想法来读 |
所以,kernel SVM 更准确的理解不是 抛弃 linear SVM,而是 把 linear SVM 所读取的空间变得更丰富。
用课程语言再压缩一次,顺序是下面这样。
- P4-11 的 logistic regression:学习线性 score 与 decision boundary
- P4-13.1 的 SVM:在这些线性 boundary 里挑出更稳定的那条
- P4-13.2 的 kernel:重新设计线性 boundary 所工作的空间本身
只要这个顺序抓住了,后面即使出现更多模型,读者也能重新整理成:这个模型改变的是 boundary、比较规则,还是表示方式?
什么算 boundary 调整,什么算表示改变¶
这一节里最容易混淆的地方,是把 把 boundary 调得更好 和 改变表示空间 读成同一件事。
| 问题 | 更接近哪一节 | 现在应该这样读 |
|---|---|---|
| 能不能在同一坐标空间里找到更宽松的 boundary? | P4-13.1 | margin、support vector、soft margin 这一类问题 |
| 当前坐标空间本身,是否足够简单地揭示 class 结构? | P4-13.2 | kernel、显式 feature expansion、表示空间这一类问题 |
这个区分重要,是因为当直线 boundary 显得别扭时,读者不该立刻跳到 更复杂的模型,而应该先分开读:到底缺的是什么。
- boundary 本身不够吗?
- threshold 不够吗?
- 距离规则不够吗?
- 表示空间不够吗?
kernel 更接近这四个问题里的最后一个。
案例与示例¶
案例 1. 直线分不开,但交互特征一加入就能分开的不良模式¶
某个制造团队想用两个传感器来分类不良品。人最先看到的直觉不是 温度单独高 或 压力单独高,而是 当两个值以某种组合一起出现时,不良会变多。
团队先试了 linear model 和 linear SVM,但 boundary 总是显得不自然。如果只看每个轴,正常和不良样本会混在一起;一条直线很难把这种四个区域里对角交错的模式切干净。如果一直只把问题读成 还有没有更好的直线?,解释就会继续卡住。
flowchart TD
A["传感器特征对"]
B["原始特征空间"]
C["线性边界仍然很别扭"]
D["加入交互视角"]
E["新的特征空间"]
F["线性分离变得更清晰"]
A --> B --> C
A --> D --> E --> F
在这个场景里,kernel 的想法更接近 先换表示方式试试,而不是 直接把 boundary 画得更复杂。如果开始认真看待像两个传感器数值的乘积或平方这类交互特征,原来空间里看起来纠缠的模式,在新表示空间里就可能像一条更简单的线性 boundary。也就是说,变的不是数据,而是读取数据的坐标系。
可见的结果来自前后对比:原始表示下分离依旧很别扭,而一旦把交互特征纳入考虑,class 就会分得更清楚。这样一来,读者就能解释:kernel 不是 魔法函数,而是 重新设定表示空间的想法。
案例 2. 实务上什么时候该把 kernel-based SVM 当成候选¶
这里也适合把记录结构一起固定下来。kernel 这一节不只是学习 另一个函数名,而是在记录 同一个案例在另一种表示空间里会怎样被重读。所以,最好把原始空间里哪些案例模糊、新表示里它们怎样被重新排布、review 目标有没有减少或改变,一起记下来。这种变化首先应该被读成一种信号,说明 在相近分数下,哪些失败模式更容易被分开了;而不该被读成只要换了表示,就已经把原因解释完了。
| 一起留下的记录 | 为什么需要 |
|---|---|
| 原始空间里的模糊案例 | 为了回看线性分离为什么显得别扭 |
| 新表示空间里的重新排布 | 为了确认哪些案例变得更清楚 |
| review 状态变化 | 为了看表示改变是否真的减少了 review 目标 |
| 下一个问题 | 为了决定接下来先看 polynomial、RBF,还是显式 feature expansion |
如果把 kernel 的位置重新带回实务问题,kernel-based SVM 并不是所有问题的默认选项。但在下面这些场景里,它可以成为候选。
| 场景 | 为什么会成为候选 |
|---|---|
| 线性模型的表现一直显得模糊 | 单靠直线 boundary 可能读不到真正的结构 |
| feature 之间的交互看起来很重要 | polynomial 风格的想法可能更合适 |
| 数据规模不是极大,而且 boundary 的形状本身很重要 | kernel-based boundary 可以更灵活 |
| 维度不算高,但模式看起来是弯曲的 | 可能需要比 linear SVM 更丰富的表示 |
反过来,如果数据非常大,或 real-time prediction cost 特别重要,kernel-based 方法就可能变成负担。这一点会在 P4-9 的 hyperparameter 和计算成本讨论里再接回来。
读者常见的误解也要一起拆开。
只要看起来是非线性,就一定该直接上 kernel SVM 吗?不是。只要线性模型显得不强,就该立刻换更复杂的 kernel 吗?也不是。
通常更稳妥的读取顺序是下面这样。
- 先检查 feature scale 和 preprocessing 是否合适。
- 再确认线性 baseline 是否真的不够。
- 再看显式 feature expansion 或更简单的非线性标准。
- 最后才把 kernel-based SVM 提上候选。
保持这个顺序的原因,是 kernel 很强大,也因此很容易把 到底是什么真的变好了 这件事弄模糊。真正重要的不是尽快用上 kernel,而是能够说明 为什么线性不够,以及 为什么 kernel 正好补上了这个不足。
学术背景与历史¶
kernel 的想法是在 SVM 走向更广泛应用的过程中一同重要起来的。Boser、Guyon、Vapnik 的 A Training Algorithm for Optimal Margin Classifiers 以及后续 kernel method 研究,打开了把 optimal-margin classifier 用到更灵活数据结构上的路径。
这一节真正想让读者留下的历史核心其实很简单:kernel 是一种计算上的绕行,让线性 boundary 的优势可以在更丰富的表示空间里被重新使用。
练习与示例¶
Python 例子:重新读一个 XOR 形状¶
最简单的确认方式,就是重新读一个 XOR 形状的例子。这个例子会直接让读者看到 为什么要改变表示方式。
- 问题场景:四个点在对角线上交错成两个 class
- 输入(input):
x1,x2 - label:class 0 / class 1
- 要检查的概念:
- 在原始坐标里,像
x1 + x2这样的简单线性读取并不自然 - 一旦加上
x1 * x2这个新特征,class 就会简单得多
示例输出如下。
这个结果里最关键的点很清楚。
- 在原始空间里,四个点按对角线交错,直线 boundary 很别扭。
- 但只要看
z = x1 * x2,class 0 就聚到z = 1,class 1 就聚到z = -1。
所以,不是数据变了,而是 表示方式 变了。
这件事之所以重要,是因为它能阻止读者把 kernel 误解成只是 让模型变成非线性的技巧。更准确的读取顺序是下面这样。
- 在原始坐标里,class 看起来是交错的。
- 加上一个新特征以后,结构变简单了。
- 在那个更简单的空间里,线性 boundary 的想法又重新有用了。
所以,kernel 与其说应该被介绍成 直接抓住非线性问题的技术,不如说更适合被介绍成 重新找回可线性读取表示的技术。
如果用同一个小场景把 Module 4 再比较一次¶
当把 Module 4 整体重读时,通常比起按算法名字排列,更有用的是按 同一个问题场景里,每个模型首先让读者比较什么 来组织。下面这张表的作用,就是防止 kernel 太快被读成 高级模型。
| 同一个场景 | 优先想到的模型 | 首先要看的比较轴 | 立刻留下的下一个问题 |
|---|---|---|---|
| 用广告费、季节、访问量去预测销售额这类连续值 | linear regression | 平均误差是否真的比 baseline 更好 | 直线漏掉的大误差段在哪里? |
| 要把客户流失切成 0/1,同时还想一起看 score 和 policy | logistic regression | score、threshold、边界附近案例 | 要改 threshold,还是要补更多 feature? |
| 想先通过相似老客户来判断新客户 | k-NN | 哪些 neighbor 被纳入,k 一改结果怎么摇晃 | 要不要重新调整 distance rule 或 scale? |
| 同一个分类问题里,想要一条更有余量的 boundary | linear SVM | margin 附近案例,以及像 support vector 一样的点 | 要不要调 C,还是继续看 soft margin? |
| 直线 boundary 总是显得别扭,而且 feature 组合或弯曲结构看起来更重要 | kernel SVM | 同一批案例在表示空间改变后如何重新排布 | polynomial、RBF、显式 feature expansion 该先看哪一个? |
这个比较的重点并不是 谁更高级,而是把同一个场景里,不同模型会让读者先问什么,再次固定下来。
| 通用记录语言 | Module 4 比较里应立刻留下的内容 |
|---|---|
| 看见的结构 | 同一个分类问题也可以分别从 score、邻居、margin、表示空间这些问题来读取 |
| 解释边界 | 更复杂的候选不一定天然更适合作为第一出发点,也不一定更容易解释 |
| 下一个问题 | 现在真正不足的,是否该先区分成平均误差、threshold policy、距离规则、boundary 余量,还是表示空间本身? |
检查清单¶
- 是否把现在困难的是直线 boundary 不足,还是 feature representation 不足,这两件事区分开了?
- 能不能把 kernel 解释成观察另一表示空间的镜头,而不是新的魔法函数?
- 是否记录了同一批案例在新表示空间里是怎样重新排布的?
- 即使线性 boundary 看起来不够,能不能说明第一步不是立刻丢掉线性思路,而是先问
表示空间改变后,线性 boundary 会不会重新有意义? - 能不能说明 kernel 是一种用原始空间计算来处理更丰富空间相似度的想法?
- 能不能说明 polynomial 更强调交互特征,而 RBF 更强调局部相似度结构?
出处与参考资料¶
- scikit-learn, Support Vector Machines, scikit-learn User Guide, 确认日期: 2026-06-27. https://scikit-learn.org/stable/modules/svm.html
- B. E. Boser, I. M. Guyon, V. N. Vapnik, A Training Algorithm for Optimal Margin Classifiers, COLT 1992, 确认日期: 2026-07-19. https://doi.org/10.1145/130385.130401