import random
from scipy.spatial import distance

def euc(a,b):
    return distance.euclidean(a,b)



class ScrapyKNN:

    def fit(self,x_train,y_train):
        self.x_train=x_train
        self.y_train=y_train
        return self

    def predict(self,x_test):
        predictions=[]
        for row in x_test:
            label=self.closest(row)
            predictions.append(label)
        return predictions

    def closest(self,row):
        best_dist=euc(row,self.x_train[0])
        best_index=0
        for i in range(1,len(x_train)):
            dist=euc(row,x_train[i])
            if dist< best_dist:
                best_dist=dist
                best_index=i
        return self.y_train[best_index]




from sklearn.datasets import  load_iris
from sklearn import tree



iris=load_iris()

x=iris.data
y=iris.target

from sklearn.cross_validation import  train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=.5)

my_clasifier= ScrapyKNN()
my_clasifier=my_clasifier.fit(x_train,y_train)
predictions= my_clasifier.predict(x_test)

#print(predictions)

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test,predictions))


