基于单类分类的异常检测小例子
主要内容
代码主要是基于单类分类的方法做异常检测,采用简单的One Class SVM(单分类SVM) 和 IsolationForest(孤立森林) 两种方法进行异常检测,采用GAN的对抗训练过程提取数据的特征,将特征送入One Class SVM和IsolationForest中进行单类学习。One Class SVM和IsolationForest均使用sklearn里的函数,基于tensorflow编程实现。
代码
导入包
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
from models import ALOCC_Model
from kh_tools import *
from utils import *
import scipy.misc
import time
import os
import roc
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import matplotlib.font_manager
from sklearn import svm
from sklearn import metrics
from scipy import stats
from sklearn.ensemble import IsolationForest
定义参数
flags = tf.app.flags
flags.DEFINE_integer("epoch", 1, "Epoch to train [25]")
flags.DEFINE_float("learning_rate", 0, "Learning rate of for adam [0.0002]")
flags.DEFINE_float("beta1", 0.5, "Momentum term of adam [0.5]")
flags.DEFINE_integer("attention_label", 1, "Conditioned label that growth attention of training label [1]")
flags.DEFINE_float("r_alpha", 0.2, "Refinement parameter [0.2]")
flags.DEFINE_float("train_size", np.inf, "The size of train images [np.inf]")
flags.DEFINE_integer("batch_size", 128, "The size of batch images [64]")
flags.DEFINE_integer("input_height", 45, "The size of image to use. [45]")
flags.DEFINE_integer("input_width", None, "The size of image to use. If None, same value as input_height [None]")
flags.DEFINE_integer("output_height", 45, "The size of the output images to produce [45]")
flags.DEFINE_integer("output_width", None, "The size of the output images to produce. If None, same value as output_height [None]")
flags.DEFINE_string("dataset", "UCSD", "The name of dataset [UCSD, mnist]")
flags.DEFINE_string("train_dataset_address", "./dataset/UCSD_Anomaly_Dataset.v1p2/UCSDped2/Train", "The path of dataset")
flags.DEFINE_string("test_dataset_address", "./dataset/UCSD_Anomaly_Dataset.v1p2/UCSDped2/Test", "The path of dataset")
flags.DEFINE_string("input_fname_pattern", "*", "Glob pattern of filename of input images [*]")
flags.DEFINE_string("checkpoint_dir", "./checkpoint/UCSD_128_45_45/", "Directory name to save the checkpoints [checkpoint]")
flags.DEFI