與上禮拜那篇文章一樣,只是這次將資料改為CRE data,希望也有良好的表現。

1. 讀入資料

import pandas as pd
import numpy as np
from sklearn import datasets

# import some data to play with
df = pd.read_csv('C:/Users/User/OneDrive - student.nsysu.edu.tw/Educations/NSYSU/fu_chung/bacterial/123.csv')
x = df.iloc[:,0:1471]
y = pd.DataFrame(df['CRE'])
impor = pd.read_csv('C:/Users/User/OneDrive - student.nsysu.edu.tw/Educations/NSYSU/fu_chung/bacterial - PCA/A.csv')
impo = np.array(impor['names'])
impo
array(['V994', 'V1428', 'V1426', ..., 'V1469', 'V1470', 'V1471'],
      dtype=object)
print(x.shape)
x.head()
(95, 1471)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V1462 V1463 V1464 V1465 V1466 V1467 V1468 V1469 V1470 V1471
0 251357.70 0.00 494285.53 114879.43 31439.26 0.00 94049.75 0.00 0.0 0.0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1 394550.19 65408.65 2186094.75 137296.91 0.00 401122.91 350882.59 0.00 0.0 0.0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 0.00 129236.21 675608.81 182865.20 16074.49 0.00 0.00 49122.42 0.0 0.0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 137403.30 0.00 818021.25 0.00 0.00 0.00 0.00 24273.09 0.0 0.0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 377358.78 327564.66 532502.63 0.00 0.00 913255.00 0.00 0.00 0.0 0.0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

5 rows × 1471 columns

y.describe()
CRE
count 95.000000
mean 0.484211
std 0.502402
min 0.000000
25% 0.000000
50% 0.000000
75% 1.000000
max 1.000000
%matplotlib inline
by_fraud = y.groupby('CRE')
by_fraud.size().plot(kind = 'bar')

<matplotlib.axes._subplots.AxesSubplot at 0x1a79ebc9e80>

2. 建構分類器

from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn import ensemble
from sklearn import metrics
import random

random.seed(1)
arr = np.arange(95)
np.random.shuffle(arr)

x = x.loc[:,impo[0:66]]


train_X = x.iloc[arr[0:67],:]
test_X = x.iloc[arr[67:95],:]
train_y = y.iloc[arr[0:67],:]
test_y = y.iloc[arr[67:95],:]

clf = AdaBoostClassifier(n_estimators=100)
#forest = ensemble.RandomForestClassifier(n_estimators = 100)
fit = clf.fit(train_X, train_y)

test_y_predicted = clf.predict(test_X)
accuracy_rf = metrics.accuracy_score(test_y, test_y_predicted)
print(accuracy_rf)

1.0

C:3-gpu-packages.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). y = column_or_1d(y, warn=True)

3. 生成資料

f_x = x[y['CRE'].isin([1])]
f_y = y[y['CRE'].isin([1])]
print(f_x.shape)
print(f_y.shape)

(46, 66) (46, 1)

f_x.head()
V994 V1428 V1426 V172 V931 V1380 V609 V205 V1232 V1228 V220 V541 V831 V179 V222 V20 V46 V5 V376 V838
0 0.0 0.0 0.0 0.00 1771528.63 0.0 0.0 34648996.00 0.00 0.0 2811579.25 0.0 0.00 1320076.50 1703159.75 0.00 278172.31 31439.26 0.00 0.0
1 0.0 0.0 0.0 0.00 2974296.75 0.0 0.0 15947273.00 6531.42 0.0 12315243.00 0.0 101713.74 5010689.50 5576199.00 72396.62 159735.28 0.00 0.00 0.0
2 0.0 0.0 0.0 0.00 1624149.75 0.0 12143.2 45838852.00 0.00 0.0 3341006.50 0.0 0.00 1664652.63 988186.19 306535.81 259147.75 16074.49 0.00 0.0
3 0.0 0.0 0.0 11023.45 3516034.75 0.0 0.0 18172.75 0.00 0.0 8821420.00 0.0 0.00 3170263.50 3228012.25 0.00 0.00 0.00 16622.36 0.0
4 0.0 0.0 0.0 0.00 4416865.00 0.0 0.0 4918602.00 0.00 0.0 0.00 0.0 310930.25 0.00 0.00 0.00 0.00 0.00 25615.47 0.0

5 rows × 66 columns

3.1 OCWGAN setting

# import modules
%matplotlib inline
import os
import random
import keras
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm import tqdm_notebook as tqdm
from keras.models import Model
from keras.layers import Input, Reshape
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import UpSampling1D, Conv1D
from keras.layers.advanced_activations import LeakyReLU
from keras.optimizers import Adam, SGD,RMSprop
from keras.callbacks import TensorBoard
from sklearn.preprocessing import StandardScaler

# set parameters
dim = f_x.shape[1]
num = f_x.shape[0]
g_data = f_x

# Standard Scaler
ss = StandardScaler()
g_data = pd.DataFrame(ss.fit_transform(g_data))

# wasserstein_loss
from keras import backend 
# implementation of wasserstein loss
def wasserstein_loss(y_true, y_pred):
    return backend.mean(y_true * y_pred)

# generator
def get_generative(G_in, dense_dim=200, out_dim= dim, lr=1e-3):
    x = Dense(dense_dim)(G_in)
    x = Activation('tanh')(x)
    G_out = Dense(out_dim, activation='tanh')(x)
    G = Model(G_in, G_out)
    opt = keras.optimizers.RMSprop(lr=lr)#原先為SGD
    G.compile(loss=wasserstein_loss, optimizer=opt)#原loss為binary_crossentropy
    return G, G_out

G_in = Input(shape=[10])
G, G_out = get_generative(G_in)
G.summary()

# discriminator
def get_discriminative(D_in, lr=1e-3, drate=.25, n_channels= dim, conv_sz=5, leak=.2):#lr=1e-3, drate=.25, n_channels= dim, conv_sz=5, leak=.2
    x = Reshape((-1, 1))(D_in)
    x = Conv1D(n_channels, conv_sz, activation='relu')(x)
    x = Dropout(drate)(x)
    x = Flatten()(x)
    x = Dense(n_channels)(x)
    D_out = Dense(2, activation='linear')(x)#sigmoid
    D = Model(D_in, D_out)
    dopt = keras.optimizers.RMSprop(lr=lr)#原先為Adam
    D.compile(loss=wasserstein_loss, optimizer=dopt)
    return D, D_out

D_in = Input(shape=[dim])
D, D_out = get_discriminative(D_in)
D.summary()

# set up gan
def set_trainability(model, trainable=False):
    model.trainable = trainable
    for layer in model.layers:
        layer.trainable = trainable
        
def make_gan(GAN_in, G, D):
    set_trainability(D, False)
    x = G(GAN_in)
    GAN_out = D(x)
    GAN = Model(GAN_in, GAN_out)
    GAN.compile(loss=wasserstein_loss, optimizer=G.optimizer)#元loss為binary_crossentropy
    return GAN, GAN_out

GAN_in = Input([10])
GAN, GAN_out = make_gan(GAN_in, G, D)
GAN.summary()

# pre train
def sample_data_and_gen(G, noise_dim=10, n_samples= num):
    XT = np.array(g_data)
    XN_noise = np.random.uniform(0, 1, size=[n_samples, noise_dim])
    XN = G.predict(XN_noise)
    X = np.concatenate((XT, XN))
    y = np.zeros((2*n_samples, 2))
    y[:n_samples, 1] = 1
    y[n_samples:, 0] = 1
    return X, y

def pretrain(G, D, noise_dim=10, n_samples = num, batch_size=32):
    X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
    set_trainability(D, True)
    D.fit(X, y, epochs=1, batch_size=batch_size)
    
pretrain(G, D)

def sample_noise(G, noise_dim=10, n_samples=num):
    X = np.random.uniform(0, 1, size=[n_samples, noise_dim])
    y = np.zeros((n_samples, 2))
    y[:, 1] = 1
    return X, y

# one class detector
def oneclass(data,kernel = 'rbf',gamma = 'auto'):
    num1 = int(len(data)/2)
    num2 = int(len(data)+1)
    from sklearn import svm
    clf = svm.OneClassSVM(kernel=kernel, gamma=gamma).fit(data[0:num1])
    origin = pd.DataFrame(clf.score_samples(data[0:num1]))
    new = pd.DataFrame(clf.score_samples(data[num1:num2]))

    occ = pd.concat([pd.DataFrame(new[0] < origin[0].min()),pd.DataFrame(new[0] > origin[0].max())], axis=1)
    occ['ava'] = pd.DataFrame(occ.iloc[:,1:2] == occ.iloc[:,0:1])
    err = sum(occ['ava'] == False)/len(occ['ava'])
    return err

# productor
def gen(GAN, G, D, times=50, n_samples= num, noise_dim=10, batch_size=32, verbose=False, v_freq=dim,):
    data = pd.DataFrame()
    for epoch in range(times):
        X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
        set_trainability(D, True)   
        xx,yy = X,y
        err = oneclass(xx)        
        num1 = int(len(xx)/2)
        num2 = int(len(xx)+1)
        xx = ss.inverse_transform(xx)
        data = pd.concat([data,pd.DataFrame(xx[num1:num2])],axis = 0)              
        print("The %d times generator one class svm Error Rate=%f" %(epoch, err))           
            
    return data

# training
def train(GAN, G, D, epochs=1, n_samples= num, noise_dim=10, batch_size=32, verbose=False, v_freq=dim,):
    d_loss = []
    g_loss = []
    e_range = range(epochs)
    if verbose:
        e_range = tqdm(e_range)
    for epoch in e_range:
        X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
        set_trainability(D, True)
        d_loss.append(D.train_on_batch(X, y))
        xx,yy = X,y
        err = oneclass(xx) 
        print("The %d times epoch one class svm Error Rate=%f" %(epoch, err))
        
        X, y = sample_noise(G, n_samples=n_samples, noise_dim=noise_dim)
        set_trainability(D, False)
        g_loss.append(GAN.train_on_batch(X, y))
        if verbose and (epoch + 1) % v_freq == 0:
            print("Epoch #{}: Generative Loss: {}, Discriminative Loss: {}".format(epoch + 1, g_loss[-1], d_loss[-1]))       
            
    return d_loss, g_loss, xx, yy

Using TensorFlow backend.

WARNING:tensorflow:From C:3-gpu-packages_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.

WARNING:tensorflow:From C:3-gpu-packages_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.

WARNING:tensorflow:From C:3-gpu-packages_backend.py:4138: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.

WARNING:tensorflow:From C:3-gpu-packages.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.


Layer (type) Output Shape Param #
================================================================= input_1 (InputLayer) (None, 10) 0
_________________________________________________________________ dense_1 (Dense) (None, 200) 2200
_________________________________________________________________ activation_1 (Activation) (None, 200) 0
_________________________________________________________________ dense_2 (Dense) (None, 66) 13266
================================================================= Total params: 15,466 Trainable params: 15,466 Non-trainable params: 0 _________________________________________________________________ WARNING:tensorflow:From C:3-gpu-packages_backend.py:133: The name tf.placeholder_with_default is deprecated. Please use tf.compat.v1.placeholder_with_default instead.

WARNING:tensorflow:From C:3-gpu-packagesbackend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version. Instructions for updating: Please use rate instead of keep_prob. Rate should be set to rate = 1 - keep_prob. ________________________________________________________________ Layer (type) Output Shape Param #
================================================================= input_2 (InputLayer) (None, 66) 0
_________________________________________________________________ reshape_1 (Reshape) (None, 66, 1) 0
_________________________________________________________________ conv1d_1 (Conv1D) (None, 62, 66) 396
_________________________________________________________________ dropout_1 (Dropout) (None, 62, 66) 0
_________________________________________________________________ flatten_1 (Flatten) (None, 4092) 0
_________________________________________________________________ dense_3 (Dense) (None, 66) 270138
_________________________________________________________________ dense_4 (Dense) (None, 2) 134
================================================================= Total params: 270,668 Trainable params: 270,668 Non-trainable params: 0 _________________________________________________________________ _________________________________________________________________ Layer (type) Output Shape Param #
================================================================= input_3 (InputLayer) (None, 10) 0
_________________________________________________________________ model_1 (Model) (None, 66) 15466
_________________________________________________________________ model_2 (Model) (None, 2) 270668
================================================================= Total params: 286,134 Trainable params: 15,466 Non-trainable params: 270,668 _________________________________________________________________ WARNING:tensorflow:From C:3-gpu-packages_backend.py:2741: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.

Epoch 1/1 92/92 [==============================] - ETA: 0s - loss: 0.044 - 0s 3ms/step - loss: -1.2661

3.2 OCGAN setting

# import modules
%matplotlib inline
import os
import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm import tqdm_notebook as tqdm
from keras.models import Model
from keras.layers import Input, Reshape
from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import UpSampling1D, Conv1D
from keras.layers.advanced_activations import LeakyReLU
from keras.optimizers import Adam, SGD
from keras.callbacks import TensorBoard
from sklearn.preprocessing import StandardScaler

# set parameters
dim = f_x.shape[1]
num = f_x.shape[0]
g_data = f_x

# Standard Scaler
ss = StandardScaler()
g_data = pd.DataFrame(ss.fit_transform(g_data))

# generator
def get_generative(G_in, dense_dim=200, out_dim= dim, lr=1e-3):
    x = Dense(dense_dim)(G_in)
    x = Activation('tanh')(x)
    G_out = Dense(out_dim, activation='tanh')(x)
    G = Model(G_in, G_out)
    opt = SGD(lr=lr)
    G.compile(loss='binary_crossentropy', optimizer=opt)
    return G, G_out

G_in = Input(shape=[10])
G, G_out = get_generative(G_in)
G.summary()

# discriminator
def get_discriminative(D_in, lr=1e-3, drate=.25, n_channels= dim, conv_sz=5, leak=.2):
    x = Reshape((-1, 1))(D_in)
    x = Conv1D(n_channels, conv_sz, activation='relu')(x)
    x = Dropout(drate)(x)
    x = Flatten()(x)
    x = Dense(n_channels)(x)
    D_out = Dense(2, activation='sigmoid')(x)
    D = Model(D_in, D_out)
    dopt = Adam(lr=lr)
    D.compile(loss='binary_crossentropy', optimizer=dopt)
    return D, D_out

D_in = Input(shape=[dim])
D, D_out = get_discriminative(D_in)
D.summary()

# set up gan
def set_trainability(model, trainable=False):
    model.trainable = trainable
    for layer in model.layers:
        layer.trainable = trainable
        
def make_gan(GAN_in, G, D):
    set_trainability(D, False)
    x = G(GAN_in)
    GAN_out = D(x)
    GAN = Model(GAN_in, GAN_out)
    GAN.compile(loss='binary_crossentropy', optimizer=G.optimizer)
    return GAN, GAN_out

GAN_in = Input([10])
GAN, GAN_out = make_gan(GAN_in, G, D)
GAN.summary()

# pre train
def sample_data_and_gen(G, noise_dim=10, n_samples= num):
    XT = np.array(g_data)
    XN_noise = np.random.uniform(0, 1, size=[n_samples, noise_dim])
    XN = G.predict(XN_noise)
    X = np.concatenate((XT, XN))
    y = np.zeros((2*n_samples, 2))
    y[:n_samples, 1] = 1
    y[n_samples:, 0] = 1
    return X, y

def pretrain(G, D, noise_dim=10, n_samples = num, batch_size=32):
    X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
    set_trainability(D, True)
    D.fit(X, y, epochs=1, batch_size=batch_size)
    
pretrain(G, D)

def sample_noise(G, noise_dim=10, n_samples=num):
    X = np.random.uniform(0, 1, size=[n_samples, noise_dim])
    y = np.zeros((n_samples, 2))
    y[:, 1] = 1
    return X, y

# one class detector
def oneclass(data,kernel = 'rbf',gamma = 'auto'):
    num1 = int(len(data)/2)
    num2 = int(len(data)+1)
    from sklearn import svm
    clf = svm.OneClassSVM(kernel=kernel, gamma=gamma).fit(data[0:num1])
    origin = pd.DataFrame(clf.score_samples(data[0:num1]))
    new = pd.DataFrame(clf.score_samples(data[num1:num2]))

    occ = pd.concat([pd.DataFrame(new[0] < origin[0].min()),pd.DataFrame(new[0] > origin[0].max())], axis=1)
    occ['ava'] = pd.DataFrame(occ.iloc[:,1:2] == occ.iloc[:,0:1])
    err = sum(occ['ava'] == False)/len(occ['ava'])
    return err

# training
def train1(GAN, G, D, epochs=1, n_samples= num, noise_dim=10, batch_size=32, verbose=False, v_freq=dim,):
    d_loss = []
    g_loss = []
    e_range = range(epochs)
    if verbose:
        e_range = tqdm(e_range)
    for epoch in e_range:
        X, y = sample_data_and_gen(G, n_samples=n_samples, noise_dim=noise_dim)
        set_trainability(D, True)
        d_loss.append(D.train_on_batch(X, y))
        xx,yy = X,y
        err = oneclass(xx) 
        print("The %d times epoch one class svm Error Rate=%f" %(epoch, err))
        
        X, y = sample_noise(G, n_samples=n_samples, noise_dim=noise_dim)
        set_trainability(D, False)
        g_loss.append(GAN.train_on_batch(X, y))
        if verbose and (epoch + 1) % v_freq == 0:
            print("Epoch #{}: Generative Loss: {}, Discriminative Loss: {}".format(epoch + 1, g_loss[-1], d_loss[-1]))
    return d_loss, g_loss, xx, yy

WARNING:tensorflow:From C:3-gpu-packagesimpl.py:180: add_dispatch_support..wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version. Instructions for updating: Use tf.where in 2.0, which has the same broadcast rule as np.where ________________________________________________________________ Layer (type) Output Shape Param #
================================================================= input_4 (InputLayer) (None, 10) 0
_________________________________________________________________ dense_5 (Dense) (None, 200) 2200
_________________________________________________________________ activation_2 (Activation) (None, 200) 0
_________________________________________________________________ dense_6 (Dense) (None, 66) 13266
================================================================= Total params: 15,466 Trainable params: 15,466 Non-trainable params: 0 _________________________________________________________________ _________________________________________________________________ Layer (type) Output Shape Param #
================================================================= input_5 (InputLayer) (None, 66) 0
_________________________________________________________________ reshape_2 (Reshape) (None, 66, 1) 0
_________________________________________________________________ conv1d_2 (Conv1D) (None, 62, 66) 396
_________________________________________________________________ dropout_2 (Dropout) (None, 62, 66) 0
_________________________________________________________________ flatten_2 (Flatten) (None, 4092) 0
_________________________________________________________________ dense_7 (Dense) (None, 66) 270138
_________________________________________________________________ dense_8 (Dense) (None, 2) 134
================================================================= Total params: 270,668 Trainable params: 270,668 Non-trainable params: 0 _________________________________________________________________ _________________________________________________________________ Layer (type) Output Shape Param #
================================================================= input_6 (InputLayer) (None, 10) 0
_________________________________________________________________ model_4 (Model) (None, 66) 15466
_________________________________________________________________ model_5 (Model) (None, 2) 270668
================================================================= Total params: 286,134 Trainable params: 15,466 Non-trainable params: 270,668 _________________________________________________________________ Epoch 1/1 92/92 [==============================] - ETA: 1s - loss: 0.667 - 1s 6ms/step - loss: 0.5688

3.3 SMOTE setting

因正負樣本相差過小,且smote function為自動平衡方法,也就是說它會自動抓取正負樣本差距給予平衡,但因差距僅三樣,因此我將資料0的部分重複貼上依次,使其差距擴大至49+3 = 52,下一步驟的adaysn也採用相同的更動資料。

x0 = x[y['CRE'].isin([0])]
y0 = y[y['CRE'].isin([0])]
x0 = pd.concat([x,x0],axis = 0)  
y0 = pd.concat([y,y0],axis = 0)  
from imblearn.over_sampling import SMOTE
smo = SMOTE()
X_smo, y_smo = smo.fit_sample(x0, y0)
X_smo = pd.DataFrame(X_smo)
y_smo = pd.DataFrame(y_smo)

C:3-gpu-packages.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). y = column_or_1d(y, warn=True)

%matplotlib inline
by_fraud = y_smo.groupby(0)
by_fraud.size().plot(kind = 'bar')

<matplotlib.axes._subplots.AxesSubplot at 0x1a7c68d49e8>

3. 4 ADASYN setting

from imblearn.over_sampling import ADASYN
ada = ADASYN()
X_ada, y_ada = ada.fit_sample(x0, y0)
X_ada = pd.DataFrame(X_ada)
y_ada = pd.DataFrame(y_ada)

C:3-gpu-packages.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). y = column_or_1d(y, warn=True)

4. 比較效果

4.1 OCWGAN

ocwgan epoch 1

d_loss, g_loss ,xx,yy= train(GAN, G, D, epochs=1, verbose=True)
new_data = gen(GAN, G, D, times = 100,verbose=True)
test_y_predicted = clf.predict(new_data)
print(test_y_predicted,'acc = ',np.mean(test_y_predicted))

HBox(children=(IntProgress(value=0, max=1), HTML(value=’’)))

The 0 times epoch one class svm Error Rate=1.000000

The 0 times generator one class svm Error Rate=1.000000 The 1 times generator one class svm Error Rate=1.000000 The 2 times generator one class svm Error Rate=1.000000 The 3 times generator one class svm Error Rate=1.000000 The 4 times generator one class svm Error Rate=1.000000 The 5 times generator one class svm Error Rate=1.000000 The 6 times generator one class svm Error Rate=1.000000 The 7 times generator one class svm Error Rate=1.000000 The 8 times generator one class svm Error Rate=1.000000 The 9 times generator one class svm Error Rate=1.000000 The 10 times generator one class svm Error Rate=1.000000 The 11 times generator one class svm Error Rate=1.000000 The 12 times generator one class svm Error Rate=0.978261 The 13 times generator one class svm Error Rate=1.000000 The 14 times generator one class svm Error Rate=1.000000 The 15 times generator one class svm Error Rate=0.978261 The 16 times generator one class svm Error Rate=1.000000 The 17 times generator one class svm Error Rate=1.000000 The 18 times generator one class svm Error Rate=1.000000 The 19 times generator one class svm Error Rate=0.978261 The 20 times generator one class svm Error Rate=1.000000 The 21 times generator one class svm Error Rate=1.000000 The 22 times generator one class svm Error Rate=1.000000 The 23 times generator one class svm Error Rate=1.000000 The 24 times generator one class svm Error Rate=1.000000 The 25 times generator one class svm Error Rate=0.978261 The 26 times generator one class svm Error Rate=1.000000 The 27 times generator one class svm Error Rate=1.000000 The 28 times generator one class svm Error Rate=1.000000 The 29 times generator one class svm Error Rate=0.978261 The 30 times generator one class svm Error Rate=1.000000 The 31 times generator one class svm Error Rate=0.978261 The 32 times generator one class svm Error Rate=1.000000 The 33 times generator one class svm Error Rate=1.000000 The 34 times generator one class svm Error Rate=1.000000 The 35 times generator one class svm Error Rate=1.000000 The 36 times generator one class svm Error Rate=1.000000 The 37 times generator one class svm Error Rate=1.000000 The 38 times generator one class svm Error Rate=1.000000 The 39 times generator one class svm Error Rate=0.978261 The 40 times generator one class svm Error Rate=1.000000 The 41 times generator one class svm Error Rate=1.000000 The 42 times generator one class svm Error Rate=1.000000 The 43 times generator one class svm Error Rate=1.000000 The 44 times generator one class svm Error Rate=1.000000 The 45 times generator one class svm Error Rate=1.000000 The 46 times generator one class svm Error Rate=1.000000 The 47 times generator one class svm Error Rate=1.000000 The 48 times generator one class svm Error Rate=0.978261 The 49 times generator one class svm Error Rate=1.000000 The 50 times generator one class svm Error Rate=1.000000 The 51 times generator one class svm Error Rate=1.000000 The 52 times generator one class svm Error Rate=1.000000 The 53 times generator one class svm Error Rate=1.000000 The 54 times generator one class svm Error Rate=1.000000 The 55 times generator one class svm Error Rate=1.000000 The 56 times generator one class svm Error Rate=1.000000 The 57 times generator one class svm Error Rate=1.000000 The 58 times generator one class svm Error Rate=0.978261 The 59 times generator one class svm Error Rate=1.000000 The 60 times generator one class svm Error Rate=0.956522 The 61 times generator one class svm Error Rate=1.000000 The 62 times generator one class svm Error Rate=1.000000 The 63 times generator one class svm Error Rate=1.000000 The 64 times generator one class svm Error Rate=1.000000 The 65 times generator one class svm Error Rate=1.000000 The 66 times generator one class svm Error Rate=1.000000 The 67 times generator one class svm Error Rate=1.000000 The 68 times generator one class svm Error Rate=1.000000 The 69 times generator one class svm Error Rate=1.000000 The 70 times generator one class svm Error Rate=1.000000 The 71 times generator one class svm Error Rate=1.000000 The 72 times generator one class svm Error Rate=1.000000 The 73 times generator one class svm Error Rate=1.000000 The 74 times generator one class svm Error Rate=1.000000 The 75 times generator one class svm Error Rate=0.978261 The 76 times generator one class svm Error Rate=1.000000 The 77 times generator one class svm Error Rate=1.000000 The 78 times generator one class svm Error Rate=1.000000 The 79 times generator one class svm Error Rate=1.000000 The 80 times generator one class svm Error Rate=1.000000 The 81 times generator one class svm Error Rate=1.000000 The 82 times generator one class svm Error Rate=1.000000 The 83 times generator one class svm Error Rate=1.000000 The 84 times generator one class svm Error Rate=1.000000 The 85 times generator one class svm Error Rate=0.978261 The 86 times generator one class svm Error Rate=1.000000 The 87 times generator one class svm Error Rate=1.000000 The 88 times generator one class svm Error Rate=1.000000 The 89 times generator one class svm Error Rate=1.000000 The 90 times generator one class svm Error Rate=1.000000 The 91 times generator one class svm Error Rate=1.000000 The 92 times generator one class svm Error Rate=1.000000 The 93 times generator one class svm Error Rate=0.978261 The 94 times generator one class svm Error Rate=1.000000 The 95 times generator one class svm Error Rate=1.000000 The 96 times generator one class svm Error Rate=0.978261 The 97 times generator one class svm Error Rate=1.000000 The 98 times generator one class svm Error Rate=1.000000 The 99 times generator one class svm Error Rate=0.978261 [1 1 1 … 1 1 1] acc = 1.0

ocwgan epoch 2

d_loss, g_loss ,xx,yy= train(GAN, G, D, epochs=5, verbose=True)
new_data = gen(GAN, G, D, times = 100,verbose=True)
test_y_predicted = clf.predict(new_data)
test_y_predicted
print(test_y_predicted,'acc = ',np.mean(test_y_predicted))

HBox(children=(IntProgress(value=0, max=5), HTML(value=’’)))

The 0 times epoch one class svm Error Rate=1.000000 The 1 times epoch one class svm Error Rate=0.673913 The 2 times epoch one class svm Error Rate=0.217391 The 3 times epoch one class svm Error Rate=0.000000 The 4 times epoch one class svm Error Rate=0.021739

The 0 times generator one class svm Error Rate=0.000000 The 1 times generator one class svm Error Rate=0.021739 The 2 times generator one class svm Error Rate=0.000000 The 3 times generator one class svm Error Rate=0.021739 The 4 times generator one class svm Error Rate=0.021739 The 5 times generator one class svm Error Rate=0.000000 The 6 times generator one class svm Error Rate=0.000000 The 7 times generator one class svm Error Rate=0.000000 The 8 times generator one class svm Error Rate=0.021739 The 9 times generator one class svm Error Rate=0.021739 The 10 times generator one class svm Error Rate=0.000000 The 11 times generator one class svm Error Rate=0.000000 The 12 times generator one class svm Error Rate=0.000000 The 13 times generator one class svm Error Rate=0.000000 The 14 times generator one class svm Error Rate=0.000000 The 15 times generator one class svm Error Rate=0.000000 The 16 times generator one class svm Error Rate=0.021739 The 17 times generator one class svm Error Rate=0.000000 The 18 times generator one class svm Error Rate=0.000000 The 19 times generator one class svm Error Rate=0.000000 The 20 times generator one class svm Error Rate=0.000000 The 21 times generator one class svm Error Rate=0.000000 The 22 times generator one class svm Error Rate=0.000000 The 23 times generator one class svm Error Rate=0.000000 The 24 times generator one class svm Error Rate=0.000000 The 25 times generator one class svm Error Rate=0.000000 The 26 times generator one class svm Error Rate=0.000000 The 27 times generator one class svm Error Rate=0.000000 The 28 times generator one class svm Error Rate=0.021739 The 29 times generator one class svm Error Rate=0.000000 The 30 times generator one class svm Error Rate=0.021739 The 31 times generator one class svm Error Rate=0.000000 The 32 times generator one class svm Error Rate=0.000000 The 33 times generator one class svm Error Rate=0.021739 The 34 times generator one class svm Error Rate=0.000000 The 35 times generator one class svm Error Rate=0.000000 The 36 times generator one class svm Error Rate=0.000000 The 37 times generator one class svm Error Rate=0.000000 The 38 times generator one class svm Error Rate=0.000000 The 39 times generator one class svm Error Rate=0.000000 The 40 times generator one class svm Error Rate=0.000000 The 41 times generator one class svm Error Rate=0.000000 The 42 times generator one class svm Error Rate=0.000000 The 43 times generator one class svm Error Rate=0.000000 The 44 times generator one class svm Error Rate=0.000000 The 45 times generator one class svm Error Rate=0.000000 The 46 times generator one class svm Error Rate=0.000000 The 47 times generator one class svm Error Rate=0.000000 The 48 times generator one class svm Error Rate=0.000000 The 49 times generator one class svm Error Rate=0.000000 The 50 times generator one class svm Error Rate=0.000000 The 51 times generator one class svm Error Rate=0.000000 The 52 times generator one class svm Error Rate=0.000000 The 53 times generator one class svm Error Rate=0.000000 The 54 times generator one class svm Error Rate=0.000000 The 55 times generator one class svm Error Rate=0.021739 The 56 times generator one class svm Error Rate=0.000000 The 57 times generator one class svm Error Rate=0.021739 The 58 times generator one class svm Error Rate=0.000000 The 59 times generator one class svm Error Rate=0.000000 The 60 times generator one class svm Error Rate=0.000000 The 61 times generator one class svm Error Rate=0.000000 The 62 times generator one class svm Error Rate=0.000000 The 63 times generator one class svm Error Rate=0.000000 The 64 times generator one class svm Error Rate=0.000000 The 65 times generator one class svm Error Rate=0.000000 The 66 times generator one class svm Error Rate=0.000000 The 67 times generator one class svm Error Rate=0.000000 The 68 times generator one class svm Error Rate=0.000000 The 69 times generator one class svm Error Rate=0.021739 The 70 times generator one class svm Error Rate=0.000000 The 71 times generator one class svm Error Rate=0.000000 The 72 times generator one class svm Error Rate=0.000000 The 73 times generator one class svm Error Rate=0.000000 The 74 times generator one class svm Error Rate=0.000000 The 75 times generator one class svm Error Rate=0.000000 The 76 times generator one class svm Error Rate=0.000000 The 77 times generator one class svm Error Rate=0.000000 The 78 times generator one class svm Error Rate=0.000000 The 79 times generator one class svm Error Rate=0.000000 The 80 times generator one class svm Error Rate=0.000000 The 81 times generator one class svm Error Rate=0.000000 The 82 times generator one class svm Error Rate=0.000000 The 83 times generator one class svm Error Rate=0.000000 The 84 times generator one class svm Error Rate=0.000000 The 85 times generator one class svm Error Rate=0.000000 The 86 times generator one class svm Error Rate=0.000000 The 87 times generator one class svm Error Rate=0.000000 The 88 times generator one class svm Error Rate=0.000000 The 89 times generator one class svm Error Rate=0.000000 The 90 times generator one class svm Error Rate=0.000000 The 91 times generator one class svm Error Rate=0.000000 The 92 times generator one class svm Error Rate=0.000000 The 93 times generator one class svm Error Rate=0.000000 The 94 times generator one class svm Error Rate=0.000000 The 95 times generator one class svm Error Rate=0.021739 The 96 times generator one class svm Error Rate=0.000000 The 97 times generator one class svm Error Rate=0.000000 The 98 times generator one class svm Error Rate=0.000000 The 99 times generator one class svm Error Rate=0.000000 [1 1 1 … 1 1 1] acc = 1.0

ocwgan epoch 3

d_loss, g_loss ,xx,yy= train(GAN, G, D, epochs=3, verbose=True)
new_data = gen(GAN, G, D, times = 1,verbose=True)
test_y_predicted = clf.predict(new_data)
print(test_y_predicted,'acc = ',np.mean(test_y_predicted))

HBox(children=(IntProgress(value=0, max=3), HTML(value=’’)))

The 0 times epoch one class svm Error Rate=0.021739 The 1 times epoch one class svm Error Rate=0.000000 The 2 times epoch one class svm Error Rate=0.000000

The 0 times generator one class svm Error Rate=0.000000 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] acc = 1.0

4.2 OCGAN

ocgan epoch 1

d_loss, g_loss ,xx,yy= train1(GAN, G, D, epochs=1, verbose=True)
new_data = gen(GAN, G, D, times = 10,verbose=True)
test_y_predicted = clf.predict(new_data)
print(test_y_predicted,'acc = ',np.mean(test_y_predicted))

HBox(children=(IntProgress(value=0, max=1), HTML(value=’’)))

The 0 times epoch one class svm Error Rate=1.000000

The 0 times generator one class svm Error Rate=1.000000 The 1 times generator one class svm Error Rate=1.000000 The 2 times generator one class svm Error Rate=1.000000 The 3 times generator one class svm Error Rate=1.000000 The 4 times generator one class svm Error Rate=1.000000 The 5 times generator one class svm Error Rate=1.000000 The 6 times generator one class svm Error Rate=1.000000 The 7 times generator one class svm Error Rate=1.000000 The 8 times generator one class svm Error Rate=1.000000 The 9 times generator one class svm Error Rate=1.000000 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] acc = 1.0

ocgan epoch 2

d_loss, g_loss ,xx,yy= train1(GAN, G, D, epochs=100, verbose=True)
new_data = gen(GAN, G, D, times = 10,verbose=True)
test_y_predicted = clf.predict(new_data)
print(test_y_predicted,'error = ',np.mean(test_y_predicted))

HBox(children=(IntProgress(value=0), HTML(value=’’)))

The 0 times epoch one class svm Error Rate=1.000000 The 1 times epoch one class svm Error Rate=1.000000 The 2 times epoch one class svm Error Rate=1.000000 The 3 times epoch one class svm Error Rate=1.000000 The 4 times epoch one class svm Error Rate=1.000000 The 5 times epoch one class svm Error Rate=1.000000 The 6 times epoch one class svm Error Rate=1.000000 The 7 times epoch one class svm Error Rate=1.000000 The 8 times epoch one class svm Error Rate=1.000000 The 9 times epoch one class svm Error Rate=1.000000 The 10 times epoch one class svm Error Rate=1.000000 The 11 times epoch one class svm Error Rate=1.000000 The 12 times epoch one class svm Error Rate=1.000000 The 13 times epoch one class svm Error Rate=1.000000 The 14 times epoch one class svm Error Rate=1.000000 The 15 times epoch one class svm Error Rate=1.000000 The 16 times epoch one class svm Error Rate=1.000000 The 17 times epoch one class svm Error Rate=1.000000 The 18 times epoch one class svm Error Rate=1.000000 The 19 times epoch one class svm Error Rate=1.000000 The 20 times epoch one class svm Error Rate=1.000000 The 21 times epoch one class svm Error Rate=1.000000 The 22 times epoch one class svm Error Rate=1.000000 The 23 times epoch one class svm Error Rate=1.000000 The 24 times epoch one class svm Error Rate=1.000000 The 25 times epoch one class svm Error Rate=1.000000 The 26 times epoch one class svm Error Rate=1.000000 The 27 times epoch one class svm Error Rate=1.000000 The 28 times epoch one class svm Error Rate=1.000000 The 29 times epoch one class svm Error Rate=1.000000 The 30 times epoch one class svm Error Rate=1.000000 The 31 times epoch one class svm Error Rate=1.000000 The 32 times epoch one class svm Error Rate=1.000000 The 33 times epoch one class svm Error Rate=1.000000 The 34 times epoch one class svm Error Rate=1.000000 The 35 times epoch one class svm Error Rate=1.000000 The 36 times epoch one class svm Error Rate=1.000000 The 37 times epoch one class svm Error Rate=1.000000 The 38 times epoch one class svm Error Rate=1.000000 The 39 times epoch one class svm Error Rate=1.000000 The 40 times epoch one class svm Error Rate=1.000000 The 41 times epoch one class svm Error Rate=1.000000 The 42 times epoch one class svm Error Rate=1.000000 The 43 times epoch one class svm Error Rate=1.000000 The 44 times epoch one class svm Error Rate=1.000000 The 45 times epoch one class svm Error Rate=1.000000 The 46 times epoch one class svm Error Rate=1.000000 The 47 times epoch one class svm Error Rate=1.000000 The 48 times epoch one class svm Error Rate=1.000000 The 49 times epoch one class svm Error Rate=1.000000 The 50 times epoch one class svm Error Rate=1.000000 The 51 times epoch one class svm Error Rate=1.000000 The 52 times epoch one class svm Error Rate=1.000000 The 53 times epoch one class svm Error Rate=1.000000 The 54 times epoch one class svm Error Rate=1.000000 The 55 times epoch one class svm Error Rate=1.000000 The 56 times epoch one class svm Error Rate=1.000000 The 57 times epoch one class svm Error Rate=1.000000 The 58 times epoch one class svm Error Rate=1.000000 The 59 times epoch one class svm Error Rate=1.000000 The 60 times epoch one class svm Error Rate=1.000000 The 61 times epoch one class svm Error Rate=1.000000 The 62 times epoch one class svm Error Rate=1.000000 The 63 times epoch one class svm Error Rate=1.000000 The 64 times epoch one class svm Error Rate=1.000000 The 65 times epoch one class svm Error Rate=1.000000 Epoch #66: Generative Loss: 4.731652736663818, Discriminative Loss: 0.021196838468313217 The 66 times epoch one class svm Error Rate=1.000000 The 67 times epoch one class svm Error Rate=1.000000 The 68 times epoch one class svm Error Rate=1.000000 The 69 times epoch one class svm Error Rate=1.000000 The 70 times epoch one class svm Error Rate=1.000000 The 71 times epoch one class svm Error Rate=1.000000 The 72 times epoch one class svm Error Rate=1.000000 The 73 times epoch one class svm Error Rate=1.000000 The 74 times epoch one class svm Error Rate=1.000000 The 75 times epoch one class svm Error Rate=1.000000 The 76 times epoch one class svm Error Rate=1.000000 The 77 times epoch one class svm Error Rate=1.000000 The 78 times epoch one class svm Error Rate=1.000000 The 79 times epoch one class svm Error Rate=1.000000 The 80 times epoch one class svm Error Rate=1.000000 The 81 times epoch one class svm Error Rate=1.000000 The 82 times epoch one class svm Error Rate=1.000000 The 83 times epoch one class svm Error Rate=0.978261 The 84 times epoch one class svm Error Rate=0.913043 The 85 times epoch one class svm Error Rate=0.934783 The 86 times epoch one class svm Error Rate=0.869565 The 87 times epoch one class svm Error Rate=0.782609 The 88 times epoch one class svm Error Rate=0.782609 The 89 times epoch one class svm Error Rate=0.673913 The 90 times epoch one class svm Error Rate=0.478261 The 91 times epoch one class svm Error Rate=0.478261 The 92 times epoch one class svm Error Rate=0.347826 The 93 times epoch one class svm Error Rate=0.521739 The 94 times epoch one class svm Error Rate=0.152174 The 95 times epoch one class svm Error Rate=0.217391 The 96 times epoch one class svm Error Rate=0.195652 The 97 times epoch one class svm Error Rate=0.130435 The 98 times epoch one class svm Error Rate=0.130435 The 99 times epoch one class svm Error Rate=0.217391

The 0 times generator one class svm Error Rate=0.043478 The 1 times generator one class svm Error Rate=0.086957 The 2 times generator one class svm Error Rate=0.043478 The 3 times generator one class svm Error Rate=0.108696 The 4 times generator one class svm Error Rate=0.108696 The 5 times generator one class svm Error Rate=0.021739 The 6 times generator one class svm Error Rate=0.065217 The 7 times generator one class svm Error Rate=0.021739 The 8 times generator one class svm Error Rate=0.086957 The 9 times generator one class svm Error Rate=0.043478 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] error = 1.0

ocgan epoch 3

d_loss, g_loss ,xx,yy= train1(GAN, G, D, epochs=10, verbose=True)
new_data = gen(GAN, G, D, times = 10,verbose=True)
test_y_predicted = clf.predict(new_data)
print(test_y_predicted,'acc = ',np.mean(test_y_predicted))

HBox(children=(IntProgress(value=0, max=10), HTML(value=’’)))

The 0 times epoch one class svm Error Rate=0.065217 The 1 times epoch one class svm Error Rate=0.152174 The 2 times epoch one class svm Error Rate=0.000000 The 3 times epoch one class svm Error Rate=0.065217 The 4 times epoch one class svm Error Rate=0.021739 The 5 times epoch one class svm Error Rate=0.021739 The 6 times epoch one class svm Error Rate=0.021739 The 7 times epoch one class svm Error Rate=0.021739 The 8 times epoch one class svm Error Rate=0.000000 The 9 times epoch one class svm Error Rate=0.000000

The 0 times generator one class svm Error Rate=0.000000 The 1 times generator one class svm Error Rate=0.000000 The 2 times generator one class svm Error Rate=0.000000 The 3 times generator one class svm Error Rate=0.021739 The 4 times generator one class svm Error Rate=0.021739 The 5 times generator one class svm Error Rate=0.000000 The 6 times generator one class svm Error Rate=0.000000 The 7 times generator one class svm Error Rate=0.000000 The 8 times generator one class svm Error Rate=0.000000 The 9 times generator one class svm Error Rate=0.000000 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] acc = 1.0

4.3 SMOTE

new_data = X_smo.iloc[144:196,:]
test_y_predicted = clf.predict(new_data)
print(test_y_predicted)
print('acc = ',np.mean(test_y_predicted))

[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] acc = 1.0

y_smo.shape

(196, 1)

from sklearn import svm
oclf = svm.OneClassSVM(kernel="rbf", gamma="auto").fit(x)
origin = pd.DataFrame(oclf.score_samples(x))
new = pd.DataFrame(oclf.score_samples(new_data))
occ = pd.concat([pd.DataFrame(new[0] < origin[0].min()),pd.DataFrame(new[0] > origin[0].max())], axis=1)
occ['ava'] = pd.DataFrame(occ.iloc[:,1:2] == occ.iloc[:,0:1])
err = sum(occ['ava'] == False)/len(occ['ava'])
err

1.0

4.4 ADASYN

new_data = X_ada.iloc[144:196,:]
test_y_predicted = clf.predict(new_data)
print(test_y_predicted)
print('acc = ',np.mean(test_y_predicted))

[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1] acc = 0.9615384615384616

from sklearn import svm
oclf = svm.OneClassSVM(kernel="rbf", gamma="auto").fit(x)
origin = pd.DataFrame(oclf.score_samples(x))
new = pd.DataFrame(oclf.score_samples(new_data))
occ = pd.concat([pd.DataFrame(new[0] < origin[0].min()),pd.DataFrame(new[0] > origin[0].max())], axis=1)
occ['ava'] = pd.DataFrame(occ.iloc[:,1:2] == occ.iloc[:,0:1])
err = sum(occ['ava'] == False)/len(occ['ava'])
err

1.0

結論上來看,gan與smote的補植也皆為正確模擬樣本,而adaysn的效果則來的比較偏移一些。