@ -29,12 +29,14 @@ from pandas import DataFrame
 
			
		
	
		
			
				
					from  sklearn . metrics  import  precision_score ,  recall_score ,  f1_score ,  confusion_matrix  
			
		
	
		
			
				
					from  tensorflow . keras . models  import  Sequential  
			
		
	
		
			
				
					from  tensorflow . keras . layers  import  Dense ,  Activation  
			
		
	
		
			
				
					from  tensorflow . keras . callbacks  import  Callback  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					visual  =  True  
			
		
	
		
			
				
					verbose_show  =  False  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# generate 2d classification dataset  
			
		
	
		
			
				
					def  datagen ( x_c ,  y_c ,  n_samples ,  n_features ) :  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -91,8 +93,27 @@ class EarlyStoppingOnValue(tensorflow.keras.callbacks.Callback):
 
			
		
	
		
			
				
					            ) 
 
			
		
	
		
			
				
					        return  monitor_value 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					class  VerboseEveryNEpochs ( Callback ) :  
			
		
	
		
			
				
					    def  __init__ ( self ,  every_n_epochs = 1000 ,  verbose = 1 ) : 
 
			
		
	
		
			
				
					        super ( ) . __init__ ( ) 
 
			
		
	
		
			
				
					        self . every_n_epochs  =  every_n_epochs 
 
			
		
	
		
			
				
					        self . verbose  =  verbose 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    def  on_epoch_end ( self ,  epoch ,  logs = None ) : 
 
			
		
	
		
			
				
					        if  ( epoch  +  1 )  %  self . every_n_epochs  ==  0 : 
 
			
		
	
		
			
				
					            if  self . verbose : 
 
			
		
	
		
			
				
					                print ( f " \n Epoch  { epoch  +  1 } / { self . params [ ' epochs ' ] } " ) 
 
			
		
	
		
			
				
					                if  logs : 
 
			
		
	
		
			
				
					                    log_str  =  " ,  " . join ( [ f " { k } :  { v : .4f } "  for  k ,  v  in  logs . items ( ) ] ) 
 
			
		
	
		
			
				
					                    print ( f "  -  { log_str } " ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					#создание и обучение модели автокодировщика  
			
		
	
		
			
				
					def  create_fit_save_ae ( cl_train ,  ae_file ,  irefile ,  epohs ,  verbose_show ,  patience ) :  
			
		
	
		
			
				
					def  create_fit_save_ae ( cl_train ,  ae_file ,  irefile ,  epohs ,  verbose_show ,  patience ,  * * kwargs ) :  
			
		
	
		
			
				
					    verbose_every_n_epochs  =  kwargs . get ( ' verbose_every_n_epochs ' ,  1000 ) 
 
			
		
	
		
			
				
					    early_stopping_delta  =  kwargs . get ( ' early_stopping_delta ' ,  0.01 ) 
 
			
		
	
		
			
				
					    early_stopping_value  =  kwargs . get ( ' early_stopping_value ' ,  0.0001 ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    size  =  cl_train . shape [ 1 ] 
 
			
		
	
		
			
				
					    #ans = '2' 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -140,22 +161,28 @@ def create_fit_save_ae(cl_train, ae_file, irefile, epohs, verbose_show, patience
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    optimizer  =  tensorflow . keras . optimizers . Adam ( learning_rate = 0.001 ,  beta_1 = 0.9 ,  beta_2 = 0.999 ,  amsgrad = False ) 
 
			
		
	
		
			
				
					    ae . compile ( loss = ' mean_squared_error ' ,  optimizer = optimizer ) 
 
			
		
	
		
			
				
					    error_stop  =  0.0001 
 
			
		
	
		
			
				
					    epo  =  epohs 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    early_stopping_callback_on_error  =  EarlyStoppingOnValue ( monitor = ' loss ' ,  baseline = error_stop ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    verbose  =  1  if  verbose_show  else  0 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    early_stopping_callback_on_error  =  EarlyStoppingOnValue ( monitor = ' loss ' ,  baseline = early_stopping_value ) 
 
			
		
	
		
			
				
					    early_stopping_callback_on_improving  =  tensorflow . keras . callbacks . EarlyStopping ( monitor = ' loss ' , 
 
			
		
	
		
			
				
					                                                                                           min_delta = 0.0001 ,  patience  =  patience , 
 
			
		
	
		
			
				
					                                                                                           verbose = 1 ,  mode = ' auto ' , 
 
			
		
	
		
			
				
					                                                                                           min_delta = early_stopping_delta ,  patience  =  patience , 
 
			
		
	
		
			
				
					                                                                                           verbose = verbose ,  mode = ' min ' , 
 
			
		
	
		
			
				
					                                                                                           baseline = None , 
 
			
		
	
		
			
				
					                                                                                           restore_best_weights = Fals e) 
 
			
		
	
		
			
				
					                                                                                           restore_best_weights = Tru e) 
 
			
		
	
		
			
				
					    history_callback  =  tensorflow . keras . callbacks . History ( ) 
 
			
		
	
		
			
				
					    verbose  =  1  if  verbose_show  else  0   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    history_object  =  ae . fit ( cl_train ,  cl_train , 
 
			
		
	
		
			
				
					                                batch_size = cl_train . shape [ 0 ] , 
 
			
		
	
		
			
				
					                                epochs = epo , 
 
			
		
	
		
			
				
					                                callbacks = [ early_stopping_callback_on_error ,  history_callback , 
 
			
		
	
		
			
				
					                                early_stopping_callback_on_improving ] , 
 
			
		
	
		
			
				
					                                callbacks = [ 
 
			
		
	
		
			
				
					                                  early_stopping_callback_on_error ,  
 
			
		
	
		
			
				
					                                  history_callback , 
 
			
		
	
		
			
				
					                                  early_stopping_callback_on_improving , 
 
			
		
	
		
			
				
					                                  VerboseEveryNEpochs ( every_n_epochs = verbose_every_n_epochs ) , 
 
			
		
	
		
			
				
					                                ] , 
 
			
		
	
		
			
				
					                                verbose = verbose ) 
 
			
		
	
		
			
				
					    ae_trainned  =  ae 
 
			
		
	
		
			
				
					    ae_pred  =  ae_trainned . predict ( cl_train ) 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -538,4 +565,4 @@ def ire_plot(title, IRE_test, IREth, ae_name):
 
			
		
	
		
			
				
					    plt . gcf ( ) . savefig ( ' out/IRE_ '  +  title  +  ae_name  +  ' .png ' ) 
 
			
		
	
		
			
				
					    plt . show ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return 
 
			
		
	
		
			
				
					    return