我尝试使用sklearn的均值转换来查找数据集中的异常和异常值。数据集是来自传感器的信号值。我有一个训练数据集来训练算法和一个包含虚拟异常的测试数据集。我的问题是,当我在测试数据集上使用预测方法时,均值移位不会将异常标记为-1或任何其他指示异常或异常值但将其与有效集群相关联的值。 代码如下:
import pandas as pd
import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth
from sklearn import preprocessing
if __name__ == '__main__':
train= pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
scaler = preprocessing.StandardScaler().fit(train)
bandwidth = estimate_bandwidth(train, n_jobs=-1)
ms = MeanShift(bandwidth=bandwidth,n_jobs=-1)
ms.fit(scaler.transform(train))
prediction = ms.predict(scaler.transform(test))
test["cluster"] = prediction
print np.unique(prediction)
这里是第5行训练数据集:
A B C
0 300 0 200
1 300 0 200
2 300 0 350
3 300 1 350
4 400 1 350
这里是带有虚拟异常的前5行测试数据集:
A B C
0 300 0 200
1 300 0 200
2 300 0 350
3 100000000 100000000 100000000
4 400 1 350
如何检测测试数据集中的异常?