Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
 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
Пример #5
0
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
Пример #6
0
    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")
Пример #7
0
    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")
Пример #8
0
    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))
Пример #9
0
def clean_up_folders(ids):
    _ = [Locator.delete_experiment_folders(i) for i in ids]
Пример #10
0
 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
Пример #11
0
 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())