使用一个类svm-python进行新颖性检测

时间:2014-08-07 08:33:51

标签: python machine-learning scikit-learn svm

我正在使用机器学习进行新奇检测。我尝试在scikit learn中使用一级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 个答案:

答案 0 :(得分:2)

内点标记为1,异常值(即您的情况下的新颖性)标记为-1(作为predict函数的结果)。

请注意,current documentation错误地指出异常值标记为1& inlier标记为0.请查看github repo上的最新更新以获取正确的信息。

答案 1 :(得分:1)

check = clf.predict(test_data)

如果check = 1则不是异常和

如果check = -1那么它就是异常,即数据是异常值