def cross_validate(X_train, Y_train, folds, k_list): classifier = KNearestNeighbor() classifier.train(X_train, Y_train) k_to_accuracies = classifier.cross_validate(folds, k_list) for k in k_list: accuracies = k_to_accuracies[k] plt.scatter([k] * len(accuracies), accuracies) accuracies_mean = np.array([np.mean(v) for k, v in sorted(k_to_accuracies.items())]) accuracies_std = np.array([np.std(v) for k, v in sorted(k_to_accuracies.items())]) plt.errorbar(k_list, accuracies_mean, yerr=accuracies_std) plt.title("Cross-Validation on k") plt.xlabel('k') plt.ylabel('Cross-Validation accuracy') plt.show()
def k_classifier(X_train, Y_train, X_test, Y_test, k): classifier = KNearestNeighbor() classifier.train(X_train, Y_train) Y_test_predictions = classifier.predict(X_test, k=k, distance_type='euclidean_no_loop') accuracy = classifier.eval_accuracy(Y_test, Y_test_predictions) return [accuracy, Y_test_predictions]
def compare_distances(X_train, Y_train, X_test): classifier = KNearestNeighbor() classifier.train(X_train, Y_train) classifier.eval_distances(X_test)
def compare_time(X_train, Y_train, X_test): classifier = KNearestNeighbor() classifier.train(X_train, Y_train) classifier.eval_time(X_test)
def predict_with_distances(X_train, Y_train, X_test, Y_test): classifier = KNearestNeighbor() classifier.train(X_train, Y_train) Y_test_predictions = classifier.predict(X_test, k=1, distance_type='manhattan_two_loops') classifier.eval_accuracy(Y_test, Y_test_predictions) Y_test_predictions = classifier.predict(X_test, k=1, distance_type='manhattan_one_loop') classifier.eval_accuracy(Y_test, Y_test_predictions) Y_test_predictions = classifier.predict(X_test, k=1, distance_type='manhattan_no_loop') classifier.eval_accuracy(Y_test, Y_test_predictions) Y_test_predictions = classifier.predict(X_test, k=1, distance_type='euclidean_two_loops') classifier.eval_accuracy(Y_test, Y_test_predictions) Y_test_predictions = classifier.predict(X_test, k=1, distance_type='euclidean_one_loop') classifier.eval_accuracy(Y_test, Y_test_predictions) Y_test_predictions = classifier.predict(X_test, k=1, distance_type='euclidean_no_loop') classifier.eval_accuracy(Y_test, Y_test_predictions)