SVM 为什么对特征缩放敏感?
简化版
SVM 对尺度敏感:线性范数正则和 RBF 距离都会被大数值特征支配。标准化器必须只在训练折拟合并与模型一起发布;稀疏文本通常避免中心化以免矩阵变稠密。
详细版
-
RBF gamma 的有效含义依赖特征尺度。
-
StandardScaler 对异常值敏感,可比较 RobustScaler。
-
one-hot 0/1 特征是否缩放要结合模型。
-
Pipeline 防交叉验证泄漏。
-
线上必须复用训练 mean/scale。
完整版教学
一、缩放定义了距离与间隔的坐标系
SVM 通过点积和距离构造边界。
若收入范围 0~100000、年龄 0~100,未缩放时收入一单位变化对距离的贡献可完全压过年龄。
缩放不是为了让数据好看,而是让正则对各坐标和核距离具有可比较的量纲。
二、底层机制与公式
z_j=(x_j-mu_j)/sigma_j
RBF=exp(-gamma*sum_j (z_j-z_j')²)
三、带数字的推演
两点年龄差 10、收入差 10,000,未缩放平方距离约 10^8;若标准差分别 10 和 20,000,标准化后贡献为 1²+0.5²=1.25。
缩放后两维都能影响核距离与间隔,C、γ 等超参数的数值含义也随之改变;Scaler 必须只在训练折拟合并与 SVM 一起部署,避免验证泄漏和线上尺度错位。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| StandardScaler | 常用、均值方差 | 异常值敏感 |
| RobustScaler | 中位数/IQR | 小样本分位不稳 |
| MaxAbsScaler | 保持稀疏零值 | 不中心化 |
五、执行流程
先划分/CV -> 每折 scaler.fit(train) -> transform train/val
-> 联合调 C/gamma -> 保存 scaler+SVM -> 线上输入 schema 检查
六、边界条件与工程代价
对 CSR 文本做均值中心化会把零变成非零,内存爆炸;使用 MaxAbs 或 with_mean=False。
单位变更如元变万元若未更新 scaler,会造成严重训练服务偏差,需监控标准化后分布。
记忆钩子:SVM 缩放是在定义几何坐标系。
七、常见误区与追问
-
误区:树模型不缩放,所以 SVM 也不必。 SVM 依赖距离和范数。
-
追问:为何 scaler 要折内 fit? 验证分布统计不能进入训练。
-
误区:所有特征都必须中心化。 稀疏矩阵中心化会变稠密。
-
追问:缩放后 gamma 要重调吗? 要,距离尺度已经改变。
-
追问:上线发布什么? scaler 参数、特征顺序和 SVM 同版本发布。
八、加强记忆
SVM 缩放是在定义几何坐标系。
先缩放再调 C/gamma,并把 scaler 当模型的一部分,而不是训练前临时脚本。