One-Class SVMによる異常検知

異常検知




One-Class SVMによる異常検知

忘れないように、コードだけ記録しておきます。

Python sklearnによるOne-Class SVMの実装

コード

import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline

from sklearn.svm import OneClassSVM

#乱数固定
np.random.seed(seed=2020)
arr = np.random.normal(0, 1, (100, 2))
arr2 = np.random.normal(0, 4, (10, 2))

#====2種類のランダムなデータを可視化=====
plt.scatter(arr[:,0], arr[:,1])
plt.scatter(arr2[:,0], arr2[:,1], c='r')
plt.savefig('mix_plot.png')
plt.show()

#====One-Class SVM=====
X = np.concatenate([arr, arr2])
clf = OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
clf.fit(X)
pred = clf.predict(X)

#====predは、正常:1, 外れ値:-1 になっている====
index = np.where(pred < 0)

#====異常(外れ値)検知の結果====
plt.scatter(X[:,0], X[:,1])
plt.scatter(X[index, 0], X[index, 1], c='r', label='outlair')
plt.legend()
plt.savefig('OneClassSVM.png')
plt.show()

結果

対象とするデータ

OneClassSVM

参考と参考にしたいリンク

  1. sklearn.svm.OneClassSVM
  2. One-class SVM with non-linear kernel (RBF)|Scikit-Learn
タイトルとURLをコピーしました