Skip to content

模型构建

本章目标

  1. 明确 train_model(...) 如何构建并训练 SVC
  2. 理解 SVC 的核心构造器参数(Ckernelgamma)及其数学对应关系。
  3. 看清训练完成后最重要的模型属性——n_support_support_vectors_dual_coef_intercept_

重点方法与概念速览

名称类型作用
train_model(...)函数构建并训练一个 sklearn.svm.SVC 模型,打印训练日志
SVC(...)scikit-learn 提供的 C-Support Vector Classification——基于 libsvm 的成熟实现
model.fit(X_train, y_train)方法求解对偶优化问题,找出支持向量和决策函数参数
model.n_support_属性各类别的支持向量数量——量化模型依赖的关键样本规模
model.support_vectors_属性支持向量的特征矩阵
model.dual_coef_属性对偶系数与标签的乘积 αiyi

1. train_model(...) 的函数签名

参数速览

适用函数:train_model(X_train, y_train, C=1.0, kernel='rbf', gamma='scale', random_state=42)

参数名类型说明示例取值
X_trainarray_like标准化后的训练特征矩阵,形状 (320,2),传入 SVC.fit()X_train_s
y_trainarray_like训练标签向量,二分类取值 {0,1}y_train
Cfloat正则化参数(误分类惩罚系数)。C 越大,间隔越窄、越不容忍误分类。默认 1.00.11.010.0
kernelstr核函数类型。默认 'rbf',当前同心圆数据的最优选择'linear''rbf''poly'
gammafloatstrRBF 核系数。'scale'(默认)时 γ=1/(dX.var())'auto'γ=1/d'scale''auto'0.11.0
random_stateint随机种子,保证概率估计等随机过程可复现。默认 4242
返回值SVC已完成 fit() 的模型对象,含 n_support_support_vectors_ 等属性

示例代码

python
from model_training.classification.svc import train_model

model = train_model(X_train_s, y_train)

理解重点

  • 当前入口很直接:只负责构建一个 RBF 核 SVCfit,没有多核并行对比或网格搜索。
  • 所有默认超参数(C=1.0kernel='rbf'gamma='scale')都写在函数签名里,阅读成本低。
  • train_model(...) 是对 sklearn.svm.SVC 的薄封装——算法本体是 scikit-learn 基于 libsvm 的 C++ 实现。

2. SVC 构造器核心参数

参数速览

适用 API:SVC(C=1.0, kernel='rbf', gamma='scale', random_state=42)

参数名类型说明示例取值
Cfloat软间隔惩罚系数,对应目标函数 CξiC → 间隔变窄、更关注训练精度;C → 间隔变宽、更关注泛化。默认 1.00.11.010.0100.0
kernelstr核函数类型。'linear''poly''rbf''sigmoid''precomputed'。默认 'rbf''rbf''linear''poly'
degreeint多项式核的次数 d,仅当 kernel='poly' 时生效。默认 3234
gammafloatstr核系数,控制单个训练样本的影响半径。'scale'(默认)时 γ=1/(n_featuresX.var())'auto'γ=1/n_features;传入 float 直接使用。γ → 影响半径缩小、边界更精细弯曲'scale''auto'0.011.010.0
coef0float核函数中的独立项 r,仅对 'poly''sigmoid' 核生效。默认 0.00.01.0
probabilitybool是否启用概率估计。True 时会在训练后额外做 5 折交叉验证 Platt scaling,显著增加训练耗时。默认 FalseFalseTrue
shrinkingbool是否使用收缩启发式加速优化。默认 TrueTrue
tolfloat优化停止容差。默认 1e-31e-31e-4
cache_sizefloat核矩阵缓存大小(MB)。默认 200200500
max_iterint求解器最大迭代次数。-1 表示无限制。默认 -1-11000
decision_function_shapestr多分类决策函数形状。'ovr'(One-vs-Rest)或 'ovo'(One-vs-One)。默认 'ovr''ovr''ovo'
random_stateint随机种子,控制概率估计等随机过程。当前设为 4242

示例代码

python
model = SVC(C=1.0, kernel="rbf", gamma="scale", random_state=42)
model.fit(X_train, y_train)

理解重点

  • SVC 的参数主要集中在核函数配置上——kernelgammadegreecoef0 都与非线性映射相关。
  • Cgamma 是最需要关注的超参数组合:C 控制容错,γ 控制核局部性——两者共同决定模型复杂度。
  • probability=False(默认)意味着当前流水线不使用 predict_proba 也不画 ROC 曲线——这是 SVC 与其他分类算法分册在评估体系上的重要差异。
  • SVC 的 fit() 是迭代优化——求解对偶二次规划问题(libsvm 的 SMO 算法),这与 GaussianNB(解析解)和 KNN(无训练)在计算特征上完全不同。

3. 训练完成后的关键属性

参数速览

属性名类型数学含义说明
support_vectors_ndarray,形状 (n_sv, n_features)SV={xiαi>0}所有支持向量的特征矩阵
n_support_ndarray,形状 (n_classes,)每个类别的支持向量数量,二分类返回 [n_sv_class0, n_sv_class1]
support_ndarray,形状 (n_sv,)支持向量在训练集中对应的索引
dual_coef_ndarray,形状 (n_classes-1, n_sv)αiyi对偶系数与标签的乘积——非支持向量的项为 0
intercept_ndarray,形状 (n_classes*(n_classes-1)/2,)b决策函数的偏置项
classes_ndarray,形状 (n_classes,)模型识别到的类别标签列表
shape_fit_tuple训练数据特征维度 d,当前为 (2,)

示例代码

python
print(f"支持向量总数: {model.n_support_.sum()}")
print(f"各类别支持向量数: {model.n_support_.tolist()}")
print(f"截距: {model.intercept_}")

理解重点

  • n_support_ 是 SVC 最有教学意义的属性——它直接将"支持向量决定边界"这一理论概念量化为可观察的数字。
  • dual_coef_support_vectors_ 组合起来完整定义了决策函数 f(x)=αiyiK(xi,x)+b
  • 支持向量通常只占训练样本的 20%~40%——这是 SVC 稀疏性的直接体现,也是它在内存效率上优于 KNN 的原因之一。

4. 训练阶段的工程封装

除了 SVC(...).fit(...) 之外,train_model(...) 还做了几层工程包装:

输出项作用
@print_func_info 标题帮助在终端中定位训练入口
@timeit 训练耗时观察当前模型拟合时间——SVC 的二次规划迭代比 GaussianNB 慢但比深度学习快
支持向量总数 日志快速查看模型依赖的关键样本规模
各类别支持向量数 日志观察两类样本对边界的贡献差异

理解重点

  • 当前封装强调教学型可读性——通过装饰器打印函数信息和耗时,通过 print 输出 n_support_
  • 支持向量数量是最重要的日志输出——它直接反映了分类任务的难度和模型的稀疏程度。
  • 这一层把"构建模型""训练模型""打印结果"收在一个函数里,方便流水线和文档复用。

常见坑

  1. 误以为当前实现默认是线性核——源码明确使用 kernel='rbf',是对同心圆数据的直接回应。
  2. 只知道 predict(...),却忽略 n_support_support_vectors_ 才是理解 SVC 行为的关键属性。
  3. C 当成"越大模型越强"的参数——C 容易过拟合,需要结合数据噪声水平调整。
  4. 忘记 probability=False 的默认值——当前流水线不产生概率输出、不画 ROC 曲线,这是与逻辑回归等分册的评估差异。
  5. 把训练函数和后续评估逻辑混在一起理解——train_model 只负责训练主模型,不负责混淆矩阵等诊断。

小结

  • train_model(...) 是本仓库 SVC 的核心训练入口,是对 sklearn.svm.SVC 的薄封装。
  • SVC 的关键参数是 C(软间隔容错)、kernel(核函数类型)和 gamma(RBF 核局部半径)。
  • 训练完成后的核心属性:n_support_(支持向量数)、support_vectors_(支持向量特征)、dual_coef_αiyi)、intercept_b)——四者共同定义决策函数。
  • SVC 的 fit() 是真正的迭代优化(二次规划 SMO 算法),在训练效率上介于解析解模型和深度学习之间。