def main(): num_classes = 3 X, y = get_master_data() train_X, train_y, val_X, val_y, test_X, test_y = split_data(X, y) # hyperparams learning_rates = [1] reg_strengths = [0] num_iters = 5000 best_model = None best_accuracy = -1 results = {} for lr in learning_rates: for rs in reg_strengths: this_model = LinearClassifier(X.shape[1], num_classes) this_model.train(train_X, train_y, lr, rs, num_iters) y_pred = this_model.predict(val_X) val_accuracy = np.mean(y_pred == val_y) y_pred = this_model.predict(train_X) train_accuracy = np.mean(y_pred == train_y) print('This val accuracy: ' + str(val_accuracy)) if (val_accuracy > best_accuracy): best_model = this_model best_accuracy = val_accuracy results[(lr, rs)] = train_accuracy, val_accuracy this_model.print_model() for lr, rs in sorted(results): train_accuracy, val_accuracy = results[(lr, rs)] print('lr %e reg %e train_accuracy %f val_accuracy %f' % (lr, rs, train_accuracy, val_accuracy)) print(test_X[0]) y_pred_test = best_model.predict(test_X) test_accuracy = np.mean(y_pred_test == test_y) print('This test accuracy: ' + str(test_accuracy)) best_model.toFile('rowan_rest_grip_flex_linear_classifier_3_' + str(int(test_accuracy * 100)) + 'p.csv')