#kNN in python with scikit-learn

from sklearn import neighbors, datasets
from sklearn.model_selection import train_test_split
import numpy as np
mnist = datasets.load_digits()
# take the MNIST data and construct the training and testing split, using 75% of the
# data for training and 25% for testing
(trainData, testData, trainLabels, testLabels) = train_test_split(np.array(mnist.data),
mnist.target, test_size=0.25, random_state=42)
# now, let's take 10% of the training data and use that for validation
(trainData, valData, trainLabels, valLabels) = train_test_split(trainData, trainLabels,
test_size=0.1, random_state=84)
# show the sizes of each data split
print("training data points: {}".format(len(trainLabels)))
print("validation data points: {}".format(len(valLabels)))
print("testing data points: {}".format(len(testLabels)))

#initialize parameters
model = neighbors.KNeighborsClassifier(n_neighbors=3)
#train
model.fit(trainData, trainLabels)
#test
y_pred2=model.predict(testData)

#Now evaluate
from sklearn import metrics
print(metrics.confusion_matrix(testLabels, y_pred2))

# Print the precision and recall, among other metrics
print(metrics.classification_report(testLabels, y_pred2, digits=3))
