使用单类SVM进行新颖性检测-python
我正在使用机器学习进行新奇检测。为了实现这个目标,我尝试在scikit learn中使用一种叫做单类支持向量机(one-class svm)的方法。
from sklearn import svm
train_data = [[0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1], [0, 3, 0, 0, 0, 1, 0, 0], [0, 11, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 4]]
test_data = [[0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0]]
clf = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
clf.fit(train_data)
pred_test = clf.predict(test_data)
我对这个领域还很陌生,想知道我该如何判断我的测试数据中是否存在新奇的内容呢?
2 个回答
1
check = clf.predict(test_data)
如果 check 等于 1,那就说明数据正常,不是异常情况;
如果 check 等于 -1,那就说明数据是异常的,也就是说这个数据点是个离群值。
2
在这个模型中,正常的数据点被标记为1,而异常的数据点(在你的情况下就是新出现的点)被标记为-1,这个结果是通过predict
函数得到的。
请注意,当前的文档错误地说异常点是标记为1,而正常点是标记为0。想要获取正确的信息,请查看github上的最新更新。