P3436.第2题-异常检查器
题目内容
请在仅依赖 numpy/pandas/scikit-learn 的前提下,完成一个基于 DBSCAN 的异常检测器,并对给定测试样本输出聚类结果(正常簇 0,1,2…; 离群点 −1 )。
-
读取数据
-
预处理
-
DBSCAN 聚类
- 采用DBSCAN聚类,你可能会用到的参数固定为 eps=0.3,min_samples=3, metric="euclidean", algorithm="auto"
-
簇标签重映射(唯一化输出)
-
设原本的标签集合为 {−1,0,1,…} ,其中 −1 表示离群
-
对所有非 −1 的簇 l :
i.计算簇在标准化特征空间的质心 cl
ii.按质心第一维坐标从小到大排序得到顺序 l0,l1,…
iii. 重新赋值:l0→0,l1→1,...
-
结果输出
-
仅对 test 部分输出重新映射后的标签序列
-
以单行 JSON 数组 输出
输入描述
标准输入仅一行 JSON,示例:
{
"train":[[0,0],[0.1,0],[5,5]],
"test":[[0.05,0.05],[9,0]]
}
输出描述
标准输出仅含一行:[0,−1]
-
数组长度等于测试样本数
-
逗号后须有空格,符合 JSON 规范
补充说明
1.标准化:仅用一次 StandardScaler ;不要对 train、test 分别拟合
2.超参数:eps=0.3,min samples=3 固定
3.为了确保通过测试用例,仅允许使用 numpy / pandas / scikit-learn
样例1
输入
{"train":[[0,0],[0.1,0],[5,5],[5.1,5],[10,0]],"test":[[0.05,0.05],[5.05,5.05],[9,0]]}
输出
[0,1,-1]