OneClassSVM-单类 SVM
OneClassSVM-单类 SVM 的真实核心主要位于:
OneClassSVM-单类 SVM
1. 方法概述
OneClassSVM-单类 SVM 的真实核心主要位于:
core/oneclass_calculator.py
从当前源码看,这个模块实现的是一个比较直接的 One-Class SVM 异常检测流程:
- 从数据表中抽取数值特征;
- 训练
OneClassSVM; - 输出
decision_function与预测标签; - 若提供标签列,则计算 Accuracy / Precision / Recall / F1 / ROC-AUC;
- 导出图表与 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)\) 可取:
rbflinearpolysigmoid
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 工作表
当前模块导出:
RawDataScoresMetricsParametersCharts
图表包括:
- 得分分布直方图
- 得分序列图
- 前两维特征散点图
- 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 One-Class SVM 核函数与参数设置表
- 表 2 样本决策得分与预测标签结果表
- 表 3 Top 异常样本排序结果表
- 表 4 带标签场景下 One-Class SVM 检测性能指标表
7.4 图表题注模板
- 图 1 One-Class SVM 决策得分分布图。
- 图 2 One-Class SVM 局部二维散点图。
- 图 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/Charts5 张,并不存在额外的ProcessedData或阈值说明表。正文若讨论预处理或阈值,应通过方法描述补充,而不能声称这些表已单独导出。 - 当前实体图文件位于
*_plots/目录下,真实图名包括score_hist.png、score_series.png、feature_scatter.png、roc_curve.png、pr_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.xlsxoneclass_svm_repro.xlsx
两者实测工作表一致,均包含:
RawDataScoresMetricsParametersCharts
因此这一轮应把主结果与 repro 输出分开写。当前 sheet 体系确实只有 5 张,不存在额外预处理表或阈值说明表。
当前目录中的真实图文件为:
OneClassSVM-单类SVM分析结果_20260322_232336_plots/score_hist.pngOneClassSVM-单类SVM分析结果_20260322_232336_plots/score_series.pngOneClassSVM-单类SVM分析结果_20260322_232336_plots/feature_scatter.pngOneClassSVM-单类SVM分析结果_20260322_232336_plots/roc_curve.pngOneClassSVM-单类SVM分析结果_20260322_232336_plots/pr_curve.pngoneclass_svm_repro_plots/score_hist.pngoneclass_svm_repro_plots/score_series.pngoneclass_svm_repro_plots/feature_scatter.pngoneclass_svm_repro_plots/roc_curve.pngoneclass_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.png、score_series.png、feature_scatter.png、roc_curve.png、pr_curve.png,并把主结果图和 repro 图分开说明。 - 复现脚本应按
repro_oneclass_svm.py + repro_inputs/oneclass_svm_repro_data.csv的口径说明。