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

