train
与 test
按行拼接后,用 StandardScaler
一次性 fit_transform
,得到标准化矩阵 Z_all
(避免因分别拟合造成的数据偏移)。Z_all
上用 PCA(n_components=1, svd_solver="full", random_state=42)
拟合,分别对 Z_all
做 transform → inverse_transform
得到重构矩阵 Z_hat_all
。请在仅使用 numpy/pandas/scikit−learn 的前提下,实现一个基于 PCA 重构误差的异常检测算法,对测试样本判定“正常 (0) /异常 (1) ”。
1.读取数据
train:二维列表,只含数值特征(无标签)
test:二维列表,与 train 同维度
2.标准化
使用 StandardScaler
必须将 train 和 test 拼接后一次性 fit_transform,以避免数据偏移
3.降维&重构
PCA 降维,你可能会用到的固定参数:n_components=1,svd _solver=“full”,random _state=42
在拼接后的标准化数据上 fit 后,再分别 transform/inverse_transform 获得重构样本
4.重构误差与阀值
对训练部分计算 ei=∑j(xij−x^ij)2
阈值 T 取第 95 百分位
判别准则:
$\text { label }=\left\{\begin{array}{ll}0, & e_{\text {test }} \leq T \\1, & e_{\text {test }}>T\end{array}\right.$
5.结果输出
仅输出 test 部分的预测标签序列 (0/1)
单行 JSON 数组,如 [0,1]
顺序须与输入 test 保持一致
标准输入仅一行 JSON ,示例
{
"train":[[0,0],[0.1,0],[0,-0.1],[0.05,0.05]],
"test":[[0.04,0.02],[3,3]]
}
题目要求至少二维特征
所有值为整数/浮点数,无空行
仅输出一行:[0,1]
长度等于测试样本数
合法 JSON,逗号后带空格
为确保通过测试用例,允许使用 numpy/pandas/scikit−learn
输入
{"train":[[0,0],[0.1,0],[0,-0.1],[0.05,0.05],[0.2,0.1],[0.1,-0.1]],"test":[[0.05,0],[0.2,-0.6],[0.1,0.1],[0.2,0]]}
输出
[0, 0, 0, 0]