├── load_data
├── __init__.py
├── __pycache__
│ ├── main.cpython-36.pyc
│ ├── mnist.cpython-36.pyc
│ ├── cifar10.cpython-36.pyc
│ ├── tabular.cpython-36.pyc
│ ├── __init__.cpython-36.pyc
│ └── preprocessing.cpython-36.pyc
├── preprocessing.py
└── tabular.py
├── PRC.png
├── ROC.png
├── output_8_4.png
├── output_8_5.png
├── output_9_3.png
├── output_9_4.png
├── output_10_4.png
├── output_10_5.png
├── output_11_3.png
├── output_11_4.png
├── output_12_3.png
├── output_12_4.png
├── datasets
├── cardio.mat
├── letter.mat
├── optdigits.mat
├── pendigits.mat
└── satellite.mat
├── utils
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── visualize.cpython-36.pyc
│ └── plot_culve.cpython-36.pyc
├── plot_culve.py
└── visualize.py
├── checkpoints
├── cardioselfADVAEdecoder
├── cardioselfADVAEencoder
├── letterselfADVAEdecoder
├── letterselfADVAEencoder
├── optdigitsselfADVAEdecoder
├── optdigitsselfADVAEencoder
├── pendigitsselfADVAEdecoder
├── pendigitsselfADVAEencoder
├── satelliteselfADVAEdecoder
└── satelliteselfADVAEencoder
├── models
├── __pycache__
│ ├── AE.cpython-36.pyc
│ ├── GAN.cpython-36.pyc
│ ├── VAE.cpython-36.pyc
│ ├── mnist.cpython-36.pyc
│ ├── __init__.cpython-36.pyc
│ ├── introVAE.cpython-36.pyc
│ ├── self_adVAE.cpython-36.pyc
│ ├── basic_module.cpython-36.pyc
│ └── introVAE_AD.cpython-36.pyc
├── __init__.py
├── basic_module.py
├── AE.py
├── GAN.py
├── VAE.py
└── self_adVAE.py
├── base
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── base_net.cpython-36.pyc
│ ├── base_dataset.cpython-36.pyc
│ ├── base_trainer.cpython-36.pyc
│ └── torchvision_dataset.cpython-36.pyc
├── __init__.py
├── torchvision_dataset.py
├── base_net.py
├── base_dataset.py
└── base_trainer.py
├── README.md
└── self_adVAE-test.ipynb
/load_data/__init__.py:
--------------------------------------------------------------------------------
1 | from .tabular import load_tab_data
2 |
--------------------------------------------------------------------------------
/PRC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/PRC.png
--------------------------------------------------------------------------------
/ROC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/ROC.png
--------------------------------------------------------------------------------
/output_8_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_8_4.png
--------------------------------------------------------------------------------
/output_8_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_8_5.png
--------------------------------------------------------------------------------
/output_9_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_9_3.png
--------------------------------------------------------------------------------
/output_9_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_9_4.png
--------------------------------------------------------------------------------
/output_10_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_10_4.png
--------------------------------------------------------------------------------
/output_10_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_10_5.png
--------------------------------------------------------------------------------
/output_11_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_11_3.png
--------------------------------------------------------------------------------
/output_11_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_11_4.png
--------------------------------------------------------------------------------
/output_12_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_12_3.png
--------------------------------------------------------------------------------
/output_12_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/output_12_4.png
--------------------------------------------------------------------------------
/datasets/cardio.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/datasets/cardio.mat
--------------------------------------------------------------------------------
/datasets/letter.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/datasets/letter.mat
--------------------------------------------------------------------------------
/datasets/optdigits.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/datasets/optdigits.mat
--------------------------------------------------------------------------------
/datasets/pendigits.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/datasets/pendigits.mat
--------------------------------------------------------------------------------
/datasets/satellite.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/datasets/satellite.mat
--------------------------------------------------------------------------------
/utils/__init__.py:
--------------------------------------------------------------------------------
1 | from .visualize import Visualizer
2 | from .plot_culve import plot_ROC,plot_PRC
--------------------------------------------------------------------------------
/checkpoints/cardioselfADVAEdecoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/cardioselfADVAEdecoder
--------------------------------------------------------------------------------
/checkpoints/cardioselfADVAEencoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/cardioselfADVAEencoder
--------------------------------------------------------------------------------
/checkpoints/letterselfADVAEdecoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/letterselfADVAEdecoder
--------------------------------------------------------------------------------
/checkpoints/letterselfADVAEencoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/letterselfADVAEencoder
--------------------------------------------------------------------------------
/checkpoints/optdigitsselfADVAEdecoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/optdigitsselfADVAEdecoder
--------------------------------------------------------------------------------
/checkpoints/optdigitsselfADVAEencoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/optdigitsselfADVAEencoder
--------------------------------------------------------------------------------
/checkpoints/pendigitsselfADVAEdecoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/pendigitsselfADVAEdecoder
--------------------------------------------------------------------------------
/checkpoints/pendigitsselfADVAEencoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/pendigitsselfADVAEencoder
--------------------------------------------------------------------------------
/checkpoints/satelliteselfADVAEdecoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/satelliteselfADVAEdecoder
--------------------------------------------------------------------------------
/checkpoints/satelliteselfADVAEencoder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/checkpoints/satelliteselfADVAEencoder
--------------------------------------------------------------------------------
/models/__pycache__/AE.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/AE.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/GAN.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/GAN.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/VAE.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/VAE.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/mnist.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/mnist.cpython-36.pyc
--------------------------------------------------------------------------------
/base/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/base/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/base/__pycache__/base_net.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/base/__pycache__/base_net.cpython-36.pyc
--------------------------------------------------------------------------------
/load_data/__pycache__/main.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/load_data/__pycache__/main.cpython-36.pyc
--------------------------------------------------------------------------------
/load_data/__pycache__/mnist.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/load_data/__pycache__/mnist.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/introVAE.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/introVAE.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/utils/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/visualize.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/utils/__pycache__/visualize.cpython-36.pyc
--------------------------------------------------------------------------------
/base/__pycache__/base_dataset.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/base/__pycache__/base_dataset.cpython-36.pyc
--------------------------------------------------------------------------------
/base/__pycache__/base_trainer.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/base/__pycache__/base_trainer.cpython-36.pyc
--------------------------------------------------------------------------------
/load_data/__pycache__/cifar10.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/load_data/__pycache__/cifar10.cpython-36.pyc
--------------------------------------------------------------------------------
/load_data/__pycache__/tabular.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/load_data/__pycache__/tabular.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/self_adVAE.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/self_adVAE.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/plot_culve.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/utils/__pycache__/plot_culve.cpython-36.pyc
--------------------------------------------------------------------------------
/base/__init__.py:
--------------------------------------------------------------------------------
1 | from .base_dataset import *
2 | from .torchvision_dataset import *
3 | from .base_net import *
4 | from .base_trainer import *
5 |
--------------------------------------------------------------------------------
/load_data/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/load_data/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/basic_module.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/basic_module.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/introVAE_AD.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/models/__pycache__/introVAE_AD.cpython-36.pyc
--------------------------------------------------------------------------------
/base/__pycache__/torchvision_dataset.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/base/__pycache__/torchvision_dataset.cpython-36.pyc
--------------------------------------------------------------------------------
/load_data/__pycache__/preprocessing.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WangXuhongCN/adVAE/HEAD/load_data/__pycache__/preprocessing.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__init__.py:
--------------------------------------------------------------------------------
1 | # from .alexnet import AlexNet
2 | # from .resnet34 import ResNet34
3 | # from .squeezenet import SqueezeNet
4 | # from torchvision.models import InceptinV3
5 | # from torchvision.models import alexnet as AlexNet
6 | #from .mnist import mnist_Encoder,mnist_Decoder,mnist_Gauss_trans
7 | from .VAE import VAE
8 | from .AE import AE
9 | from .self_adVAE import Encoder,Decoder,Gauss_trans #,self_adVAE
10 | from .GAN import NetD,NetG
--------------------------------------------------------------------------------
/base/torchvision_dataset.py:
--------------------------------------------------------------------------------
1 | from .base_dataset import BaseADDataset
2 | from torch.utils.data import DataLoader
3 |
4 |
5 | class TorchvisionDataset(BaseADDataset):
6 | """TorchvisionDataset class for datasets already implemented in torchvision.datasets."""
7 |
8 | def __init__(self, root: str):
9 | super().__init__(root)
10 |
11 | def loaders(self, batch_size: int, shuffle_train=True, shuffle_test=False, num_workers: int = 0) -> (
12 | DataLoader, DataLoader):
13 | train_loader = DataLoader(dataset=self.train_set, batch_size=batch_size, shuffle=shuffle_train,
14 | num_workers=num_workers)
15 | test_loader = DataLoader(dataset=self.test_set, batch_size=batch_size, shuffle=shuffle_test,
16 | num_workers=num_workers)
17 | return train_loader, test_loader
18 |
--------------------------------------------------------------------------------
/base/base_net.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import torch.nn as nn
3 | import numpy as np
4 |
5 |
6 | class BaseNet(nn.Module):
7 | """Base class for all neural networks."""
8 |
9 | def __init__(self):
10 | super().__init__()
11 | self.logger = logging.getLogger(self.__class__.__name__)
12 | self.rep_dim = None # representation dimensionality, i.e. dim of the last layer
13 |
14 | def forward(self, *input):
15 | """
16 | Forward pass logic
17 | :return: Network output
18 | """
19 | raise NotImplementedError
20 |
21 | def summary(self):
22 | """Network summary."""
23 | net_parameters = filter(lambda p: p.requires_grad, self.parameters())
24 | params = sum([np.prod(p.size()) for p in net_parameters])
25 | self.logger.info('Trainable parameters: {}'.format(params))
26 | self.logger.info(self)
27 |
--------------------------------------------------------------------------------
/base/base_dataset.py:
--------------------------------------------------------------------------------
1 | from abc import ABC, abstractmethod
2 | from torch.utils.data import DataLoader
3 |
4 |
5 | class BaseADDataset(ABC):
6 | """Anomaly detection dataset base class."""
7 |
8 | def __init__(self, root: str):
9 | super().__init__()
10 | self.root = root # root path to data
11 |
12 | self.n_classes = 2 # 0: normal, 1: outlier
13 | self.anomal_classes = None # tuple with original class labels that define the normal class
14 | self.normal_classes = None # tuple with original class labels that define the outlier class
15 |
16 | self.train_set = None # must be of type torch.utils.data.Dataset
17 | self.test_set = None # must be of type torch.utils.data.Dataset
18 |
19 | @abstractmethod
20 | def loaders(self, batch_size: int, shuffle_train=True, shuffle_test=False, num_workers: int = 0) -> (
21 | DataLoader, DataLoader):
22 | """Implement data loaders of type torch.utils.data.DataLoader for train_set and test_set."""
23 | pass
24 |
25 | def __repr__(self):
26 | return self.__class__.__name__
27 |
--------------------------------------------------------------------------------
/models/basic_module.py:
--------------------------------------------------------------------------------
1 | #coding:utf8
2 | import torch as t
3 | import time
4 |
5 |
6 | class BasicModule(t.nn.Module):
7 | """
8 | 封装了nn.Module,主要是提供了save和load两个方法
9 | """
10 |
11 | def __init__(self):
12 | super(BasicModule,self).__init__()
13 | self.model_name=str(type(self))# 默认名字
14 |
15 | def load(self, path):
16 | """
17 | 可加载指定路径的模型
18 | """
19 | self.load_state_dict(t.load(path))
20 |
21 | def save(self, name=None):
22 | """
23 | 保存模型,默认使用“模型名字+时间”作为文件名
24 | """
25 | if name is None:
26 | prefix = 'checkpoints/' + self.model_name + '_'
27 | name = time.strftime(prefix + '%m%d_%H:%M:%S.pth')
28 | t.save(self.state_dict(), name)
29 | return name
30 |
31 | def get_optimizer(self, lr, weight_decay):
32 | return t.optim.Adam(self.parameters(), lr=lr, weight_decay=weight_decay)
33 |
34 |
35 | class Flat(t.nn.Module):
36 | """
37 | 把输入reshape成(batch_size,dim_length)
38 | """
39 |
40 | def __init__(self):
41 | super(Flat, self).__init__()
42 | #self.size = size
43 |
44 | def forward(self, x):
45 | return x.view(x.size(0), -1)
46 |
--------------------------------------------------------------------------------
/load_data/preprocessing.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import numpy as np
3 |
4 |
5 | def get_target_label_idx(labels, targets):
6 | """
7 | Get the indices of labels that are included in targets.
8 | :param labels: array of labels
9 | :param targets: list/tuple of target labels
10 | :return: list with indices of target labels
11 | """
12 | return np.argwhere(~np.isin(labels, targets)).flatten().tolist()
13 |
14 |
15 | def global_contrast_normalization(x: torch.tensor, scale='l2'):
16 | """
17 | Apply global contrast normalization to tensor, i.e. subtract mean across features (pixels) and normalize by scale,
18 | which is either the standard deviation, L1- or L2-norm across features (pixels).
19 | Note this is a *per sample* normalization globally across features (and not across the dataset).
20 | """
21 |
22 | assert scale in ('l1', 'l2')
23 |
24 | n_features = int(np.prod(x.shape))
25 |
26 | mean = torch.mean(x) # mean over all features (pixels) per sample
27 | x -= mean
28 |
29 | if scale == 'l1':
30 | x_scale = torch.mean(torch.abs(x))
31 |
32 | if scale == 'l2':
33 | x_scale = torch.sqrt(torch.sum(x ** 2)) / n_features
34 |
35 | x /= x_scale
36 |
37 | return x
38 |
--------------------------------------------------------------------------------
/base/base_trainer.py:
--------------------------------------------------------------------------------
1 | from abc import ABC, abstractmethod
2 | from .base_dataset import BaseADDataset
3 | from .base_net import BaseNet
4 |
5 |
6 | class BaseTrainer(ABC):
7 | """Trainer base class."""
8 |
9 | def __init__(self, optimizer_name: str, lr: float, n_epochs: int, lr_milestones: tuple, batch_size: int,
10 | weight_decay: float, beta1:float,device: str, n_jobs_dataloader: int):
11 | super().__init__()
12 | self.optimizer_name = optimizer_name
13 | self.lr = lr
14 | self.n_epochs = n_epochs
15 | self.lr_milestones = lr_milestones
16 | self.batch_size = batch_size
17 | self.weight_decay = weight_decay
18 | self.beta1 = beta1
19 | self.device = device
20 | self.n_jobs_dataloader = n_jobs_dataloader
21 |
22 | @abstractmethod
23 | def train(self, dataset: BaseADDataset, net: BaseNet) -> BaseNet:
24 | """
25 | Implement train method that trains the given network using the train_set of dataset.
26 | :return: Trained net
27 | """
28 | pass
29 |
30 | @abstractmethod
31 | def test(self, dataset: BaseADDataset, net: BaseNet):
32 | """
33 | Implement test method that evaluates the test_set of dataset on the given network.
34 | """
35 | pass
36 |
--------------------------------------------------------------------------------
/utils/plot_culve.py:
--------------------------------------------------------------------------------
1 | from sklearn.metrics import roc_curve,auc,average_precision_score,precision_recall_curve
2 | import matplotlib.pyplot as plt
3 |
4 | def plot_ROC(y_test, recon_error_test):
5 | fpr, tpr, thresholds = roc_curve(y_test, recon_error_test)
6 | roc_auc = auc(fpr, tpr)
7 |
8 | plt.title('Receiver Operating Characteristic')
9 | plt.plot(fpr, tpr, label='AUC = %0.4f'% roc_auc)
10 | plt.legend(loc='lower right')
11 | plt.plot([0,1],[0,1],'r--')
12 | plt.xlim([-0.001, 1])
13 | plt.ylim([0, 1.001])
14 | plt.ylabel('True Positive Rate')
15 | plt.xlabel('False Positive Rate')
16 | plt.savefig('ROC',dpi=1200)
17 | plt.show()
18 |
19 | def plot_PRC(y_test, recon_error_test):
20 | average_precision = average_precision_score(y_test, recon_error_test)
21 |
22 | precision,recall,thresholds_prc = precision_recall_curve(y_test, recon_error_test)
23 |
24 | plt.step(recall, precision, color='b', alpha=0.2,
25 | where='post')
26 | plt.fill_between(recall, precision, step='post', alpha=0.2,
27 | color='b')
28 |
29 | plt.xlabel('Recall')
30 | plt.ylabel('Precision')
31 | plt.ylim([0.0, 1.05])
32 | plt.xlim([0.0, 1.0])
33 | plt.title('2-class Precision-Recall curve: AP={0:0.4f}'.format(
34 | average_precision))
35 | plt.savefig('PRC',dpi=1200)
36 | plt.show()
--------------------------------------------------------------------------------
/models/AE.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 | from .basic_module import BasicModule
5 |
6 | class AE(BasicModule):
7 | def __init__(self,sample_dim:400,rep_dim:64):
8 | super().__init__()
9 | self.sample_dim = sample_dim
10 | self.rep_dim = rep_dim
11 | self.fc1=nn.Linear(sample_dim,int(0.5*sample_dim))
12 | self.bn1 = nn.BatchNorm1d(int(0.5*sample_dim))
13 | self.fc2=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
14 | self.bn2 = nn.BatchNorm1d(int(0.5*sample_dim))
15 | self.fcmu=nn.Linear(int(0.5*sample_dim),rep_dim)
16 |
17 | self.fc3=nn.Linear(rep_dim,int(0.5*sample_dim))
18 | self.bn3 = nn.BatchNorm1d(int(0.5*sample_dim))
19 | self.fc4=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
20 | self.bn4 = nn.BatchNorm1d(int(0.5*sample_dim))
21 | self.fcxmu=nn.Linear(int(0.5*sample_dim),sample_dim)
22 | #self.fcxlogvar=nn.Linear(int(0.5*sample_dim),sample_dim)
23 |
24 | def encoder(self, x):
25 | x = self.fc1(x)
26 | #x = self.bn1(x)
27 | x = F.relu(x)
28 | x = self.fc2(x)
29 | #x = self.bn2(x)
30 | x = F.relu(x)
31 | #x = x.view(x.size(0), -1)
32 | mu = self.fcmu(x)
33 | return mu
34 |
35 | def decoder(self, x):
36 | x=self.fc3(x)
37 | #x=self.bn3(x)
38 | x = F.relu(x)
39 | x=self.fc4(x)
40 | #x=self.bn4(x)
41 | x = F.relu(x)
42 | mu_x=self.fcxmu(x)
43 | mu_x = torch.sigmoid(mu_x)
44 | return mu_x
45 |
46 | def forward(self, x):
47 | z = self.encoder(x)
48 |
49 | mu_x=self.decoder(z)
50 | return mu_x,z
--------------------------------------------------------------------------------
/models/GAN.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 | from .basic_module import BasicModule
5 |
6 | class NetD(BasicModule):
7 | def __init__(self,sample_dim):
8 | super().__init__()
9 | self.sample_dim = sample_dim
10 | self.fc1=nn.Linear(sample_dim,int(0.5*sample_dim))
11 | #self.bn1 = nn.BatchNorm1d(int(0.5*sample_dim))
12 | self.fc2=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
13 | #self.bn2 = nn.BatchNorm1d(int(0.25*sample_dim))
14 | self.fc3=nn.Linear(int(0.5*sample_dim),1)
15 |
16 | def forward(self, x):
17 | x = self.fc1(x)
18 | #x = self.bn1(x)
19 | x = F.relu(x)
20 | x = self.fc2(x)
21 | #x = self.bn2(x)
22 | x = F.relu(x)
23 | #x = x.view(x.size(0), -1)
24 | x = self.fc3(x)
25 | x = torch.sigmoid(x)
26 | return x
27 |
28 | class NetG(BasicModule):
29 | def __init__(self,sample_dim:400,rep_dim:64):
30 | super().__init__()
31 | self.sample_dim = sample_dim
32 | self.rep_dim = rep_dim
33 | self.fc3=nn.Linear(rep_dim,int(0.5*sample_dim))
34 | #self.bn3 = nn.BatchNorm1d(int(0.25*sample_dim))
35 | self.fc4=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
36 | #self.bn4 = nn.BatchNorm1d(int(0.5*sample_dim))
37 | self.fcxmu=nn.Linear(int(0.5*sample_dim),sample_dim)
38 | #self.fcxlogvar=nn.Linear(int(0.5*sample_dim),sample_dim)
39 |
40 | def forward(self, x):
41 | x=self.fc3(x)
42 | #x=self.bn3(x)
43 | x = F.relu(x)
44 | x=self.fc4(x)
45 | #x=self.bn4(x)
46 | x = F.relu(x)
47 | x=self.fcxmu(x)
48 | x = torch.sigmoid(x)
49 | return x
50 |
--------------------------------------------------------------------------------
/load_data/tabular.py:
--------------------------------------------------------------------------------
1 | # from torchvision import datasets
2 | import numpy as np
3 | import scipy.io as scio
4 |
5 | def load_tab_data(data_path, dataset_name):
6 | data = scio.loadmat(data_path+dataset_name+'.mat')
7 | dataset = data['X']
8 | label = data['y']
9 | if dataset_name=='letter':
10 | sample_dim=32
11 | train_data=dataset[:1200]
12 | train_label=label[:1200]
13 | test_data=dataset[1200:]
14 | test_label=label[1200:]
15 | rep_dim=11
16 | if dataset_name=='pendigits':
17 | sample_dim=16
18 | anomaly_idx=np.where(label==1)[0]
19 | normal_idx=np.where(label==0)[0]
20 | test_idx=np.concatenate((normal_idx[:1343],anomaly_idx))
21 | train_idx=normal_idx[1343:]
22 | train_data=dataset[train_idx]
23 | train_label=label[train_idx]
24 | test_data=dataset[test_idx]
25 | test_label=label[test_idx]
26 | rep_dim=5
27 | if dataset_name=='satellite':
28 | sample_dim=36
29 | anomaly_idx=np.where(label==1)[0]
30 | normal_idx=np.where(label==0)[0]
31 | test_idx=np.concatenate((normal_idx[:1080],anomaly_idx))
32 | train_idx=normal_idx[1080:]
33 | train_data=dataset[train_idx]
34 | train_label=label[train_idx]
35 | test_data=dataset[test_idx]
36 | test_label=label[test_idx]
37 | rep_dim=12
38 | if dataset_name=='cardio':
39 | sample_dim=21
40 | train_data=dataset[:-507]
41 | train_label=label[:-507]
42 | test_data=dataset[-507:]
43 | test_label=label[-507:]
44 | rep_dim=7
45 | if dataset_name=='optdigits':
46 | sample_dim=64
47 | train_data=dataset[:-1163]
48 | train_label=label[:-1163]
49 | test_data=dataset[-1163:]
50 | test_label=label[-1163:]
51 | rep_dim=16
52 |
53 | return train_data,train_label,test_data,test_label,sample_dim,rep_dim
--------------------------------------------------------------------------------
/utils/visualize.py:
--------------------------------------------------------------------------------
1 | # coding:utf8
2 | import visdom
3 | import time
4 | import numpy as np
5 |
6 |
7 | class Visualizer(object):
8 | """
9 | 封装了visdom的基本操作,但是你仍然可以通过`self.vis.function`
10 | 调用原生的visdom接口
11 | """
12 |
13 | def __init__(self, env='default', **kwargs):
14 | self.vis = visdom.Visdom(env=env,use_incoming_socket=False, **kwargs)
15 |
16 | # 画的第几个数,相当于横座标
17 | # 保存(’loss',23) 即loss的第23个点
18 | self.index = {}
19 | self.log_text = ''
20 |
21 | def reinit(self, env='default', **kwargs):
22 | """
23 | 修改visdom的配置
24 | """
25 | self.vis = visdom.Visdom(env=env, **kwargs)
26 | return self
27 |
28 | def plot_many(self, d):
29 | """
30 | 一次plot多个
31 | @params d: dict (name,value) i.e. ('loss',0.11)
32 | """
33 | for k, v in d.items():
34 | self.plot(k, v)
35 |
36 | def img_many(self, d):
37 | for k, v in d.items():
38 | self.img(k, v)
39 |
40 | def plot(self, name, y, **kwargs):
41 | """
42 | self.plot('loss',1.00)
43 | """
44 | x = self.index.get(name, 0)
45 | self.vis.line(Y=np.array([y]), X=np.array([x]),
46 | win=name,
47 | opts=dict(title=name),
48 | update=None if x == 0 else 'append',
49 | **kwargs
50 | )
51 | self.index[name] = x + 1
52 |
53 | def img(self, name, img_, **kwargs):
54 | """
55 | self.img('input_img',t.Tensor(64,64))
56 | self.img('input_imgs',t.Tensor(3,64,64))
57 | self.img('input_imgs',t.Tensor(100,1,64,64))
58 | self.img('input_imgs',t.Tensor(100,3,64,64),nrows=10)
59 |
60 | !!!don‘t ~~self.img('input_imgs',t.Tensor(100,64,64),nrows=10)~~!!!
61 | """
62 | self.vis.images(img_.cpu().numpy(),
63 | win=name,
64 | opts=dict(title=name),
65 | **kwargs
66 | )
67 |
68 | def log(self, info, win='log_text'):
69 | """
70 | self.log({'loss':1,'lr':0.0001})
71 | """
72 |
73 | self.log_text += ('[{time}] {info}
'.format(
74 | time=time.strftime('%m%d_%H%M%S'),
75 | info=info))
76 | self.vis.text(self.log_text, win)
77 |
78 | def __getattr__(self, name):
79 | return getattr(self.vis, name)
80 |
--------------------------------------------------------------------------------
/models/VAE.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 | from .basic_module import BasicModule
5 |
6 | class VAE(BasicModule):
7 | def __init__(self,sample_dim:400,rep_dim:64):
8 | super().__init__()
9 | self.sample_dim = sample_dim
10 | self.rep_dim = rep_dim
11 | self.fc1=nn.Linear(sample_dim,int(0.5*sample_dim))
12 | self.bn1 = nn.BatchNorm1d(int(0.5*sample_dim))
13 | self.fc2=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
14 | self.bn2 = nn.BatchNorm1d(int(0.5*sample_dim))
15 | self.fcmu=nn.Linear(int(0.5*sample_dim),rep_dim)
16 | self.fclogvar=nn.Linear(int(0.5*sample_dim),rep_dim)
17 |
18 | self.fc3=nn.Linear(rep_dim,int(0.5*sample_dim))
19 | self.bn3 = nn.BatchNorm1d(int(0.5*sample_dim))
20 | self.fc4=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
21 | self.bn4 = nn.BatchNorm1d(int(0.5*sample_dim))
22 | self.fcxmu=nn.Linear(int(0.5*sample_dim),sample_dim)
23 | #self.fcxlogvar=nn.Linear(int(0.5*sample_dim),sample_dim)
24 |
25 | def encoder(self, x):
26 | x = self.fc1(x)
27 | #x = self.bn1(x)
28 | x = F.relu(x)
29 | x = self.fc2(x)
30 | #x = self.bn2(x)
31 | x = F.relu(x)
32 | #x = x.view(x.size(0), -1)
33 | mu = self.fcmu(x)
34 | logvar = self.fclogvar(x)
35 | return mu,logvar
36 |
37 | def decoder(self, x):
38 | x=self.fc3(x)
39 | #x=self.bn3(x)
40 | x = F.relu(x)
41 | x=self.fc4(x)
42 | #x=self.bn4(x)
43 | x = F.relu(x)
44 | mu_x=self.fcxmu(x)
45 | mu_x = torch.sigmoid(mu_x)
46 | return mu_x
47 |
48 | # def decoder(self, x):
49 | # x=self.fc3(x)
50 | # #x=self.bn3(x)
51 | # x = F.relu(x)
52 | # x=self.fc4(x)
53 | # #x=self.bn4(x)
54 | # x = F.relu(x)
55 | # mu_x=self.fcxmu(x)
56 | # mu_x = torch.sigmoid(mu_x)
57 | # logvar_x=self.fcxlogvar(x)
58 | # logvar_x = torch.sigmoid(logvar_x)
59 | # return mu_x, logvar_x
60 |
61 | def reparameterize(self, mu, logvar):
62 | std = torch.exp(0.5*logvar)
63 | eps = torch.randn_like(std)
64 | return eps.mul(std).add_(mu)
65 |
66 | def forward(self, x):
67 | mu, logvar = self.encoder(x)
68 | z = self.reparameterize(mu, logvar)
69 | mu_x=self.decoder(z)
70 | #x_recon=self.reparameterize(mu_x, logvar_x)
71 | return mu_x,z,mu, logvar
--------------------------------------------------------------------------------
/models/self_adVAE.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 | from .basic_module import BasicModule
5 |
6 | class Encoder(BasicModule):
7 | def __init__(self,sample_dim:400,rep_dim:64):
8 | super().__init__()
9 | self.sample_dim = sample_dim
10 | self.rep_dim = rep_dim
11 | self.fc1=nn.Linear(sample_dim,int(0.5*sample_dim))
12 | #self.bn1 = nn.BatchNorm1d(int(0.5*sample_dim))
13 | self.fc2=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
14 | #self.bn2 = nn.BatchNorm1d(int(0.25*sample_dim))
15 | self.fcmu=nn.Linear(int(0.5*sample_dim),rep_dim)
16 | self.fclogvar=nn.Linear(int(0.5*sample_dim),rep_dim)
17 |
18 | def forward(self, x):
19 | x = self.fc1(x)
20 | #x = self.bn1(x)
21 | x = F.relu(x)
22 | x = self.fc2(x)
23 | #x = self.bn2(x)
24 | x = F.relu(x)
25 | #x = x.view(x.size(0), -1)
26 | mu = self.fcmu(x)
27 | logvar = self.fclogvar(x)
28 | return mu,logvar
29 |
30 | class Decoder(BasicModule):
31 | def __init__(self,sample_dim:400,rep_dim:64):
32 | super().__init__()
33 | self.sample_dim = sample_dim
34 | self.rep_dim = rep_dim
35 | self.fc3=nn.Linear(rep_dim,int(0.5*sample_dim))
36 | #self.bn3 = nn.BatchNorm1d(int(0.25*sample_dim))
37 | self.fc4=nn.Linear(int(0.5*sample_dim),int(0.5*sample_dim))
38 | #self.bn4 = nn.BatchNorm1d(int(0.5*sample_dim))
39 | self.fcxmu=nn.Linear(int(0.5*sample_dim),sample_dim)
40 | #self.fcxlogvar=nn.Linear(int(0.5*sample_dim),sample_dim)
41 |
42 | def forward(self, x):
43 | x=self.fc3(x)
44 | #x=self.bn3(x)
45 | x = F.relu(x)
46 | x=self.fc4(x)
47 | #x=self.bn4(x)
48 | x = F.relu(x)
49 | x=self.fcxmu(x)
50 | x = torch.sigmoid(x)
51 | return x
52 |
53 | class Gauss_trans(BasicModule):
54 | def __init__(self,rep_dim:64):
55 | super().__init__()
56 |
57 | self.fct1=nn.Linear(rep_dim*2,rep_dim*2)
58 | self.fct2=nn.Linear(rep_dim*2,rep_dim*2)
59 | self.fctmu=nn.Linear(rep_dim*2,rep_dim)
60 | self.fctlogvar=nn.Linear(rep_dim*2,rep_dim)
61 |
62 | def forward(self, mu, logvar):
63 | z=torch.cat((mu,logvar), 1)
64 | z=self.fct1(z)
65 | z =torch.sigmoid(z)
66 | z=self.fct2(z)
67 | z =torch.sigmoid(z)
68 | mu_t=self.fctmu(z)
69 | logvar_t=self.fctlogvar(z)
70 |
71 | return mu_t,logvar_t
72 |
73 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # About datasets
2 | [Letter](http://odds.cs.stonybrook.edu/letter-recognition-dataset/),
3 | [cardio](http://odds.cs.stonybrook.edu/cardiotocogrpahy-dataset/),
4 | [opticaldigts](http://odds.cs.stonybrook.edu/optdigits-dataset/)
5 | and [pen](http://odds.cs.stonybrook.edu/pendigits-dataset/)
6 | datasets is available in [ODDS library](http://odds.cs.stonybrook.edu/).
7 | [Satellite](https://dataverse.harvard.edu/file.xhtml?persistentId=doi:10.7910/DVN/OPQMVF/UNGQHH&version=1.0) dataset can be download in [Unsupervised Anomaly Detection Benchmark](https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/OPQMVF).
8 | These datasets are also included in file folder ["**datasets**"](https://github.com/WangXuhongCN/adVAE/tree/master/datasets).
9 |
10 | # Requirements
11 | pytorch>=1.0
12 | statsmodels>=0.9.0
13 | # The whole code is coming soon...
14 |
15 | PyTorch implementation of paper: "[adVAE: A self-adversarial variational autoencoder with Gaussian anomaly prior knowledge for anomaly detection](https://doi.org/10.1016/j.knosys.2019.105187)", which has been accepted by Knowledge-based Systems.
16 |
17 | Since my code is a little "academic", my code is not readable for followers.
18 | Fortunately, [YeongHyeon](https://github.com/YeongHyeon/adVAE) and [this benchmark](https://github.com/aicenter/GenerativeAD.jl/blob/master/src/models/adVAE.jl) has shared his implemention of adVAE.
19 |
20 | The file "**self_adVAE-test.ipynb**" shows the results of adVAE. Until now, we have only uploaded some code to show the performance of the adVAE model.
21 |
22 |
23 | # Show results of adVAE
24 | The following content is the same as the content in file "**self_adVAE-test.ipynb**".
25 |
26 |
27 |
28 |
29 | ```python
30 | from __future__ import print_function
31 |
32 | import torch
33 | import numpy as np
34 | import matplotlib.pyplot as plt
35 | from sklearn.preprocessing import MinMaxScaler
36 | from sklearn.metrics import (precision_recall_curve, auc,average_precision_score,
37 | roc_curve,precision_score, recall_score, f1_score)
38 | import statsmodels.api as sm
39 | from utils.plot_culve import plot_ROC,plot_PRC
40 | import time
41 | from load_data.tabular import load_tab_data
42 | import models
43 | import random
44 | import os
45 | #import torch.utils.data
46 | ```
47 |
48 |
49 | ```python
50 | SEED=1
51 | random.seed(SEED)
52 | np.random.seed(SEED)
53 | torch.manual_seed(SEED)
54 | os.environ['PYTHONHASHSEED'] = str(SEED)
55 | torch.cuda.manual_seed(SEED)
56 | torch.cuda.manual_seed_all(SEED)
57 | torch.backends.cudnn.deterministic=True
58 | torch.backends.cudnn.benchmark = False
59 | ```
60 |
61 |
62 | ```python
63 | def reparameterize_Ltimes(mu, logvar,L):
64 | std = torch.exp(0.5*logvar)
65 | std = std.unsqueeze(1).repeat(1,L, 1)
66 | mu = mu.unsqueeze(1).repeat(1,L, 1)
67 | eps = torch.randn_like(std)
68 | return eps.mul(std).add_(mu)
69 | ```
70 |
71 |
72 | ```python
73 | def trainset_anomaly_score(x_train,encoder,decoder):
74 | print('computing anomaly score in training dataset...')
75 | encoder.eval()
76 | decoder.eval()
77 | L=1000
78 | #x_recon_error=torch.FloatTensor(x_train.size()[0]).zero_()
79 | with torch.no_grad():
80 | mu_train, logvar_train=encoder(x_train)
81 | z_train=reparameterize_Ltimes(mu_train, logvar_train,L)
82 | x_recon=decoder(z_train)
83 | res=x_recon-x_train.unsqueeze(1).repeat(1,L,1)
84 | res=torch.mean(res, 1, keepdim=False)
85 | spe=torch.diag(torch.mm(res,torch.transpose(res, 0, 1)))
86 | return spe.cpu().numpy()
87 | ```
88 |
89 |
90 | ```python
91 | def testset_anomaly_score(x_test,encoder,decoder):
92 | print('computing anomaly score in testing dataset...')
93 | encoder.eval()
94 | decoder.eval()
95 | L=1000
96 | with torch.no_grad():
97 | mu_test, logvar_test=encoder(x_test)
98 | z_test=reparameterize_Ltimes(mu_test, logvar_test,L)
99 | x_recon=decoder(z_test)
100 | res=x_recon-x_test.unsqueeze(1).repeat(1,L,1)
101 | res=torch.mean(res, 1, keepdim=False)
102 | spe=torch.diag(torch.mm(res,torch.transpose(res, 0, 1)))
103 | return spe.cpu().numpy()
104 | ```
105 |
106 |
107 | ```python
108 | def learning_threshold(train_recon_error,alpha):
109 | dens = sm.nonparametric.KDEUnivariate(train_recon_error.astype(np.float))
110 | bound = np.linspace(min(train_recon_error),max(train_recon_error),1024)
111 | dens.fit(bw='silverman',gridsize=1024)
112 | threshold=bound[min(np.where(dens.cdf>alpha)[0])]
113 | return threshold
114 | ```
115 |
116 |
117 | ```python
118 | def show_pre_recall_f1(test_recon_error,test_label,threshold):
119 | y_pred=test_recon_error.copy()
120 | larger_idx=np.where(y_pred>=threshold)
121 | lower_idx=np.where(y_predalpha)[0])]\n",
112 | " return threshold"
113 | ]
114 | },
115 | {
116 | "cell_type": "code",
117 | "execution_count": 7,
118 | "metadata": {},
119 | "outputs": [],
120 | "source": [
121 | "def show_pre_recall_f1(test_recon_error,test_label,threshold):\n",
122 | " y_pred=test_recon_error.copy()\n",
123 | " larger_idx=np.where(y_pred>=threshold)\n",
124 | " lower_idx=np.where(y_pred"
225 | ]
226 | },
227 | "metadata": {},
228 | "output_type": "display_data"
229 | },
230 | {
231 | "data": {
232 | "image/png": "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\n",
233 | "text/plain": [
234 | ""
235 | ]
236 | },
237 | "metadata": {},
238 | "output_type": "display_data"
239 | }
240 | ],
241 | "source": [
242 | "show_results(dataset_name='letter')"
243 | ]
244 | },
245 | {
246 | "cell_type": "code",
247 | "execution_count": 11,
248 | "metadata": {},
249 | "outputs": [
250 | {
251 | "name": "stdout",
252 | "output_type": "stream",
253 | "text": [
254 | "computing anomaly score in training dataset...\n",
255 | "computing anomaly score in testing dataset...\n",
256 | "testing time: 0.016\n"
257 | ]
258 | },
259 | {
260 | "name": "stderr",
261 | "output_type": "stream",
262 | "text": [
263 | "C:\\Users\\33\\AppData\\Local\\conda\\conda\\envs\\wxhdl\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
264 | " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
265 | ]
266 | },
267 | {
268 | "name": "stdout",
269 | "output_type": "stream",
270 | "text": [
271 | "threshold 0.4963552884080193\n",
272 | "precision: 0.7051282051282052\n",
273 | "recall: 0.9375\n",
274 | "f1 score: 0.8048780487804879\n"
275 | ]
276 | },
277 | {
278 | "data": {
279 | "image/png": "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\n",
280 | "text/plain": [
281 | ""
282 | ]
283 | },
284 | "metadata": {},
285 | "output_type": "display_data"
286 | },
287 | {
288 | "data": {
289 | "image/png": "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xl577VXmrT4linjc4aWXQhG/l1+GY45RET/JakoSFV8y/kbqeirKTz+FGefGjQtTkz77LLRuneqoRETKnVoURdlll3BG0733wiefKEmIVBBjx47FzJg3b97WZe+//z6nnXbaNuv16dOHMWPGAGEg/oYbbqBp06a0atWKjh078uabb+5wLHfddRdNmjThoIMO4u233y50nXfffZf27dvTqlUrevfuzaZNm7aJu127drRs2ZKuXbtuXb5y5Uq6d+/OwQcfTPPmzfn0008BGDJkCHXr1qVdu3a0a9eO8ePH7/BrSIQSRayvv4a+fcOg9W67wYwZcN11qtEkUoGMGjWKI444gtGjRyf8nMGDB7NkyRJmz57N7Nmz+ec//8nq1at3KI6cnBxGjx7NnDlzeOutt7j88svZXKBresuWLfTu3ZvRo0cze/ZsDjjgAEaMGAGEZHD55Zczbtw45syZwyuvvLL1eddccw3dunVj3rx5zJgxg+bNm299bMCAAUyfPp3p06dzyimn7NBrSJQ+ASG/iN/NN0PlynDJJeEiOiUIkULd9s855Hy/qky32WL/Gtx6esu46/zyyy98/PHHvPfee5xxxhkMybvQNY61a9fy9NNPs3DhQqpWrQrAPvvsQ48ePXYo3tdff52ePXtStWpVGjVqRJMmTZgyZQpdunTZus6yZcuoWrUqzZo1A+CEE07grrvu4sILL2TkyJGcffbZNGjQAIC9owt1V61axcSJExk+fDgAVapUoUqVKjsU645Si2L2bDjssNByOP74UMSvU6dURyUihXjttdfo1q0bzZo1o1atWnzxxRfFPmf+/Pk0aNCAGjVqFLvugAEDtnbrxP7cfffd26373XffUb9+/a3369Wrx3fffbfNOrVr12bjxo1MnToVgDFjxrB48WIAvvrqK1asWMHRRx/NoYceyvPPPw/AggULqFOnDhdccAGHHHII/fr1Y82aNVu3+eijj9KmTRv69u3LihUrin1NZUFfma+4AhYsgFGj4JxzVMRPJAHFffNPllGjRtG/f38AevbsyahRo2jfvn2RZ/qU9AygBx54IOF13b3Y/ZkZo0ePZsCAAWzYsIETTzyRnaOeik2bNvH5558zYcIE1q1bR5cuXejcuTObNm3iiy++4JFHHqFTp05cc8013H333dxxxx1cdtllDB48GDNj8ODBXHfddTz3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\n",
290 | "text/plain": [
291 | ""
292 | ]
293 | },
294 | "metadata": {},
295 | "output_type": "display_data"
296 | }
297 | ],
298 | "source": [
299 | "show_results(dataset_name='cardio')"
300 | ]
301 | },
302 | {
303 | "cell_type": "code",
304 | "execution_count": 9,
305 | "metadata": {},
306 | "outputs": [
307 | {
308 | "name": "stderr",
309 | "output_type": "stream",
310 | "text": [
311 | "C:\\Users\\33\\AppData\\Local\\conda\\conda\\envs\\wxhdl\\lib\\site-packages\\sklearn\\utils\\validation.py:595: DataConversionWarning: Data with input dtype uint8 was converted to float64 by MinMaxScaler.\n",
312 | " warnings.warn(msg, DataConversionWarning)\n"
313 | ]
314 | },
315 | {
316 | "name": "stdout",
317 | "output_type": "stream",
318 | "text": [
319 | "computing anomaly score in training dataset...\n",
320 | "computing anomaly score in testing dataset...\n",
321 | "testing time: 0.041\n"
322 | ]
323 | },
324 | {
325 | "name": "stderr",
326 | "output_type": "stream",
327 | "text": [
328 | "C:\\Users\\33\\AppData\\Local\\conda\\conda\\envs\\wxhdl\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
329 | " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
330 | ]
331 | },
332 | {
333 | "name": "stdout",
334 | "output_type": "stream",
335 | "text": [
336 | "threshold 0.1571764530193421\n",
337 | "precision: 0.5038759689922481\n",
338 | "recall: 0.8666666666666667\n",
339 | "f1 score: 0.6372549019607843\n"
340 | ]
341 | },
342 | {
343 | "data": {
344 | "image/png": "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\n",
345 | "text/plain": [
346 | ""
347 | ]
348 | },
349 | "metadata": {},
350 | "output_type": "display_data"
351 | },
352 | {
353 | "data": {
354 | "image/png": "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TuXe6lOiSMYdnn8+FPF74QU4/HAV8ZOspiSR+dLxN1LXU3F++SXMODdqVJia9MknYd99445KRKTCqUVRnG22CVc03XknfPSRkoRIhhgxYgRmxhdffLFh2bvvvssJJ5ywyXp9+vThpZdeAsKJ+KuvvprmzZvTunVrOnbsyOuvv77Fsdx22200a9aMvffemzfffLPIdd555x3at29P69at6d27N2vXrt0k7nbt2pGbm0vXrl03LB88eDCtW7cmNzeXe++9d5Pt3X///ey9997k5uZy5ZVXbvFrSIUSRaKvv4azzgonrbfbDqZMgcsvV40mkQwybNgwDj74YIYPH57yc2644QbmzZvH9OnTmT59Ov/5z39YunTpFsWRl5fH8OHDmTFjBm+88QYXXHAB6wp1Ta9fv57evXszfPhwpk+fzp577smQIUMAWLx4MRdccAGjRo1ixowZvPjiiwBMnz6dxx9/nAkTJjBlyhReffVVvvrqKwDGjh3LyJEjmTp1KjNmzGDAgAFb9BpSpU9A2FjE7/rroXp1OPfcMIhOCUKkSDf/ZwZ5Py4p12222r0ufz0xN+k6v/32Gx9++CFjx47lpJNO4qaCga5JLF++nMcff5xvvvmGmjVrArDLLrvQvXv3LYp35MiR9OjRg5o1a9KkSROaNWvGhAkT6NKly4Z1FixYQM2aNWnRogUARx99NLfddht9+/Zl6NChnHrqqTRq1AiAnaOBujNnzqRz585sG10s07VrV0aMGMGVV17Jww8/zNVXX73hdexcQYN71aKYPh0OPDC0HI46KhTx69Qp7qhEpAivvPIK3bp1o0WLFtSrV4/PPvusxOfMnj2bRo0aUbdu3RLX7d+/P+3atdvs5/bbb99s3R9++IGGDRtuuJ+Tk8MPP/ywyTr169dnzZo1TJo0CYCXXnqJuXPnAvDll1+yaNEiDjvsMPbff3+eeeYZAFq3bs24ceNYsGABy5cvZ/To0Zs85/3336dTp0507dqViRMnlviayoO+Ml94IcyZA8OGwRlnqIifSApK+uafLsOGDePSSy8FoEePHgwbNoz27dsXe6VPaa8Auueee1Je191L3J+ZMXz4cPr378+qVas45phj2DrqqVi7di2ffvopY8aMYcWKFXTp0oXOnTvTsmVLrrrqKo4++mhq165N27ZtN3nOokWLGD9+PBMnTqR79+7M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\n",
355 | "text/plain": [
356 | ""
357 | ]
358 | },
359 | "metadata": {},
360 | "output_type": "display_data"
361 | }
362 | ],
363 | "source": [
364 | "show_results(dataset_name='satellite')"
365 | ]
366 | },
367 | {
368 | "cell_type": "code",
369 | "execution_count": 9,
370 | "metadata": {},
371 | "outputs": [
372 | {
373 | "name": "stdout",
374 | "output_type": "stream",
375 | "text": [
376 | "computing anomaly score in training dataset...\n",
377 | "computing anomaly score in testing dataset...\n",
378 | "testing time: 0.064\n"
379 | ]
380 | },
381 | {
382 | "name": "stderr",
383 | "output_type": "stream",
384 | "text": [
385 | "C:\\Users\\33\\AppData\\Local\\conda\\conda\\envs\\wxhdl\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
386 | " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
387 | ]
388 | },
389 | {
390 | "name": "stdout",
391 | "output_type": "stream",
392 | "text": [
393 | "threshold 1.1300515368697348\n",
394 | "precision: 0.5597014925373134\n",
395 | "recall: 1.0\n",
396 | "f1 score: 0.7177033492822966\n"
397 | ]
398 | },
399 | {
400 | "data": {
401 | "image/png": "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\n",
402 | "text/plain": [
403 | ""
404 | ]
405 | },
406 | "metadata": {},
407 | "output_type": "display_data"
408 | },
409 | {
410 | "data": {
411 | "image/png": "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\n",
412 | "text/plain": [
413 | ""
414 | ]
415 | },
416 | "metadata": {},
417 | "output_type": "display_data"
418 | }
419 | ],
420 | "source": [
421 | "show_results(dataset_name='optdigits')"
422 | ]
423 | },
424 | {
425 | "cell_type": "code",
426 | "execution_count": 10,
427 | "metadata": {},
428 | "outputs": [
429 | {
430 | "name": "stdout",
431 | "output_type": "stream",
432 | "text": [
433 | "computing anomaly score in training dataset...\n",
434 | "computing anomaly score in testing dataset...\n",
435 | "testing time: 0.031\n"
436 | ]
437 | },
438 | {
439 | "name": "stderr",
440 | "output_type": "stream",
441 | "text": [
442 | "C:\\Users\\33\\AppData\\Local\\conda\\conda\\envs\\wxhdl\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
443 | " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
444 | ]
445 | },
446 | {
447 | "name": "stdout",
448 | "output_type": "stream",
449 | "text": [
450 | "threshold 0.47716992779044054\n",
451 | "precision: 0.5454545454545454\n",
452 | "recall: 1.0\n",
453 | "f1 score: 0.7058823529411764\n"
454 | ]
455 | },
456 | {
457 | "data": {
458 | "image/png": "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\n",
459 | "text/plain": [
460 | ""
461 | ]
462 | },
463 | "metadata": {},
464 | "output_type": "display_data"
465 | },
466 | {
467 | "data": {
468 | "image/png": "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+Ed///33PS8vz5s3b74pxkWLFnmzZs18xYoV7u5+xRVX+MCBA33NmjXu7v7999/7U089tVXxzJ0717t06eJ5eXm+YMECb9Giha9fv36L5X788Ud3d8/Ly/ODDz7Y3377bXd3X758+aZ4RowY4aeffrq7u//000++fPlyd3dftWqV77///v7KK6+4u3ufPn18zJgx7u4+ePBgf+CBB4qMraj3CpjuZfzeTfsXf2lvZU4Ukya5t2wZXvLgwe7RB0hEEpPuRHHAAQf466+/vtm0e++918855xx3d//www+9V69e3rVrV+/Ro4e/+eabm5Zbs2aNX3HFFd6qVSvv2LGj9+zZ0ydOnLjVMQ0bNsxbtmzpbdu29QkTJmyafuSRR/p3333n7u6XX365t2vXztu2bet33333pmU++ugjb926te++++5+4okn+rJly9zdfdasWd6tWzfv3Lmzd+zY0W+66aZNz/n66699r7328latWnmfPn08Ly+vyLjKO1GYF9HPlsnq79beD7vmMZ4ZvE/JC+d75BE4++xQAvzRR+HAA5MWn0hF9dlnn9G+fft0hyEJKOq9MrP/c/ceZVlfxT7radWq8PfYY+Gaa2D2bCUJEZFSqpiJYskSOOUUOOKIUMRv553DeBEq4iciUmoVK1G4w+jR0L49vPACHH54SBQiUi6yrau6MkrGe1RxEsWSJaGL6bTToE0bmDEjjBehq6tFykWNGjVYunSpkkUGcw/jUdSoUaNc11txvkW32w4WL4Z77oELLoAqVdIdkUiF0qRJE3Jzc1myZEm6Q5E48ke4K0/ZnSjmzw/HHh58MBTxmzFDCUIkSbbddttyHTVNskdSu57MrLeZfWFm883sqiLmVzezZ6L5U82seSLr3WbD+lD+u3NnGDcO5swJM5QkRETKXdKuozCzKsCXwGFALvAJcIq758Qscx7Qxd3PMbN+wInufnK89e68awufXK0Grb75HI4/PrQmUnUZu4hIlsrU6yh6AvPdfYG7rwXGAscXWuZ4YFR0/3ngECuhylW9n/9Hg2U/hqFJx41TkhARSbJkHqNoDHwb8zgXKFy/e9My7r7ezH4BGgA/xy5kZmcDZ0cP19RblzeXrawlX0E0pNC+qsS0LwpoXxTQviiwe1mfmMxEUVTLoHA/VyLL4O4jgBEAZja9rM2nikb7ooD2RQHtiwLaFwXM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\n",
469 | "text/plain": [
470 | ""
471 | ]
472 | },
473 | "metadata": {},
474 | "output_type": "display_data"
475 | }
476 | ],
477 | "source": [
478 | "show_results(dataset_name='pendigits')"
479 | ]
480 | },
481 | {
482 | "cell_type": "code",
483 | "execution_count": null,
484 | "metadata": {},
485 | "outputs": [],
486 | "source": []
487 | }
488 | ],
489 | "metadata": {
490 | "kernelspec": {
491 | "display_name": "Python [default]",
492 | "language": "python",
493 | "name": "python3"
494 | },
495 | "language_info": {
496 | "codemirror_mode": {
497 | "name": "ipython",
498 | "version": 3
499 | },
500 | "file_extension": ".py",
501 | "mimetype": "text/x-python",
502 | "name": "python",
503 | "nbconvert_exporter": "python",
504 | "pygments_lexer": "ipython3",
505 | "version": "3.6.5"
506 | }
507 | },
508 | "nbformat": 4,
509 | "nbformat_minor": 2
510 | }
511 |
--------------------------------------------------------------------------------