def test_ae(ae_params): # OutlierAE parameters threshold, threshold_perc, return_instance_score, return_feature_score, outlier_perc, outlier_type = ae_params # define encoder and decoder encoder_net = tf.keras.Sequential( [ InputLayer(input_shape=(input_dim,)), Dense(5, activation=tf.nn.relu), Dense(encoding_dim, activation=None) ] ) decoder_net = tf.keras.Sequential( [ InputLayer(input_shape=(encoding_dim,)), Dense(5, activation=tf.nn.relu), Dense(input_dim, activation=tf.nn.sigmoid) ] ) # init OutlierAE ae = OutlierAE( threshold=threshold, encoder_net=encoder_net, decoder_net=decoder_net ) assert ae.threshold == threshold assert ae.meta == {'name': 'OutlierAE', 'detector_type': 'offline', 'data_type': None, 'version': __version__} # fit OutlierAE, infer threshold and compute scores ae.fit(X, epochs=5, verbose=False) ae.infer_threshold(X, threshold_perc=threshold_perc) fscore, iscore = ae.score(X) perc_score = 100 * (iscore < ae.threshold).astype(int).sum() / iscore.shape[0] assert threshold_perc + 5 > perc_score > threshold_perc - 5 # make and check predictions od_preds = ae.predict(X, return_instance_score=return_instance_score, return_feature_score=return_feature_score, outlier_type=outlier_type, outlier_perc=outlier_perc ) assert od_preds['meta'] == ae.meta if outlier_type == 'instance': assert od_preds['data']['is_outlier'].shape == (X.shape[0],) if return_instance_score: assert od_preds['data']['is_outlier'].sum() == (od_preds['data']['instance_score'] > ae.threshold).astype(int).sum() elif outlier_type == 'feature': assert od_preds['data']['is_outlier'].shape == X.shape if return_feature_score: assert od_preds['data']['is_outlier'].sum() == (od_preds['data']['feature_score'] > ae.threshold).astype(int).sum() if return_feature_score: assert od_preds['data']['feature_score'].shape == X.shape else: assert od_preds['data']['feature_score'] is None if return_instance_score: assert od_preds['data']['instance_score'].shape == (X.shape[0],) else: assert od_preds['data']['instance_score'] is None
outputs = tf.keras.layers.Dense(2, activation=tf.nn.softmax)(inputs) model = tf.keras.Model(inputs=inputs, outputs=outputs) detector = [ AdversarialAE(threshold=threshold, model=model, **kwargs), IForest(threshold=threshold), Mahalanobis(threshold=threshold), OutlierAEGMM(threshold=threshold, gmm_density_net=gmm_density_net, n_gmm=n_gmm, **kwargs), OutlierVAE(threshold=threshold, latent_dim=latent_dim, samples=samples, **kwargs), OutlierAE(threshold=threshold, **kwargs), OutlierVAEGMM(threshold=threshold, gmm_density_net=gmm_density_net, n_gmm=n_gmm, latent_dim=latent_dim, samples=samples, **kwargs), OutlierProphet(threshold=.7, growth='logistic'), SpectralResidual(threshold=threshold, window_amp=10, window_local=10), OutlierSeq2Seq(input_dim, seq_len, threshold=threshold, threshold_net=threshold_net, latent_dim=latent_dim) ] n_tests = len(detector)
InputLayer(input_shape=(encoding_dim,)), Dense(np.prod(dense_dim)), Reshape(target_shape=dense_dim), Conv2D(1024, 4, strides=2, padding='same', activation=tf.nn.relu), Conv2D(512, 4, strides=2, padding='same', activation=tf.nn.relu), Conv2DTranspose(256, 4, strides=2, padding='same', activation=tf.nn.relu), Conv2DTranspose(64, 4, strides=2, padding='same', activation=tf.nn.relu), Conv2DTranspose(3, 4, strides=2, padding='same', activation='sigmoid') ]) # In[32]: od = OutlierAE( threshold = 0.01, encoder_net=encoder_net, decoder_net=decoder_net) # In[33]: adam = tf.keras.optimizers.Adam(lr=1e-4) model = od.fit(train, epochs=100, verbose=True, optimizer = adam) od.infer_threshold(test, threshold_perc=95) preds = od.predict(test, outlier_type='instance', return_instance_score=True,