分类与决策边界
分类器之间真正的差别,不在准确率那个数字上,而在它画出来的边界形状上。直线、曲面、阶梯、锯齿——每一种形状都对应一组关于"世界长什么样"的假设。这一页把四种常见分类器放在同一批数据上,让你直接看见这些假设合不合适。
LAB 01
逻辑回归
点两类样本,看直线边界与概率等高线一起生成
训练准确率—
权重 (w₀, w₁, w₂)—
决策边界方程—
平均对数似然—
逻辑回归的边界永远是一条直线(高维里是超平面)。在"两团高斯"上它几乎无懈可击;换成"同心圆"或"异或",准确率会立刻掉到 50% 附近——那是瞎猜的水平。这不是训练不充分,是模型族里根本不存在能分开它们的函数。遇到这种情况,正确的反应是换特征或换模型,而不是继续调参。比如给同心圆加一个 x²+y² 的特征,逻辑回归立刻就能分开——这正是核方法在做的事,只不过它把这一步自动化了。另外注意颜色的深浅:那是预测概率,不是硬分类。离边界越远颜色越实,说明模型越有把握。把正则化强度拉大,会看到颜色整体变淡——权重被压小之后,模型对所有点都变得不那么确信了。
LAB 02
SVM 与核
最大间隔、支持向量高亮;换成 RBF 核后边界怎么弯曲
训练准确率—
支持向量个数 / 样本数—
特征空间里的间隔宽度 2/‖w‖—
这批数据线性可分吗—
先看支持向量:只有被圈出来的那些点参与了决策。把其余的点全部删掉,边界一动不动——这是 SVM 与逻辑回归最大的区别,后者的每一个样本都对结果有贡献。这也解释了 SVM 为什么对离群点相对稳健,以及为什么它在小样本上好用。再调 γ。γ 很小时 RBF 核退化得接近线性,边界几乎是直的;γ 很大时每个点只影响自己周围一小块,边界会碎成一个个孤岛,训练准确率 100% 而泛化能力为零——这就是核方法的过拟合长相。C 控制的是另一件事:允许多少点落进间隔里。C 很小时模型宁可分错几个也要保持间隔宽,C 很大时它会拼命把每个点都分对。γ 和 C 都不能靠看训练集来定,只能交叉验证。
LAB 03
决策树与随机森林
树逐层分裂,边界呈阶梯状;森林投票后边界变平滑
训练准确率—
测试准确率—
叶子数(单棵树)—
训练与测试的差距—
根结点实际切在哪儿—
单棵树的边界一定是横平竖直的阶梯。因为每次分裂只能问"某个特征是否小于某个值",斜着的分界线只能用无数个小台阶去逼近。把最大深度从 1 加到 12:训练准确率一路涨到 100%,测试准确率却在某一处见顶回落,图上能看到边界长出一堆细长条——那些是为了一两个点单独划出来的区域。把树的数量加到 50 以上再看。每棵树都用自助采样的数据、随机挑的特征来长,各自都过拟合;但它们的错误方向不一样,投票平均之后互相抵消,边界变得平滑,训练与测试的差距明显收窄。这就是集成方法的核心逻辑:与其造一个不偏不倚的模型,不如造一堆各偏各的,然后取平均。默认这组月牙数据上:深度 4 的单棵树训练 94.3%、测试 83.3%,差距 11 个点;同样深度的 50 棵森林是 97.9% 与 96.7%,差距只剩 1.2 个点。但集成买不回基学习器本来就缺的表达能力:深度只给 1 时,50 棵森林也只能到 85%,而深度 4 的森林是 96.7%。投票主要在压方差,不能替你把模型族做大。 新加的第三张图,是这棵树「凭什么切这一刀」。CART 在根结点上把两维的所有候选阈值都试一遍,算出切完之后的加权基尼,取最低的那个。那条曲线就是它试出来的全部结果,红点是它实际下的刀,同一刀也画回了第一张图上,两边能对上号。把噪声从 5% 拖到 60%,盯住曲线的谷底。最低点会从 0.206 一路抬到 0.260,谷也越来越浅——噪声大的时候,切在这儿和切在那儿的基尼差不了多少,树于是只能在一片近乎平坦的曲线上挑一个微弱的最低点,测试准确率同期从 85.0% 掉到 73.3%,边界也跟着变碎。这正是决策树不稳定的根源:它的每一刀都是在一条可能很平的曲线上取极值,数据抖一下,极值点就可能跳到别处,整棵树的结构随之重排。随机森林靠平均很多棵这样的树来消掉这种抖动,而不是靠让每一棵树更准。另外提醒一句:橙线和蓝线是沿两个不同维度切出来的,横轴虽然共用,比的应该是两条曲线各自的谷有多深,而不是它们的位置谁左谁右。
LAB 04
K 近邻
K 从 1 调到 50,边界从锯齿状逐渐化开
训练准确率—
测试准确率—
测试准确率最高的 K—
训练与测试的差距—
K = 1 时训练准确率一定是 100%。因为每个训练点离自己最近的邻居就是它自己。这是"训练误差完全没有意义"最干净的例子——一个模型可以在训练集上永远满分,而在新数据上一般般。把 K 从 1 慢慢加到 50,看边界:从贴着每个点的锯齿,逐渐化开成平滑的大块,最后大到一定程度时整片区域被多数类吞掉。K 就是这个模型唯一的复杂度旋钮,方向和阶数、深度正好相反:K 越小越复杂。右下那条测试曲线通常在中间某个 K 取到最高。顺带一提,K 近邻没有"训练"这一步,所有计算都推迟到预测时——代价是每预测一个点都要扫一遍全部训练数据,样本一多就很慢,这也是它在工业界用得少的主要原因。
这一页想说的
把四个分类器在"同心圆"和"异或"上各跑一遍,结论会很清楚:逻辑回归失败得干脆,SVM 换个核就行,树和 K 近邻几乎不受影响。这不是谁更聪明,而是它们对"边界应该长什么样"的先验不同。选模型的本质是选先验。所以在动手之前,先把数据画出来看一眼,往往比试遍所有算法更省时间;而在画不出来的高维问题里,交叉验证就是唯一可靠的裁判。