正在加载中...

展开本页目录
算法教程KDE_OD-核密度异常

KDE_OD-核密度异常

No.164 · 在线教程

KDEOD-核密度异常 的真实核心主要位于:

KDE_OD-核密度异常

1. 方法概述

KDE_OD-核密度异常 的真实核心主要位于:

  • core/kde_od_calculator.py

从当前源码看,这个模块实现的是基于核密度估计的异常检测流程:

  1. 选择 ID 列、特征列、标签列;
  2. 处理缺失值并做可选缩放;
  3. 训练 KernelDensity
  4. 以样本对数密度的相反数作为异常分数;
  5. 用污染率、分位数或 z-score 规则给出阈值;
  6. 导出得分表、异常样本表、指标与图表。

2. 数据预处理

2.1 缺失值处理

代码支持:

  • drop
  • mean
  • median
  • zero

2.2 缩放

支持:

  • none
  • standard
  • minmax
  • robust

2.3 特征矩阵

设预处理后的特征矩阵为

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

如果样本数小于 2,代码会直接拒绝运行。

3. 带宽选择与核密度

3.1 Scott 带宽

若选择 scott,代码使用

$$ h_{\text{Scott}}=n^{-1/(d+4)} \tag{2} $$

3.2 Silverman 带宽

若选择 silverman,代码使用

$$ h_{\text{Silverman}}=\left(\frac{n(d+2)}{4}\right)^{-1/(d+4)} \tag{3} $$

3.3 交叉验证带宽

若选择 cv,代码会在对数网格上搜索

$$ h^*=\arg\max_h \mathrm{CVScore}(h) \tag{4} $$

并将最优 bandwidth 写入输出参数 final_bandwidth

3.4 KDE 密度与异常分数

对样本 \(x_i\),核密度估计可写为

$$ \hat f(x_i)=\frac{1}{nh^d}\sum_{k=1}^{n}K\!\left(\frac{x_i-x_k}{h}\right) \tag{5} $$

代码通过 model.score_samples(X) 获得对数密度:

$$ \ell_i=\log \hat f(x_i) \tag{6} $$

并定义异常分数

$$ S_i=-\ell_i \tag{7} $$

因此密度越低,\(S_i\) 越大,越可能是异常点。

4. 阈值规则

4.1 污染率阈值

若选择 threshold_method=contamination,则

$$ \tau=Q_{1-\text{contamination}}(S) \tag{8} $$

4.2 分位数阈值

若选择 percentile,则

$$ \tau=Q_q(S) \tag{9} $$

其中 \(q\) 对应 percentile

4.3 z-score 阈值

若选择 zscore,则

$$ \tau=\bar S+k\,\mathrm{std}(S) \tag{10} $$

其中 \(k\) 对应参数 zscore_k

4.4 最终标签

代码按

$$ \hat y_i= \begin{cases} 1,& S_i\ge \tau\\ 0,& \text{otherwise} \end{cases} \tag{11} $$

输出 is_anomaly

5. 输出结果、评价指标与论文应用

5.1 有标签时的指标

若提供标签列,代码假设其满足“1=异常,0=正常”,并计算:

$$ \mathrm{Precision}=\frac{TP}{TP+FP},\quad \mathrm{Recall}=\frac{TP}{TP+FN},\quad \mathrm{F1}=\frac{2PR}{P+R} \tag{12} $$

同时还会统计:

  • tp
  • fp
  • fn
  • tn

5.2 Excel 工作表

当前项目导出:

  • Parameters
  • Metrics
  • RawData
  • ProcessedData
  • Scores
  • Merged
  • Anomalies
  • Charts

5.3 论文写作表述建议

可以写成:

  • 采用核密度估计对样本空间概率密度进行拟合;
  • 以负对数密度作为异常强度分数;
  • 根据污染率、分位数或 z-score 规则确定异常阈值;
  • 对超过阈值的样本判定为异常。

6. 实现说明与注意事项

6.1 该模块的核心是 -log_density

因此论文中若要和软件输出完全一致,建议直接把异常分数写成式(7)。

6.2 带宽选择会显著影响结果

带宽过大时会把局部稀疏结构抹平,带宽过小时又容易把噪声误判为异常,因此 scott/silverman/manual/cv 的选择应在报告中说明。

6.3 当前模块不会自动学习未来阈值

阈值完全来自当前样本分布,因此当数据批次变化明显时,阈值也会随之变化。

7. 论文写作模板

7.1 方法描述模板

“本文采用基于核密度估计的低概率样本识别方法,首先利用核函数对样本分布进行拟合,然后以样本对数密度的相反数构造异常分数,并结合阈值规则识别异常样本。依据项目当前实现,带宽既可按 scottsilverman 等经验规则给定,也可通过交叉验证或手动指定方式设置;阈值则支持污染率、分位数与 z-score 三种规则。因此,论文中应同步报告带宽选择方式、阈值规则及其参数设置。”

7.2 结果解释模板

结果部分可写为:异常分数越大,说明样本对应的估计概率密度越低,因此越可能位于数据分布的稀疏区域。若带宽设置过大,则局部异常结构可能被平滑;若带宽过小,则噪声样本可能被过度放大,因此应结合带宽选择方式对结果进行讨论。论文结果部分宜同时展示异常样本排序表、阈值说明表与分数分布图,从而把参数选择、评分机制与最终异常判别逻辑统一起来。

7.3 表格标题模板

  1. 表 1 KDE 异常检测带宽与阈值规则设置表
  2. 表 2 样本核密度异常分数排序结果表
  3. 表 3 Top 异常样本识别结果表
  4. 表 4 带标签场景下 KDE 检测性能指标表

7.4 图表题注模板

  1. 图 1 KDE 异常分数分布图及阈值位置示意图。
  2. 图 2 不同带宽设置下的异常分数对比图。
  3. 图 3 KDE 异常样本识别结果可视化图。

7.5 表格示例

表 1 KDE 异常检测结果表示例

样本编号 对数密度 异常分数 阈值规则 预测标签
\(i_1\)
\(i_2\)

表注:异常分数按负对数密度构造,分数越大表示样本越偏离主体分布;阈值规则需结合 contaminationquantilez-score 参数共同解释。

8. 单篇终审补充

8.1 图题与表题对齐建议

  • Parameters 表可写为:表X KDE 异常检测参数与带宽设置表。
  • Metrics 表可写为:表X KDE 检测性能指标汇总表。
  • RawData 表可写为:表X KDE 原始数据表。
  • ProcessedData 表可写为:表X KDE 处理后数据表。
  • Scores 表可写为:表X KDE 样本异常分数结果表。
  • Merged 表可写为:表X KDE 异常分数与标签合并结果表。
  • Anomalies 表可写为:表X KDE Top 异常样本结果表。
  • Charts 表可写为:表X KDE 图表索引与路径清单。
  • score_hist.png 建议写为:图X KDE 异常分数分布图。
  • pca_scatter.png 建议写为:图X KDE PCA 二维散点图。

8.2 终审说明

  • 当前代表性结果目录采用“结果目录 + repro_outputs/ 子目录”的嵌套结构,真实主工作簿为 KDE_OD-核密度异常分析结果_时间戳.xlsx,复现运行则会在 repro_outputs/ 下再生成一层新的结果目录。论文附录若描述复现实验目录结构,应把这一点写清楚。
  • 当前真实工作表为 Parameters/Metrics/RawData/ProcessedData/Scores/Merged/Anomalies/Charts,并不额外导出单独的阈值表。因此正文若讨论阈值规则,应在文字中解释,而不是声称工作簿已单列阈值 sheet。
  • 当前实体图文件主要是 score_hist.pngpca_scatter.png,终稿图题应围绕“分数分布”和“二维投影结果”展开,不要虚构带宽比较图,除非该次实验目录里真实生成了对应文件。
  • 真实 repro 脚本为 repro_kde_od.py,并通过 INPUT_FILE = BASE_DIR / 'repro_inputs' / 'kde_od_input.csv' 读取输入副本。附录若展示脚本片段,应保持这种 BASE_DIR / repro_inputs 的相对路径风格。
  • 当前结果目录下可能并存多次时间戳输出与多次 repro 输出。论文若引用某次结果,必须绑定具体目录时间戳,避免把不同轮次导出混作同一实验结果。

8.3 全量强化补充

  • 本轮按真实磁盘再次核对,算法目录为 具体的算法3/异常检测/KDE_OD-核密度异常,代表性结果目录为 具体的算法3/异常检测/KDE_OD-核密度异常/results/pytest_kde_ui/KDE_OD-核密度异常分析结果_20260329_170125
  • 该目录的主工作簿为 KDE_OD-核密度异常分析结果_20260329_170125.xlsx,实际工作表为 ParametersMetricsRawDataProcessedDataScoresMergedAnomaliesCharts。该工作簿没有 Threshold 独立 sheet,阈值规则应从 Parameters/Metrics 与正文说明中解释。
  • 当前主图目录为 charts/,其中实体图为 score_hist.pngpca_scatter.png。复现运行会在 repro_outputs/KDE_OD-核密度异常分析结果_20260329_170127/ 下生成新的工作簿和新的 charts/ 目录,工作表结构与主结果一致。
  • 当前输入副本位于 repro_inputs/kde_od_input.csvrepro_kde_od.py 中明确写有 INPUT_FILE = BASE_DIR / 'repro_inputs' / 'kde_od_input.csv',并把复现输出写入 OUTPUT_DIR = BASE_DIR / 'repro_outputs'。因此它属于“标准输入副本 + 嵌套复现输出目录”结构。
  • 需要区分两个层级:results/pytest_kde_ui 是测试聚合目录,KDE_OD-核密度异常分析结果_20260329_170125 才是可引用的单次结果目录。论文或交付清单不应把 pytest_kde_ui 直接写成一次算法运行结果。
  • 旧的 20251231 目录只包含主 xlsx 和 charts/,没有 repro 脚本;若需要证明复现链路,应优先引用 20260329_170125 这一带 repro_inputsrepro_outputs 的目录。

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

  • 当前主结果目录应写作 具体的算法3/异常检测/KDE_OD-核密度异常/results/pytest_kde_ui/KDE_OD-核密度异常分析结果_20260329_170125
  • 正文应围绕 ParametersMetricsRawDataProcessedDataScoresMergedAnomaliesCharts 来写。
  • 图证应对应 score_hist.pngpca_scatter.png,并把 repro_outputs/ 下的新结果目录作为复现再生产物说明。
  • 复现脚本应按 repro_kde_od.py + repro_inputs/kde_od_input.csv 的口径说明。