PCA_OD-PCA 残差异常
PCAOD-PCA 残差异常 的真实核心主要位于:
PCA_OD-PCA 残差异常
1. 方法概述
PCA_OD-PCA 残差异常 的真实核心主要位于:
core/pca_od_calculator.py
从当前源码看,这个模块实现的是一种典型的“主子空间 + 残差子空间”异常检测方法:
- 对特征做数值化、编码、缩放;
- 执行 PCA;
- 通过重构误差计算 SPE/Q 残差分数;
- 可选计算 Hotelling \(T^2\);
- 根据阈值判定异常;
- 输出主成分得分、载荷、贡献率、残差表和图表。
2. 数据准备与 PCA
2.1 特征处理
当前代码有一个需要单独说明的实现细节:
- 当
scale_method='none'时,只保留原始数值列; - 当
scale_method为standard/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\) 为主成分得分矩阵。
代码支持两种主成分选择方式:
- 固定主成分数
fixed - 累计贡献率
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 PCA 参数与阈值规则设置表
- 表 2 主成分贡献率与累计解释率结果表
- 表 3 样本
SPE、\(T^2\) 与异常标签结果表 - 表 4 PCA 残差异常样本排序结果表
8.4 图表题注模板
- 图 1 PCA 主成分贡献率图。
- 图 2
SPE分布图及阈值位置示意图。 - 图 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.xlsx、pca_ui_flow.xlsx和pca_od_ui_runtime.xlsx等不同运行口径文件,但它们的工作表结构一致。论文附录若列结果文件名,应绑定具体目录与文件,不要把不同运行口径混为同一次实验。 - 当前真实工作表为
原始数据/标准化数据/主成分得分/载荷矩阵/贡献率/残差与SPE/异常结果/标签输出/阈值说明/图表索引/参数,终稿表题应按这套中文工作表口径对齐。 - 当前实体图文件位于
*_plots/目录下,真实图名为explained_variance.png、score_scatter.png、spe_hist.png、spe_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.png、score_scatter.png、spe_hist.png、spe_series.png。因此这篇可以明确写成“主/复现双图目录并存”的结构。 - 当前 repro 脚本为
repro_pca_od.py,并通过INPUT_FILE = 'repro_inputs/pca_od_repro_data.csv'读取输入副本;该文件在repro_inputs/中实际存在。 - 该目录下还有
inputs/与__pycache__/,但论文与交付证据应聚焦主/复现工作簿、两套图目录、repro_pca_od.py与repro_inputs/pca_od_repro_data.csv,不应把缓存目录写进正文。 - 旧文中的
pca_od_baseline.xlsx、pca_ui_flow.xlsx等说法更适合做“目录池概览”,而真正的单次代表性证据应固定到_pca_od_enhanced_runtime_20260310这一目录。
10. 软件实现核查补充(2026-07)
- 当前主结果目录应写作
具体的算法3/异常检测/PCA_OD-PCA 残差异常/results/_pca_od_enhanced_runtime_20260310。 - 正文应围绕
原始数据、标准化数据、主成分得分、载荷矩阵、贡献率、残差与SPE、异常结果、标签输出、阈值说明、图表索引、参数来写。 - 图证应对应
explained_variance.png、score_scatter.png、spe_hist.png、spe_series.png,并把主/复现双图目录分开说明。 - 复现脚本应按
repro_pca_od.py + repro_inputs/pca_od_repro_data.csv的口径说明。