正在加载中...

展开本页目录
算法教程OneClassSVM-单类 SVM

OneClassSVM-单类 SVM

No.166 · 在线教程

OneClassSVM-单类 SVM 的真实核心主要位于:

OneClassSVM-单类 SVM

1. 方法概述

OneClassSVM-单类 SVM 的真实核心主要位于:

  • core/oneclass_calculator.py

从当前源码看,这个模块实现的是一个比较直接的 One-Class SVM 异常检测流程:

  1. 从数据表中抽取数值特征;
  2. 训练 OneClassSVM
  3. 输出 decision_function 与预测标签;
  4. 若提供标签列,则计算 Accuracy / Precision / Recall / F1 / ROC-AUC;
  5. 导出图表与 Excel。

2. 输入结构与代码约束

2.1 特征矩阵

设用于训练的矩阵为

$$ X=(x_{ij})_{n\times d} \tag{1} $$

当前实现的一个重要细节是:它只保留数值列。也就是说,如果用户没有先在外部完成编码,那么非数值列会被直接排除。

2.2 标签列

若指定 target_column,代码会把标签映射成

$$ y_i= \begin{cases} 1,& \text{原标签}\neq 0\\ 0,& \text{原标签}=0 \end{cases} \tag{2} $$

并额外把 -1 也视为异常。

3. One-Class SVM 模型

3.1 决策函数

One-Class SVM 的判别函数可写为

$$ f(x)=\sum_{i=1}^{n}\alpha_i K(x_i,x)-\rho \tag{3} $$

其中 \(K(\cdot,\cdot)\) 可取:

  • rbf
  • linear
  • poly
  • sigmoid

3.2 预测标签

代码调用 model.predict(X) 得到 sklearn 约定的

$$ \tilde y_i= \begin{cases} -1,& \text{异常}\\ 1,& \text{正常} \end{cases} \tag{4} $$

再转换成更直观的内部标签:

$$ \hat y_i= \begin{cases} 1,& \tilde y_i=-1\\ 0,& \tilde y_i=1 \end{cases} \tag{5} $$

pred_label=1 表示异常。

3.3 异常分数

代码直接保留 decision_function(X) 作为得分,并额外定义

$$ \mathrm{anomaly\_score}_i=-\,\mathrm{score}_i \tag{6} $$

因此分数越小,异常程度越高;为方便展示,导出时也同步保留其相反数。

4. 评估指标

若存在真实标签,代码计算

$$ \mathrm{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \tag{7} $$

$$ \mathrm{Precision}=\frac{TP}{TP+FP} \tag{8} $$

$$ \mathrm{Recall}=\frac{TP}{TP+FN} \tag{9} $$

$$ \mathrm{F1}=\frac{2PR}{P+R} \tag{10} $$

以及

$$ \mathrm{ROC\text{-}AUC}=\mathrm{AUC}\big(y,\ -\mathrm{score}\big) \tag{11} $$

这里特意使用 -score,是因为 decision_function 越小越异常。

5. 输出结果与论文应用

5.1 Excel 工作表

当前模块导出:

  • RawData
  • Scores
  • Metrics
  • Parameters
  • Charts

图表包括:

  • 得分分布直方图
  • 得分序列图
  • 前两维特征散点图
  • ROC 曲线
  • PR 曲线

5.2 论文写作表述建议

可以写成:

  • 采用 One-Class SVM 建立正常样本边界;
  • 通过 decision_function 衡量样本到边界的相对位置;
  • decision_function 足够小且预测标签为 -1 时,将样本识别为异常点。

6. 实现说明与注意事项

6.1 当前核心没有显式训练/测试拆分

虽然参数里保留了 test_size 字段,但在 core/oneclass_calculator.py 中并没有真正使用它;模型是在全量数值样本上直接拟合并输出结果。

6.2 random_state 也没有真正进入 OneClassSVM

因为 sklearn 的 OneClassSVM 本身没有 random_state 参数,所以这里的 random_state 主要只影响外部说明,不影响核心模型训练。

6.3 当前模块不做缺失值补齐和缩放

至少在这个核心文件里,没有像 IsolationForest/HBOS 那样加入一套完整的缺失值处理与缩放流程。因此若数据质量较差,建议在进入该模块前先做预处理。

7. 论文写作模板

7.1 方法描述模板

“本文采用基于单类支持向量机的边界学习异常检测方法,在特征空间中学习正常样本的支持域,并将落在边界之外的样本识别为异常点。依据项目当前实现,模型直接在全量数值特征样本上拟合,不包含显式训练/测试拆分,也未在核心流程中接入缺失值补齐与缩放模块。因此,论文中应额外说明样本在进入模型前是否已完成标准化、缺失值处理或异常值清洗,并明确当前分析结果反映的是基于全量样本学习得到的边界结构。”

7.2 结果解释模板

结果部分可写为:决策得分越偏离正常区域,说明样本越可能位于学习到的正常边界之外。若异常样本在局部二维散点图中集中分布于边界外围,则说明 One-Class SVM 学到的支持域具有较好的空间区分能力。论文结果部分可优先展示异常样本得分表与决策得分分布图;若存在真实标签,则应补充 Accuracy、Precision、Recall、F1 与 ROC-AUC,以同时说明阈值判别效果与排序判别能力。

7.3 表格标题模板

  1. 表 1 One-Class SVM 核函数与参数设置表
  2. 表 2 样本决策得分与预测标签结果表
  3. 表 3 Top 异常样本排序结果表
  4. 表 4 带标签场景下 One-Class SVM 检测性能指标表

7.4 图表题注模板

  1. 图 1 One-Class SVM 决策得分分布图。
  2. 图 2 One-Class SVM 局部二维散点图。
  3. 图 3 One-Class SVM 带标签检测效果对比图。

7.5 表格示例

表 1 One-Class SVM 异常检测结果表示例

样本编号 decision_function 预测标签 是否异常 排名
\(i_1\)
\(i_2\)

表注:预测标签为 -1 时表示异常;由于当前核心流程未显式拆分训练集与测试集,表中结果反映的是全量样本上的边界学习输出。

8. 单篇终审补充

8.1 图题与表题对齐建议

  • RawData 表可写为:表X One-Class SVM 原始数据表。
  • Scores 表可写为:表X One-Class SVM 决策得分与预测标签结果表。
  • Metrics 表可写为:表X One-Class SVM 检测性能指标汇总表。
  • Parameters 表可写为:表X One-Class SVM 参数设置表。
  • Charts 表可写为:表X One-Class SVM 图表索引与路径清单。
  • score_hist.png 建议写为:图X One-Class SVM 决策得分分布图。
  • score_series.png 建议写为:图X One-Class SVM 得分序列图。
  • feature_scatter.png 建议写为:图X One-Class SVM 前两维特征散点图。
  • roc_curve.png 建议写为:图X One-Class SVM ROC 曲线图。
  • pr_curve.png 建议写为:图X One-Class SVM PR 曲线图。

8.2 终审说明

  • 当前代表性结果目录中的真实主工作簿为 OneClassSVM-单类SVM分析结果_20260322_232336.xlsx,复现输出为 oneclass_svm_repro.xlsx。论文若引用输出文件,应明确区分主运行结果与 repro 结果。
  • 当前真实工作表只有 RawData/Scores/Metrics/Parameters/Charts 5 张,并不存在额外的 ProcessedData 或阈值说明表。正文若讨论预处理或阈值,应通过方法描述补充,而不能声称这些表已单独导出。
  • 当前实体图文件位于 *_plots/ 目录下,真实图名包括 score_hist.pngscore_series.pngfeature_scatter.pngroc_curve.pngpr_curve.png。终稿图题应与这组真实图名对齐。
  • 真实 repro 脚本为 repro_oneclass_svm.py,并通过 INPUT_FILE = 'repro_inputs/oneclass_svm_repro_data.csv' 读取统一导出的 CSV 副本。附录中的复现实验步骤应保留这一相对路径结构。
  • 当前核心流程是在全量数值样本上直接拟合 One-Class SVM,不做显式训练/测试拆分。论文结果部分不能把 Metrics 误写成“测试集指标”,更准确的说法应是“基于全量样本及可选标签后验评估得到的指标”。

8.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法3/异常检测/OneClassSVM-单类 SVM,本次采用的代表性结果目录为 具体的算法3/异常检测/OneClassSVM-单类 SVM/results/OneClassSVM-单类SVM分析结果_20260322_232336

当前目录中真实存在两份工作簿:

  • OneClassSVM-单类SVM分析结果_20260322_232336.xlsx
  • oneclass_svm_repro.xlsx

两者实测工作表一致,均包含:

  • RawData
  • Scores
  • Metrics
  • Parameters
  • Charts

因此这一轮应把主结果与 repro 输出分开写。当前 sheet 体系确实只有 5 张,不存在额外预处理表或阈值说明表。

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

  • OneClassSVM-单类SVM分析结果_20260322_232336_plots/score_hist.png
  • OneClassSVM-单类SVM分析结果_20260322_232336_plots/score_series.png
  • OneClassSVM-单类SVM分析结果_20260322_232336_plots/feature_scatter.png
  • OneClassSVM-单类SVM分析结果_20260322_232336_plots/roc_curve.png
  • OneClassSVM-单类SVM分析结果_20260322_232336_plots/pr_curve.png
  • oneclass_svm_repro_plots/score_hist.png
  • oneclass_svm_repro_plots/score_series.png
  • oneclass_svm_repro_plots/feature_scatter.png
  • oneclass_svm_repro_plots/roc_curve.png
  • oneclass_svm_repro_plots/pr_curve.png

这说明当前磁盘同时保留了主结果图与 repro 图,两套图型一致。

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

  • 具体的算法3/异常检测/OneClassSVM-单类 SVM/results/OneClassSVM-单类SVM分析结果_20260322_232336/repro_oneclass_svm.py
  • 具体的算法3/异常检测/OneClassSVM-单类 SVM/results/OneClassSVM-单类SVM分析结果_20260322_232336/repro_inputs/oneclass_svm_repro_data.csv

脚本中明确写成 INPUT_FILE = 'repro_inputs/oneclass_svm_repro_data.csv'OUTPUT_FILE = 'oneclass_svm_repro.xlsx'。因此这一篇当前已具备目录内相对输入副本复现口径。

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

  • 当前主结果目录应写作 具体的算法3/异常检测/OneClassSVM-单类 SVM/results/OneClassSVM-单类SVM分析结果_20260322_232336
  • 正文应围绕异常分数、预测标签、阈值评价、ROC/PR 结果和图表索引来写。
  • 图证应对应 score_hist.pngscore_series.pngfeature_scatter.pngroc_curve.pngpr_curve.png,并把主结果图和 repro 图分开说明。
  • 复现脚本应按 repro_oneclass_svm.py + repro_inputs/oneclass_svm_repro_data.csv 的口径说明。