From 353ce5e8dfa10489bf034041edc754c85f57ba1e Mon Sep 17 00:00:00 2001 From: iqiukp <44639227+iqiukp@users.noreply.github.com> Date: Wed, 25 Mar 2020 17:05:13 +0800 Subject: [PATCH] Update README.md --- README.md | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 167 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 77bf4f2..102c178 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,167 @@ -# SVDD - Python code for abnormal detection or fault detection using Support Vector Data Description (SVDD) +# Support Vector Data Description (SVDD) + +Python Code for abnormal detection or fault detection using SVDD. + +Version 1.0, 1-DEC-2019 + +Email: iqiukp@outlook.com + +------------------------------------------------------------------- + +## Main features + +* SVDD model for training dataset containing only positive training data. (SVDD) +* SVDD model for training dataset containing both positive training data and negative training data. (nSVDD) +* Multiple kinds of kernel functions. +* Visualization module including ROC curve plotting, test result plotting, and decision boundary. + +------------------------------------------------------------------- + +## Requirements + +* matplotlib +* cvxopt +* scipy +* numpy +* scikit_learn + +------------------------------------------------------------------- + +## About SVDD model + +Two types of SVDD models are built according to the following references: + +[1] Tax D M J, Duin R P W. Support vector data description[J]. Machine learning, 2004, 54(1): 45-66. + +------------------------------------------------------------------- + +## A simple application for decision boundary (using differnent kernel functions) + +``` + +# -*- coding: utf-8 -*- + +import sys +sys.path.append("..") +from src.svdd import SVDD +from src.visualize import Visualization as draw +from data import PrepareData as load + +# load banana-shape data +trainData, testData, trainLabel, testLabel = load.banana() + + +# kernel list +kernelList = {"1": {"type": 'gauss', "width": 1/24}, + "2": {"type": 'linear', "offset": 0}, + "3": {"type": 'ploy', "degree": 2, "offset": 0}, + "4": {"type": 'tanh', "gamma": 1e-4, "offset": 0}, + "5": {"type": 'lapl', "width": 1/12} + } + + +for i in range(len(kernelList)): + + # set SVDD parameters + parameters = {"positive penalty": 0.9, + "negative penalty": 0.8, + "kernel": kernelList.get(str(i+1)), + "option": {"display": 'on'}} + + # construct an SVDD model + svdd = SVDD(parameters) + + # train SVDD model + svdd.train(trainData, trainLabel) + + # test SVDD model + distance, accuracy = svdd.test(testData, testLabel) + + # visualize the results + # draw.testResult(svdd, distance) + # draw.testROC(testLabel, distance) + draw.boundary(svdd, trainData, trainLabel) + +``` + +* gaussian kernel function + +

+ +

+ +* linear kernel function + +

+ +

+ +* polynomial kernel function + +

+ +

+ +* sigmoid kernel function + +

+ +

+ +* laplacian kernel function + +

+ +

+ + +## A simple application for abnormal detection or fault detection + +``` + +# -*- coding: utf-8 -*- + +import sys +sys.path.append("..") +from src.svdd import SVDD +from src.visualize import Visualization as draw +from data import PrepareData as load + +# load banana-shape data +trainData, testData, trainLabel, testLabel = load.iris() + +# set SVDD parameters +parameters = {"positive penalty": 0.9, + "negative penalty": 0.8, + "kernel": {"type": 'gauss', "width": 1/24}, + "option": {"display": 'on'}} + + +# construct an SVDD model +svdd = SVDD(parameters) + +# train SVDD model +svdd.train(trainData, trainLabel) + + +# test SVDD model +distance, accuracy = svdd.test(testData, testLabel) + +# visualize the results +draw.testResult(svdd, distance) +draw.testROC(testLabel, distance) + +``` + +* test result + +

+ +

+ +* ROC curve + +

+ +

+