#P4670. 第2题-异常信号甄别
-
1000ms
Tried: 92
Accepted: 16
Difficulty: 5
所属公司 :
美团
时间 :2026年3月28日-算法岗
第2题-异常信号甄别
解题思路
先从训练集里分离出所有常规样本和特殊样本,再把常规样本按固定随机种子划分为训练集和验证集,特殊样本全部放进验证集,仅用于评估,不参与训练。
然后只用常规训练集计算每一维的均值和标准差,完成标准化。若某一维标准差为 0,就把它改成 1,避免除以 0。接着用同一组均值和标准差去变换常规训练集、常规验证集、特殊验证集和测试集。
接下来枚举所有 gamma 和 nu,对每组参数训练一个单类边界检测器。它本质上是单类边界检测算法,只学习常规样本的分布范围,再通过 decision_function 判断样本更像常规还是特殊。
评估时,把常规验证集和特殊验证集合并,真实标签设为常规是 0、特殊是 1。因为 decision_function 的值越大越偏向常规,所以算 AUC 时使用 −s,算 F1 时直接按阈值 0 判断,s<0 视为特殊。
题目内容
某监测站收到一批历史数值记录,每条记录包含若干特征和一个标签。标签为 0 表示常规目标,标签为 1 表示特殊目标。另有一批新记录只包含特征,需要判定每条新记录属于常规还是特殊。
请按照以下流程完成检测器参数选择与预测。
将 train 中所有标签为 0 的样本视为常规样本,标签为 1 的样本视为特殊样本。
- 从常规样本中按固定随机种子
42、验证集比例0.25、先打乱再划分,得到常规训练集 Xtr 与常规验证集 Xval_norm;所有特殊样本组成特殊验证集 Xval_anom。 - 仅使用 Xtr 估计每个特征的均值与标准差;若某个特征的标准差为
0,则将其重置为1。然后用 (x−mean)/std 对 Xtr、Xval_norm、Xval_anom 和test做标准化。 - 对
gamma_list与nu_list中的每一对 (γ,u),训练一个单类边界检测器。该检测器使用 RBF 核,参数为 γ 与 u,其余配置固定。 - 在合并验证集 Xval=Xval_norm∪Xval_anom 上计算检测器输出的判别分数 s。分数越大表示越像常规样本。以真标签计算 AUC 时,使用 −s 作为特殊得分;同时以
0为阈值,将 s<0 判为特殊样本,计算 F1。 - 选择最优参数对 (γ∗,u∗)。优先级依次为:AUC 越大越好;若相同则 F1 越大越好;若仍相同则 u 越小越好;最后 γ 越小越好。
- 将全部常规样本 Xtr∪Xval_norm 合并,重新估计标准化参数并重训最优检测器,然后对
test中的每条记录输出0(常规)或1(特殊)。
约束:train 的行数不超过 40;test 的行数不超过 10;特征维度不超过 6;所有特征为实数。gamma_list 和 nu_list 的长度均至少为 2。
输入描述
输入仅一行,包含一个 JSON 对象,字段如下:
train:二维数组,每行前若干个实数为特征,最后一个整数为标签0或1。test:二维数组,每行为若干实数特征,不含标签。gamma_list:正浮点数数组,长度至少为2。nu_list:浮点数数组,每个元素为大于0且小于1的实数,长度至少为2。
其中 train 行数不超过 40,test 行数不超过 10,特征维度不超过 6。
输出描述
输出一行,为一个 JSON 整数数组,长度与 test 的行数相同,按输入顺序给出每条的判定结果:0 表示常规,1 表示特殊。
样例1
输入
{"train":[[0.0,0],[0.01,0],[-0.01,0],[0.02,0],[100.0,1],[110.0,1]],"test":[[0.0],[105.0]],"gamma_list":[0.01,0.1],"nu_list":[0.01,0.05]}
输出
[0, 1]
说明
常规样本集中在 x≈0 附近,特殊样本位于 x≈100 以上。按固定随机种子 42 划分常规样本后,仅用常规训练集估计均值和标准差。测试点 0.0 标准化后接近常规中心,判别分数 s≥0,因此判为常规 0;测试点 105.0 标准化后远离训练分布,判别分数 s<0,因此判为特殊 1。候选参数中会选择验证 AUC 与 F1 最优的 (γ∗,u∗)。
样例2
输入
{"train":[[0.0,5.0,0],[0.1,5.0,0],[-0.1,5.0,0],[0.2,5.0,0],[10.0,5.0,1],[11.0,5.0,1]],"test":[[0.0,5.0],[10.5,5.0]],"gamma_list":[0.01,0.1],"nu_list":[0.01,0.05]}
输出
[0, 1]
说明
第二维特征在常规样本中恒为 5.0,因此在划分出的常规训练集上标准差为 0,按题目流程会重置为 1。标准化后第二维取值变为 0,第一维成为主要区分特征。测试点 [0.0,5.0] 落在常规中心附近,判为常规 0;测试点 [10.5,5.0] 远离常规簇,判别分数 s<0,判为特殊 1。
样例3
输入
{"train":[[0.0,0.0,0],[0.1,0.1,0],[-0.1,-0.1,0],[0.2,0.2,0],[-0.2,-0.2,0],[0.3,0.3,0],[20.0,20.0,1],[21.0,21.0,1]],"test":[[0.0,0.0],[20.5,20.5],[0.1,0.1]],"gamma_list":[0.01,0.1],"nu_list":[0.01,0.05]}
输出
[0, 1, 0]
说明
常规样本是围绕 (0,0) 的二维紧致簇,特殊样本在 (20,20) 附近。按流程划分并标准化后,测试点 [0.0,0.0] 与 [0.1,0.1] 距离常规簇中心很近,判别分数 s≥0,判为常规 0;测试点 [20.5,20.5] 远离训练分布,RBF 核取值接近 0,判别分数 s<0,判为特殊 1。最终输出按输入顺序为 [0, 1, 0]。