Source: https://www.csee.umbc.edu/courses/graduate/678/spring19/slides/09-knn-kmeans.pdf