def add_experiment(name: Text, type: Text, train_data_filename: Text, test_data_filename: Text, train_data, test_data): experiment = Experiment(name=name, type=type) db.session.add(experiment) db.session.commit() experiment_locator = Locator(experiment.id, train_data_filename=train_data_filename, test_data_filename=test_data_filename) with open( os.path.join(experiment_locator.get_train_data_dir(), train_data_filename), 'wb') as copied_train_data: for line in train_data.readlines(): copied_train_data.write(line) with open( os.path.join(experiment_locator.get_test_data_dir(), test_data_filename), 'wb') as copied_test_data: for line in test_data.readlines(): copied_test_data.write(line) experiment.train_data = train_data_filename experiment.test_data = test_data_filename db.session.commit() return experiment
def delete_single_experiment(id): try: experiment = Experiment.query.filter_by(id=id).first() if not experiment: response_object = { 'status': 'fail', 'message': f'Experiment id {id} Not Found!' } return jsonify(response_object), 404 else: db.session.delete(experiment) db.session.commit() Locator.delete_experiment_folders(id) response_object = { 'status': 'success', 'message': f'Experiment id {id} Deleted!' } return jsonify(response_object), 200 except Exception as e: response_object = { 'status': 'fail', 'message': "Internal Server Error", 'error': str(e) } return jsonify(response_object), 500
def add_experiment(): """Add experiment to database""" try: data, status_code = add_experiment_form_valid(request) if data != "form_valid": return data, status_code name = request.form['name'] type = request.form['type'] experiment = Experiment.query.filter_by(name=name).first() if experiment: response_object = { 'status': 'fail', 'message': f'Experiment with name: {name} exists, Please enter unique experiment name' } return jsonify(response_object), 409 train_data_file = request.files['train_data'] train_data_filename = secure_filename(train_data_file.filename) test_data_file = request.files['test_data'] test_data_filename = secure_filename(test_data_file.filename) experiment = Experiment(name=name, type=type) db.session.add(experiment) db.session.commit() experiment_locator = Locator(experiment.id, train_data_filename=train_data_filename, test_data_filename=test_data_filename) train_data_file.save(experiment_locator.get_train_data_file_path()) test_data_file.save(experiment_locator.get_test_data_file_path()) experiment.train_data = train_data_filename experiment.test_data = test_data_filename db.session.commit() response_object = { 'status': 'success', 'message': f'Experiment {name} added!', 'id': experiment.id } return jsonify(response_object), 201 except Exception as e: print(str(e)) response_object = { 'status': 'fail', 'message': "Internal Server Error", 'error': str(e) } return jsonify(response_object), 500
def predict(cls, experiment, sample): name = experiment.name exp_locator = Locator(experiment.id, experiment.train_data, experiment.test_data) if 'LR_' in name: lr_dataset_maker = LRPimaIndiansDatasetMaker(exp_locator) X = lr_dataset_maker.make_one_sample(sample) logistic_regression = DataLoader.load(exp_locator.get_model_file_path()) prediction = logistic_regression.predict(X) prediction = prediction.tolist() return prediction
def update_single_experiment(id): """Update Single Experiment""" try: experiment = Experiment.query.filter_by(id=id).first() if not experiment: response_object = { 'status': 'fail', 'message': f'Experiment id {id} Not Found!' } return jsonify(response_object), 404 name = request.form['name'] type = request.form['type'] result = request.form['result'] start_date = request.form['start_date'] start_date = datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S.%f') train_data_file = request.files['train_data'] train_data_filename = secure_filename(train_data_file.filename) test_data_file = request.files['test_data'] test_data_filename = secure_filename(test_data_file.filename) experiment_locator = Locator(experiment.id, train_data_filename=train_data_filename, test_data_filename=test_data_filename) train_data_file.save(experiment_locator.get_train_data_file_path()) test_data_file.save(experiment_locator.get_test_data_file_path()) experiment.name = name experiment.type = type experiment.result = result experiment.start_date = start_date experiment.train_data = train_data_filename experiment.test_data = test_data_filename db.session.commit() response_object = { 'status': 'success', 'message': f'Experiment id {id} Updated!' } return jsonify(response_object), 200 except Exception as e: response_object = { 'status': 'fail', 'message': "Internal Server Error", 'error': str(e) } return jsonify(response_object), 500
def train(cls, experiment): name = experiment.name exp_locator = Locator(experiment.id, experiment.train_data, experiment.test_data) if 'LR_' in name: lr_dataset_maker = LRPimaIndiansDatasetMaker(exp_locator) X, y = lr_dataset_maker.make_train_dataset() hyperparams = {'penalty': 'l2'} logistic_regression = Logistic_Regression(hyperparams=hyperparams) result = logistic_regression.train(X, y) DataLoader.save(file_object=logistic_regression, file_path=os.path.join(exp_locator.get_model_dir(), 'model.pkl')) experiment.result = json.dumps([result]) return experiment raise Exception("No valid Experiment Name to train Experiment")
def test(cls, experiment): name = experiment.name exp_locator = Locator(experiment.id, experiment.train_data, experiment.test_data) if 'LR_' in name: lr_dataset_maker = LRPimaIndiansDatasetMaker(exp_locator) X, y = lr_dataset_maker.make_test_dataset() logistic_regression = DataLoader.load(exp_locator.get_model_file_path()) test_result = logistic_regression.test(X, y) exp_result = json.loads(experiment.result) exp_result.append(test_result) experiment.result = json.dumps(exp_result) return experiment raise Exception("No valid Experiment Name to train Experiment")
def test_create_experiment_folders(self): """Ensure create experiment folder behaves properly""" locator = Locator(id=1, train_data_filename='pima_indians.csv', test_data_filename='pima_indians.csv') self.assertTrue(os.path.exists(locator.train_data_dir)) self.assertTrue(os.path.exists(locator.test_data_dir)) self.assertTrue(os.path.exists(locator.model_dir)) self.assertTrue(os.path.exists(locator.train_result_dir)) self.assertTrue(os.path.exists(locator.test_result_dir))
def clean_up_folders(ids): _ = [Locator.delete_experiment_folders(i) for i in ids]
def is_experiment_trained(cls, experiment): exp_locator = Locator(experiment.id, experiment.train_data, experiment.test_data) if os.path.exists(exp_locator.get_model_file_path()): return True else: return False
def test_get_test_result_dir(self): """Ensure get_train_data_dir behaves properly""" locator = Locator(id=1, train_data_filename='pima_indians.csv', test_data_filename='pima_indians.csv') self.assertIn('/experiments/1/result/test', locator.get_test_result_dir())