def plt_multiclass(logger, **args): result_dir = '../results/' logger.info(f'Results directory: {result_dir}') if not os.path.exists(result_dir): os.makedirs(result_dir) logger.debug( f'Results directory does not exist. Creating the directory') log_fname = logger.handlers[0].baseFilename.split('/')[-1] result_fname = log_fname.replace('_log_', '_results_').replace('.log', '.results') logger.debug(f'Results filepath: {result_dir}{result_fname}') result_fh = open(f'{result_dir}{result_fname}', 'w') print('---PROGRESSIVE ELM - MULTI-CLASS---') print('---PROGRESSIVE ELM - MULTI-CLASS---', file=result_fh) filename = args['filename'] header = args['header'] label_location = args['label'] scale_type = args['scale'] test_ratio = args['testratio'] print(f'Dataset file: {filename}', file=result_fh) logger.debug( f'Dataset File: {filename}, Scaling Type: {scale_type}, Test ratio: {test_ratio}' ) logger.debug( f'Header attribute in pandas read_csv: {header}, label location in csv: {label_location}' ) # Hyper-parameters hidden_dim = args['neurons'] N0 = args['initial'] batch_size = args['batch'] logger.debug( f'Hidden layer neurons: {hidden_dim}, Number of samples in initial block: {N0}, ' f'Batch size for training: {batch_size}') # Load and Pre-process Data logger.info('Loading and preprocessing data...') data = Data() data.set_logger(logger) print(f'Loading data from file: {filename}') data.load_csv(fname=filename, header=header) data.get_feats_labels(label_column=label_location) data.scale_features(scale_type=scale_type) data.split_train_test(test_ratio=test_ratio) logger.info('Loading and preprocessing data done') # PLT-ELM Model logger.info('Creating PLT ELM model') try: plt = PLT(data.num_feats, hidden_dim) except: logger.error('---> !!! Error in creating PLT class object !!!') raise ValueError plt.set_logger(logger) data.set_initial_batch_size(N0) data.set_training_batch_size(batch_size) print('Begin Training...') logger.info('Begin Training...') for batch_id, X, y in data.fetch_train_data(): if batch_id == 0: plt.initial_batch(X, y) continue plt.train(X, y) print('Training Complete') logger.info('Training Complete') print('Begin Testing...') logger.info('Begin Testing...') report, accuracy = plt.test(data.test_data['X'], data.test_data['y']) print('Testing Complete') logger.info('Testing Complete') print(f'Classification Report: \n{report}\nAccuracy: {accuracy}') print(f'Classification Report: \n{report}\nAccuracy: {accuracy}', file=result_fh) logger.info(f'\nClassification Report: \n{report}') logger.info(f'\nAccuracy: {accuracy}') pass
def plt_multiclass(logger, **args): """ Receives arguments from main.py and executes progressive multi-class ELM :param logger: Logger object that handles logging status :param args: command line arguments from main.py :return: None (Generates results file) """ # CONFIGURE RESULTS FILE, DIRECTORY result_dir = '../results/' # Results directory logger.info(f'Results directory: {result_dir}') if not os.path.exists(result_dir): os.makedirs(result_dir) # Create directory if doesn't exist logger.debug( f'Results directory does not exist. Creating the directory') log_fname = logger.handlers[0].baseFilename.split('/')[-1] result_fname = log_fname.replace('_log_', '_results_').replace( '.log', '.results') # Result filename logger.debug(f'Results filepath: {result_dir}{result_fname}') result_fh = open(f'{result_dir}{result_fname}', 'w') # BEGIN EXECUTION print('---PROGRESSIVE ELM - MULTI-CLASS---') print('---PROGRESSIVE ELM - MULTI-CLASS---', file=result_fh) # Read Arguments filename = args['filename'] header = args['header'] label_location = args['label'] scale_type = args['scale'] test_ratio = args['testratio'] print(f'Dataset file: {filename}', file=result_fh) logger.debug( f'Dataset File: {filename}, Scaling Type: {scale_type}, Test ratio: {test_ratio}' ) logger.debug( f'Header attribute in pandas read_csv: {header}, label location in csv: {label_location}' ) # Hyper-parameters of the model hidden_dim = args['neurons'] N0 = args['initial'] batch_size = args['batch'] logger.debug( f'Hidden layer neurons: {hidden_dim}, Number of samples in initial block: {N0}, ' f'Batch size for training: {batch_size}') # Load and Pre-process Data logger.info('Loading and preprocessing data...') data = Data() # Create an object of class Data to handle data operations data.set_logger(logger) # Set logger for Data object print(f'Loading data from file: {filename}...') data.load_csv(fname=filename, header=header) # Load dataset to data object data.get_feats_labels( label_column=label_location) # Extract features and labels data.scale_features(scale_type=scale_type) # Scale features data.split_train_test(test_ratio=test_ratio) # Split to train, test logger.info('Loading and preprocessing data done') # PLT-ELM Model print('Creating PLT ELM model...') logger.info('Creating PLT ELM model') try: plt = PLT(data.num_feats, hidden_dim) # Create an object of class PLT except: logger.error('---> !!! Error in creating PLT class object !!!') raise ValueError plt.set_logger(logger) # Set logger for plt object data.set_initial_batch_size(N0) # Set initial batch size data.set_training_batch_size(batch_size) # Set training batch size # Training print('Begin Training...') logger.info('Begin Training...') for batch_id, X, y in data.fetch_train_data(): # Fetch data sequentially if batch_id == 0: plt.initial_batch(X, y) continue plt.train(X, y) # Train model print('Training Complete') logger.info('Training Complete') # Testing print('Begin Testing...') logger.info('Begin Testing...') report, accuracy = plt.test(data.test_data['X'], data.test_data['y']) # Test model print('Testing Complete') logger.info('Testing Complete') # Evaluation Metrics print(f'Classification Report: \n{report}\nAccuracy: {accuracy}') print(f'Classification Report: \n{report}\nAccuracy: {accuracy}', file=result_fh) logger.info(f'\nClassification Report: \n{report}') logger.info(f'\nAccuracy: {accuracy}') # Close results file handler result_fh.close() pass