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()