train 与 test 的二维数值特征。train、test 在样本维度上拼接为整体矩阵 X,对 X 使用 一次 StandardScaler.fit_transform 完成标准化。DBSCAN(eps=0.3, min_samples=3, metric="euclidean", algorithm="auto") 得到原始标签 labels(离群为 -1)。-1):请在仅依赖 numpy/pandas/scikit-learn 的前提下,完成一个基于 DBSCAN 的异常检测器,并对给定测试样本输出聚类结果(正常簇 0,1,2…; 离群点 −1 )。
读取数据
train 字段:二维列表,元素均为数值特征
test 字段:二维列表,特征维度与 train 相同
无标签,全为无监督场景
预处理
将 train 与 test 按行拼接得到整体数据集
使用 StandardScaler 对所有特征做标准化 (fit_transform一次完成)
DBSCAN 聚类
簇标签重映射(唯一化输出)
设原本的标签集合为 {−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
输入
{"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]