正在加载中...

展开本页目录
算法教程SVM算法分析系统

SVM算法分析系统

No.021 · 在线教程

支持向量机(Support Vector Machine, SVM)是一类基于间隔最大化原则的监督学习模型,既可用于分类任务,也可用于回归任务(SVR)。其核心思想是:在特征空间中构造最优分离超平面,使分类间隔最大;在回归中构造带 ε 不敏感带的回归函数,使预测误差可控且模型尽…

SVM 算法(支持向量机)

1. 方法概述

支持向量机(Support Vector Machine, SVM)是一类基于间隔最大化原则的监督学习模型,既可用于分类任务,也可用于回归任务(SVR)。其核心思想是:在特征空间中构造最优分离超平面,使分类间隔最大;在回归中构造带 \(\varepsilon\) 不敏感带的回归函数,使预测误差可控且模型尽量平滑。

设共有 \(n\) 个样本、\(d\) 个特征,数据集表示为

$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$

其中 \(y_i\) 为类别标签(分类)或连续值(回归)。

2. 公共部分(预处理与核函数)

系统在模型训练前支持缺失处理、编码、缩放、特征构造、特征选择与降维等步骤(均在训练集上拟合,再作用于测试集或交叉验证折内,避免数据泄漏)。

2.1 标准化与归一化

Z-score 标准化: $$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$

Min-Max 归一化: $$ z_{ij}=\frac{x_{ij}-\min x_j}{\max x_j-\min x_j+\varepsilon} \tag{3} $$

2.2 One-Hot 编码(类别型变量)

$$ x^{(k)}_{ij}= \begin{cases} 1,& x_{ij}=\text{cat}_k\\ 0,& \text{otherwise} \end{cases} \tag{4} $$

2.3 多项式特征

$$ \phi(x)=\{x_1^{a_1}x_2^{a_2}\cdots x_d^{a_d}\mid a_1+\cdots+a_d\le d_p\} \tag{5} $$

2.4 特征选择(方差阈值 / 互信息)

方差阈值: $$ \operatorname{Var}(x_j)=\frac{1}{n-1}\sum_{i=1}^{n}(x_{ij}-\mu_j)^2 \tag{6} $$

互信息: $$ I(X;Y)=\sum_{x\in X}\sum_{y\in Y}p(x,y)\log\frac{p(x,y)}{p(x)p(y)} \tag{7} $$

2.5 降维(PCA)

协方差矩阵: $$ \Sigma=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})(x_i-\bar{x})^\top \tag{8} $$

主成分解释率: $$ \eta_k=\frac{\lambda_k}{\sum_{j=1}^{d}\lambda_j} \tag{9} $$

2.6 IQR 异常值截断(可选)

$$ \text{IQR}=Q_3-Q_1,\quad x\leftarrow \min(\max(x,Q_1-k\cdot\text{IQR}),\,Q_3+k\cdot\text{IQR}) \tag{10} $$

2.7 核函数(分类/回归通用)

线性核 $$ K(x,z)=x^\top z \tag{11} $$

多项式核 $$ K(x,z)=(\gamma x^\top z+r)^{d} \tag{12} $$

RBF 核 $$ K(x,z)=\exp\big(-\gamma\|x-z\|^2\big) \tag{13} $$

Sigmoid 核 $$ K(x,z)=\tanh(\gamma x^\top z+r) \tag{14} $$

2.8 符号说明

符号 含义
\(n\) 样本数量
\(d\) 特征维度
\(x_i\) 第 \(i\) 个样本特征向量
\(y_i\) 第 \(i\) 个样本标签/真实值
\(\phi(\cdot)\) 核映射函数
\(K(\cdot,\cdot)\) 核函数
\(w,b\) 超平面参数
\(\xi_i,\xi_i^*\) 松弛变量
\(C\) 惩罚系数
\(\gamma\) 核函数参数
\(\varepsilon\) SVR 不敏感带宽度
\(TP,FP,TN,FN\) 分类混淆矩阵四要素
\(\hat{y}_i\) 预测值

3. 回归版(SVR)

3.1 \(\varepsilon\)-不敏感损失

$$ L_\varepsilon(y,f(x))= \max\big(0,\ |y-f(x)|-\varepsilon\big) \tag{15} $$

3.2 优化问题

$$ \min_{w,b,\xi,\xi^*}\ \frac{1}{2}\|w\|^2+C\sum_{i=1}^{n}(\xi_i+\xi_i^*) \tag{16} $$

$$ \begin{aligned} y_i-(w^\top\phi(x_i)+b) &\le \varepsilon+\xi_i\\ (w^\top\phi(x_i)+b)-y_i &\le \varepsilon+\xi_i^*\\ \xi_i,\xi_i^*&\ge 0 \end{aligned} \tag{17} $$

3.3 回归函数

$$ f(x)=\sum_{i=1}^{n}(\alpha_i-\alpha_i^*)K(x_i,x)+b \tag{18} $$

3.4 回归评价指标

MAE $$ \text{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \tag{19} $$

MSE / RMSE $$ \text{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \tag{20} $$

$$ \text{RMSE}=\sqrt{\text{MSE}} \tag{21} $$

决定系数 $$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2} \tag{22} $$

3.5 回归文字说明(可直接用于论文)

  • 采用 SVR 进行回归建模,训练集拟合后在测试集上输出 \(\hat{y}\)。
  • 评价指标使用 MAE、MSE、RMSE 与 \(R^2\)(见式(19)–(22)),用于衡量预测误差与拟合优度。
  • 提供预测–真实对比图、残差直方图、残差–拟合图与 Q-Q 图,以检验残差分布与模型稳定性。
  • 交叉验证结果用于反映模型在不同折上的误差稳定性与泛化能力。

4. 分类版(SVC)

4.1 软间隔优化

$$ \min_{w,b,\xi}\ \frac{1}{2}\|w\|^2+C\sum_{i=1}^{n}\xi_i \tag{23} $$

$$ y_i\big(w^\top\phi(x_i)+b\big)\ge 1-\xi_i,\quad \xi_i\ge 0 \tag{24} $$

4.2 决策函数

$$ f(x)=\operatorname{sign}\Big(\sum_{i=1}^{n}\alpha_i y_i K(x_i,x)+b\Big) \tag{25} $$

4.3 分类评价指标

准确率 $$ \text{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \tag{26} $$

精确率 / 召回率 $$ \text{Precision}=\frac{TP}{TP+FP} \tag{27} $$

$$ \text{Recall}=\frac{TP}{TP+FN} \tag{28} $$

F1 值 $$ F1=\frac{2\cdot \text{Precision}\cdot \text{Recall}}{\text{Precision}+\text{Recall}} \tag{29} $$

宏/加权平均 $$ \text{Macro}=\frac{1}{C}\sum_{c=1}^{C}M_c,\quad \text{Weighted}=\sum_{c=1}^{C}\omega_c M_c \tag{30} $$

ROC 曲线与 AUC $$ \text{TPR}=\frac{TP}{TP+FN},\quad \text{FPR}=\frac{FP}{FP+TN} \tag{31} $$

$$ \text{AUC}=\int_0^1 \text{TPR}(\text{FPR})\,d(\text{FPR}) \tag{32} $$

4.4 分类文字说明(可直接用于论文)

  • 采用 SVC 训练最优分离超平面,并输出 Accuracy、Precision、Recall、F1 等指标(见式(26)–(30))。
  • 以混淆矩阵展示分类正确与错误的分布结构。
  • 若可获得概率/决策分数,可进一步绘制 ROC/PR 曲线与阈值–F1、阈值–TPR/FPR 等分析图,用于评估不同阈值下的分类性能与稳定性。

5. 训练与验证(公共)

5.1 训练/测试划分

若设置测试集比例为 \(t\in(0,1)\),则 $$ n_{\text{test}}=\lceil n\cdot t\rceil,\quad n_{\text{train}}=n-n_{\text{test}} \tag{33} $$

5.2 \(K\)-折交叉验证

对 \(K\) 折的评价指标取均值: $$ \bar{M}=\frac{1}{K}\sum_{k=1}^{K}M_k \tag{34} $$

6. 结果输出说明

系统输出的 Excel 包含:阅读指南、原始数据、预测、指标、参数、参数说明、特征工程报告、PCA 解释率、交叉验证与每折预测、报告摘要、图表清单、训练/测试集数据
图表输出按任务分为:

  • 回归:预测–真实散点、残差直方图、残差–拟合图、Q-Q 图、预测趋势对比图;
  • 分类:混淆矩阵、ROC 曲线、PR 曲线、阈值—F1、阈值—TPR/FPR、校准曲线、类别分布。

论文写作建议按以下顺序组织结果:

  1. 参数与特征工程(核函数、C、\(\gamma\)、\(\varepsilon\)、缩放与特征选择方式);
  2. 核心指标表(回归:MAE/MSE/RMSE/R²;分类:Accuracy/Precision/Recall/F1);
  3. 可视化图表(残差分析、ROC/PR 等);
  4. 交叉验证稳定性(各折指标与均值)。

在正文中给出模型公式与核心指标,详细的折内预测与参数清单可放入附录,以兼顾可读性与可复现性。

7. 与代码实现的对应关系

结合程序实现,SVM 桌面版并不是只输出单个指标表,而是按“参数设置 -> 计算 -> 时间戳结果目录 -> Excel 与图像同步导出”的链路工作。对应代码位于 具体的算法/SVM算法/core/critic_calculator.py具体的算法/SVM算法/runners/svm_run_from_config.py具体的算法/SVM算法/ui/upload_widget.py

实现上需要注意以下几点:

  1. 结果目录规则
    系统默认把结果写到 results/ 下的时间戳目录中,Excel 与 PNG 图表位于同一目录,便于论文直接引用,不再额外强制拆分独立图像子目录。

  2. Excel 工作表并非固定最小集,而是按任务动态扩展
    基础表通常包含:原始数据预测指标参数图表清单
    当启用详细导出时,还会增加:混淆矩阵参数说明特征工程报告特征选择分数PCA解释率交叉验证CV折iCV折i_预测报告摘要训练集数据测试集数据 等。

  3. 分类与回归图表是分开的
    分类任务实际会导出混淆矩阵、ROC、PR、阈值-F1、阈值-TPR/FPR、校准曲线、类别分布等图;
    回归任务会导出 pred_vs_truetrue_vs_pred_lineresiduals_histresiduals_qqresiduals_vs_pred 等图。

  4. 特征工程参数会原样回填到导出结果
    界面中的 preprocess 配置会一路传递到计算核心,因此论文方法部分可以直接写明是否进行了缺失值处理、One-Hot 编码、标准化、KBest、PCA/KPCA 等步骤,而不是只写“做了预处理”。

  5. 交叉验证部分支持逐折复核
    若设置 cv_folds >= 2,程序会额外导出每折指标,有条件时还会输出每折逐样本预测表,因此不仅能写均值指标,也能写稳定性和波动性。

  6. Excel 写出有引擎回退机制
    程序优先使用 xlsxwriter,不可用时会回退到 openpyxl。这意味着论文导出结构应以 sheet 内容为准,不应把某个引擎特性误写成算法方法的一部分。

8. 论文写作模板

方法描述模板:
“本文采用支持向量机模型进行建模分析。针对原始数据,先进行缺失值处理、类别变量编码与数值特征缩放,并根据需要实施特征选择或降维。随后在训练集上拟合 SVM 模型,并在测试集上输出预测结果与整体评价指标。分类任务采用 Accuracy、Precision、Recall、F1 及混淆矩阵进行评价;回归任务采用 MAE、RMSE 与 \(R^2\) 评价预测性能。为检验模型稳定性,进一步结合交叉验证结果进行综合分析。”

结果描述模板:
“程序导出的结果文件包含原始数据、逐样本预测结果、整体指标、参数配置、交叉验证结果及图表清单。分类场景下进一步输出 ROC、PR、阈值分析与校准曲线;回归场景下输出预测-真实对比图与残差诊断图。上述结果共同构成了模型性能、稳定性与可复核性的证据链,可直接用于论文结果章节与附录整理。”

9. 单篇终审补充

9.1 图题与表题对齐建议

  • 阅读指南 表可写为:表X SVM 结果文件阅读指南。
  • 原始数据 表可写为:表X SVM 原始输入数据表。
  • 预测 表可写为:表X SVM 逐样本预测结果表。
  • 指标 表可写为:表X SVM 分类性能指标表。
  • 混淆矩阵 表可写为:表X SVM 混淆矩阵结果表。
  • 参数 表可写为:表X SVM 参数配置表。
  • 参数说明 表可写为:表X SVM 参数说明表。
  • 特征工程报告 表可写为:表X SVM 特征工程报告表。
  • 交叉验证 表可写为:表X SVM 交叉验证汇总表。
  • CV折1CV折2CV折3 可分别写为:表X 第1折、第2折、第3折交叉验证结果表。
  • 报告摘要 表可写为:表X SVM 结果摘要表。
  • 图表清单 表可写为:表X SVM 图表索引表。
  • 训练集数据 表可写为:表X SVM 训练集数据表。
  • 测试集数据 表可写为:表X SVM 测试集数据表。
  • confusion_matrix.png 建议写为:图X SVM 混淆矩阵图。
  • roc.png 建议写为:图X SVM ROC 曲线图。
  • pr.png 建议写为:图X SVM PR 曲线图。
  • threshold_f1.png 建议写为:图X SVM 阈值-F1 曲线图。
  • threshold_tpr_fpr.png 建议写为:图X SVM 阈值-TPR/FPR 曲线图。
  • calibration.png 建议写为:图X SVM 校准曲线图。
  • class_distribution_triptych.png 建议写为:图X SVM 类别分布图。

9.2 终审说明

  • 当前可直接作为分类任务终审证据的代表性目录可采用 具体的算法/SVM算法/results/pytest_window1_baseline_svm_20260329_163703。主结果文件为 pytest_window1_baseline_svm_20260329_163703.xlsx
  • 该目录下真实工作表为 阅读指南/原始数据/预测/指标/混淆矩阵/参数/参数说明/特征工程报告/交叉验证/CV折1/CV折2/CV折3/报告摘要/图表清单/测试集数据/训练集数据。论文若写分类实验结果,正文最适合直接引用 指标混淆矩阵交叉验证图表清单 四类结果。
  • 当前真实图文件稳定为 confusion_matrix.pngroc.pngpr.pngthreshold_f1.pngthreshold_tpr_fpr.pngcalibration.pngclass_distribution_triptych.png。这组文件名已经能直接对应分类任务的主要图义,论文图题不需要再另造泛化命名。
  • 当前 repro 脚本为 repro_template_20260329_163704.py,但脚本中的输入口径是 SRC_FILE = 'svm_window1_input.csv',依赖脚本同目录下的输入快照文件 svm_window1_input.csv,而不是 repro_inputs/... 目录。这篇文档应把它写成“脚本同目录输入快照复现”,不能误写为统一的 repro_inputs 规范。
  • 因此,SVM 这篇在论文终稿里应强调其真实工程特点:结果簿按任务动态扩展,分类与回归图集不同,且当前代表性分类复现实例使用的是“脚本同目录 CSV 快照”口径。若后续要统一整理全部算法复现附录,SVM 目录值得再做一次 repro_inputs/... 标准化。

9.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法/SVM算法,本次采用的代表性结果目录为 具体的算法/SVM算法/results/pytest_window1_baseline_svm_20260329_163703

该目录当前只保留一份主结果工作簿:

  • pytest_window1_baseline_svm_20260329_163703.xlsx

实测工作表为:

  • 阅读指南
  • 原始数据
  • 预测
  • 指标
  • 混淆矩阵
  • 参数
  • 参数说明
  • 特征工程报告
  • 交叉验证
  • CV折1
  • CV折2
  • CV折3
  • 报告摘要
  • 图表清单
  • 测试集数据
  • 训练集数据

这说明当前代表性目录是分类任务证据,且导出结构已经覆盖参数说明、特征工程、交叉验证与训练/测试集数据。

当前目录中的真实图文件为:

  • confusion_matrix.png
  • roc.png
  • pr.png
  • threshold_f1.png
  • threshold_tpr_fpr.png
  • calibration.png
  • class_distribution_triptych.png

因此这一轮真实图证据是分类图集,不包含回归残差图。

复现实物方面,该目录实际包含:

  • 具体的算法/SVM算法/results/pytest_window1_baseline_svm_20260329_163703/repro_template_20260329_163704.py
  • 具体的算法/SVM算法/results/pytest_window1_baseline_svm_20260329_163703/svm_window1_input.csv

脚本中明确写成 SRC_FILE = 'svm_window1_input.csv'。因此这篇当前仍是“结果目录同级输入快照 + repro 脚本”的复现口径,而不是 repro_inputs/...

9.4 软件实现核查补充(2026-07)

  • 当前源码核查到的核心实现是统一调度层加 SVM 分类/回归两条分支;文档中的核函数、软间隔、KKT、SMO 等内容可以保留为理论补充,但结果解释必须落回实际导出的分类/回归表。
  • UI 参数经由页面配置后进入核心计算链路,最终影响标准化、核函数选择、惩罚系数、回归容差、交叉验证与特征工程处理,不是停留在说明文档层面的静态描述。
  • 代表性结果目录的导出内容覆盖 原始数据指标预测参数图表清单混淆矩阵特征工程报告特征选择分数PCA解释率训练集数据测试集数据报告摘要,说明软件侧的证据链是完整的。
  • 复现实物以结果目录同级的 repro_template_*.py 与输入 CSV 快照为准;正文中的复现说明应写成“以本次运行生成目录为准”,不要写死成固定路径。
  • 若正文涉及核函数、KKT 或 SMO 等内容,可以继续保留为理论补充;但软件输出口径应以实际导出的分类/回归结果表和图集为准。