from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score from scipy.spatial import distance def euc(a,b): return distance.euclidean(a, b) class ScrappyKNN(): def fit(self, features_train, labels_train): self.features_train = features_train self.labels_train = labels_train def predict(self, features_test): predictions = [] for item in features_test: label = self.closest(item) predictions.append(label) return predictions def closest(self, item): best_dist = euc(item, self.features_train[0]) best_index = 0 for i in range(1,len(self.features_train)): dist = euc(item, self.features_train[i]) if dist < best_dist: best_dist = dist best_index = i return self.labels_train[best_index] iris = datasets.load_iris() print(iris) features = iris.data labels = iris.target print(features) print(labels) features_train, features_test, labels_train, labels_test = train_test_split(features, labels, test_size=.5) #print(len(features)) #print(len(features_train)) my_classifier = ScrappyKNN() #my_classifier = KNeighborsClassifier() my_classifier.fit(features_train, labels_train) prediction = my_classifier.predict(features_test) print(prediction) print(accuracy_score(labels_test, prediction)) iris1 = [[7.1, 2.9, 5.3, 2.4]] #virginica iris_prediction = my_classifier.predict(iris1) if iris_prediction == 0: print("Setosa") if iris_prediction == 1: print("Versicolor") if iris_prediction == 2: print("Virginica")