使用单类SVM进行新颖性检测-python

0 投票
2 回答
5385 浏览
提问于 2025-04-18 16:21

我正在使用机器学习进行新奇检测。为了实现这个目标,我尝试在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上的最新更新

撰写回答