解题思路
先从训练集里分离出所有正常样本和异常样本,再把正常样本按固定随机种子划分为训练集和验证集,异常样本全部放进验证集,仅用于评估,不参与训练。
然后只用正常训练集计算每一维的均值和标准差,完成标准化。若某一维标准差为 0,就把它改成 1,避免除以 0。接着用同一组均值和标准差去变换正常训练集、正常验证集、异常验证集和测试集。
接下来枚举所有 gamma 和 nu,对每组参数训练一个 OneClassSVM。它本质上是单类分类算法,只学习正常样本的分布范围,再通过 decision_function 判断样本更像正常还是异常。
评估时,把正常验证集和异常验证集合并,真实标签设为正常是 0、异常是 1。因为 decision_function 的值越大越偏向正常,所以算 AUC 时使用 −s,算 F1 时直接按阈值 0 判断,s<0 视为异常。