正在加载中...

展开本页目录
算法教程PCA_OD-PCA 残差异常

PCA_OD-PCA 残差异常

No.167 · 在线教程

PCAOD-PCA 残差异常 的真实核心主要位于:

PCA_OD-PCA 残差异常

1. 方法概述

PCA_OD-PCA 残差异常 的真实核心主要位于:

  • core/pca_od_calculator.py

从当前源码看,这个模块实现的是一种典型的“主子空间 + 残差子空间”异常检测方法:

  1. 对特征做数值化、编码、缩放;
  2. 执行 PCA;
  3. 通过重构误差计算 SPE/Q 残差分数;
  4. 可选计算 Hotelling \(T^2\);
  5. 根据阈值判定异常;
  6. 输出主成分得分、载荷、贡献率、残差表和图表。

2. 数据准备与 PCA

2.1 特征处理

当前代码有一个需要单独说明的实现细节:

  • scale_method='none' 时,只保留原始数值列;
  • scale_methodstandard/minmax 时,会先对特征做 get_dummies 编码。

因此这个模块对类别特征的处理方式,与是否开启缩放直接相关。

设处理后的矩阵为

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

2.2 缩放

若选择标准化,则

$$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$

若选择 Min-Max,则

$$ z_{ij}=\frac{x_{ij}-x_j^{\min}}{x_j^{\max}-x_j^{\min}} \tag{3} $$

2.3 PCA 分解

PCA 将标准化后的矩阵分解到低维主子空间:

$$ T=X P \tag{4} $$

其中 \(P\) 为载荷矩阵,\(T\) 为主成分得分矩阵。

代码支持两种主成分选择方式:

  1. 固定主成分数 fixed
  2. 累计贡献率 variance

3. SPE 残差异常分数

3.1 重构与残差

用保留的主成分重构数据:

$$ \hat X=T P^\top \tag{5} $$

残差矩阵为

$$ E=X-\hat X \tag{6} $$

3.2 SPE/Q 统计量

对每个样本,代码计算平方预测误差:

$$ \mathrm{SPE}_i=\sum_{j=1}^{d}e_{ij}^2 \tag{7} $$

这就是结果表里的主异常分数。

4. Hotelling \(T^2\) 与联合判定

4.1 可选 \(T^2\)

若启用 use_t2=True,代码进一步计算

$$ T_i^2=\sum_{k=1}^{r}\frac{t_{ik}^2}{\lambda_k} \tag{8} $$

其中 \(\lambda_k\) 是保留主成分的特征值。

4.2 \(T^2\) 阈值

代码在可用时采用卡方分位数近似:

$$ \tau_{T^2}=\chi^2_{r,\alpha_{T^2}} \tag{9} $$

5. 阈值规则

5.1 sigma 阈值

若选择 threshold_method='sigma',则

$$ \tau_{SPE}=\overline{\mathrm{SPE}}+k\cdot \mathrm{std}(\mathrm{SPE}) \tag{10} $$

5.2 quantile 阈值

若选择分位数阈值,则

$$ \tau_{SPE}=Q_q(\mathrm{SPE}) \tag{11} $$

5.3 chi-square 阈值

若选择 chi-square,代码不是直接对样本分数取卡方,而是先对残差子空间特征值计算 Q 统计量近似阈值:

$$ \tau_{SPE}=Q_\alpha(\theta_1,\theta_2,\theta_3) \tag{12} $$

其中 \(\theta_1,\theta_2,\theta_3\) 来自残差特征值的一阶、二阶和三阶和。

5.4 最终异常判定

基础规则为

$$ \hat y_i=\mathbf{1}(\mathrm{SPE}_i>\tau_{SPE}) \tag{13} $$

若启用 \(T^2\),则最终采用并集判定:

$$ \hat y_i=\mathbf{1}\big(\mathrm{SPE}_i>\tau_{SPE}\ \lor\ T_i^2>\tau_{T^2}\big) \tag{14} $$

6. 输出结果与论文应用

6.1 Excel 工作表

当前模块导出:

  • 原始数据
  • 标准化数据
  • 主成分得分
  • 载荷矩阵
  • 贡献率
  • 残差与SPE
  • 异常结果
  • 标签输出
  • 阈值说明
  • 图表索引
  • 参数

6.2 论文写作表述建议

可以写成:

  • 采用 PCA 将高维特征分解为主子空间与残差子空间;
  • 用平方预测误差(SPE)刻画样本偏离主子空间的程度;
  • 可选结合 Hotelling \(T^2\) 统计量识别主子空间内的异常波动;
  • 当 SPE 或 \(T^2\) 超过阈值时,将样本判定为异常。

7. 实现说明与注意事项

7.1 排名主键是 SPE

即使启用了 \(T^2\) 并且某些样本是由 \(T^2\) 触发异常,结果表里的 rank 仍然是按 spe 从大到小排序的。

7.2 chi-square 阈值实际是 Q 统计量近似

因此不要把它简单写成“直接对 SPE 用卡方阈值”,更准确的说法是“基于残差特征值的 Q 统计量近似阈值”。

7.3 该模块同时适合解释性分析

因为它会同步输出:

  • 主成分得分;
  • 载荷矩阵;
  • 贡献率;
  • 残差矩阵;

所以除了异常检测,还适合在论文中解释“异常是偏离了哪些主结构”。

8. 论文写作模板

8.1 方法描述模板

“本文采用基于 PCA 主子空间重构误差的异常检测方法,通过主成分模型提取正常数据的主要变化结构,并利用样本在残差子空间中的平方预测误差 SPE 识别异常点。依据项目当前实现,软件可选计算 Hotelling \(T^2\) 统计量,并采用 SPE 与 \(T^2\) 的并集规则进行最终异常判定。因此,论文方法部分应明确说明主成分个数、阈值类型以及是否启用 \(T^2\) 联合判定。”

8.2 结果解释模板

结果部分可写为:SPE 越大,说明样本越难被主子空间有效重构,因此越可能偏离主体模式;若同时使用 \(T^2\),则其反映的是样本在主子空间方向上的统计偏离程度。论文中宜同时展示主成分贡献率表、异常样本排序表、阈值说明表与二维主成分散点图,从而把结构解释与异常识别统一起来。若某些样本的异常由 \(T^2\) 而非 SPE 触发,还应在结果解释中单独说明其属于主子空间内的统计偏离,而不是残差空间重构偏离。

8.3 表格标题模板

  1. 表 1 PCA 参数与阈值规则设置表
  2. 表 2 主成分贡献率与累计解释率结果表
  3. 表 3 样本 SPE、\(T^2\) 与异常标签结果表
  4. 表 4 PCA 残差异常样本排序结果表

8.4 图表题注模板

  1. 图 1 PCA 主成分贡献率图。
  2. 图 2 SPE 分布图及阈值位置示意图。
  3. 图 3 PCA 异常检测二维主成分散点图。

8.5 表格示例

表 1 PCA 残差异常检测结果表示例

样本编号 SPE \(T^2\) 是否异常 排名
\(i_1\)
\(i_2\)

表注:默认排序主键为 SPE;若启用 \(T^2\) 联合判定,应在表注中进一步说明最终异常标签来自 SPE 与 \(T^2\) 超阈值样本的并集。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • 原始数据 表可写为:表X PCA 残差异常检测原始数据表。
  • 标准化数据 表可写为:表X PCA 标准化数据表。
  • 主成分得分 表可写为:表X PCA 主成分得分结果表。
  • 载荷矩阵 表可写为:表X PCA 载荷矩阵表。
  • 贡献率 表可写为:表X PCA 主成分贡献率表。
  • 残差与SPE 表可写为:表X PCA 残差与 SPE 结果表。
  • 异常结果 表可写为:表X PCA 异常样本判定结果表。
  • 标签输出 表可写为:表X PCA 标签对照输出表。
  • 阈值说明 表可写为:表X PCA 阈值说明表。
  • 图表索引 表可写为:表X PCA 图表索引与路径清单。
  • 参数 表可写为:表X PCA 参数设置表。
  • explained_variance.png 建议写为:图X PCA 主成分贡献率图。
  • score_scatter.png 建议写为:图X PCA 主成分得分散点图。
  • spe_hist.png 建议写为:图X PCA SPE 分布图。
  • spe_series.png 建议写为:图X PCA SPE 序列图。

9.2 终审说明

  • 当前代表性结果目录中的真实主工作簿包括 pca_od_baseline.xlsxpca_ui_flow.xlsxpca_od_ui_runtime.xlsx 等不同运行口径文件,但它们的工作表结构一致。论文附录若列结果文件名,应绑定具体目录与文件,不要把不同运行口径混为同一次实验。
  • 当前真实工作表为 原始数据/标准化数据/主成分得分/载荷矩阵/贡献率/残差与SPE/异常结果/标签输出/阈值说明/图表索引/参数,终稿表题应按这套中文工作表口径对齐。
  • 当前实体图文件位于 *_plots/ 目录下,真实图名为 explained_variance.pngscore_scatter.pngspe_hist.pngspe_series.png。终稿图题不应替换成泛化模板名。
  • 真实 repro 脚本为 repro_pca_od.py,并通过 INPUT_FILE = 'repro_inputs/pca_od_repro_data.csv' 读取输入副本。附录中的复现实验说明应保持这一相对路径口径。
  • 当前结果排序主键始终是 SPE,即使最终异常判定启用了 \(T^2\) 并集规则也是如此。正文若解释“异常样本排名”,应明确它对应 SPE 排序而不是最终布尔标签排序。

9.3 全量强化补充

  • 本轮按真实磁盘再次核对,算法目录为 具体的算法3/异常检测/PCA_OD-PCA 残差异常,代表性结果目录为 具体的算法3/异常检测/PCA_OD-PCA 残差异常/results/_pca_od_enhanced_runtime_20260310
  • 该目录实际包含两份工作簿:主运行结果 pca_od_ui_runtime.xlsx 与复现输出 pca_od_repro.xlsx。两份工作簿的真实工作表一致,均为 原始数据标准化数据主成分得分载荷矩阵贡献率残差与SPE异常结果标签输出阈值说明图表索引参数
  • 当前图目录分为 pca_od_ui_runtime_plots/pca_od_repro_plots/ 两套,实体图均为 explained_variance.pngscore_scatter.pngspe_hist.pngspe_series.png。因此这篇可以明确写成“主/复现双图目录并存”的结构。
  • 当前 repro 脚本为 repro_pca_od.py,并通过 INPUT_FILE = 'repro_inputs/pca_od_repro_data.csv' 读取输入副本;该文件在 repro_inputs/ 中实际存在。
  • 该目录下还有 inputs/__pycache__/,但论文与交付证据应聚焦主/复现工作簿、两套图目录、repro_pca_od.pyrepro_inputs/pca_od_repro_data.csv,不应把缓存目录写进正文。
  • 旧文中的 pca_od_baseline.xlsxpca_ui_flow.xlsx 等说法更适合做“目录池概览”,而真正的单次代表性证据应固定到 _pca_od_enhanced_runtime_20260310 这一目录。

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

  • 当前主结果目录应写作 具体的算法3/异常检测/PCA_OD-PCA 残差异常/results/_pca_od_enhanced_runtime_20260310
  • 正文应围绕 原始数据标准化数据主成分得分载荷矩阵贡献率残差与SPE异常结果标签输出阈值说明图表索引参数 来写。
  • 图证应对应 explained_variance.pngscore_scatter.pngspe_hist.pngspe_series.png,并把主/复现双图目录分开说明。
  • 复现脚本应按 repro_pca_od.py + repro_inputs/pca_od_repro_data.csv 的口径说明。