一:首先定义一个类,定义构造函数,对训练集进行赋值,fit和predict过程。
#自己手写KNN算法进行封装 import numpy as np from math import sqrt from collections import Counter class KNN_classifier: #构造函数,指定key def __init__(self,k): self.k = k self._X_train = None self._Y_train = None #赋值 def fit(self,x_train,y_train): self._X_train = x_train self._Y_train = y_train return self #predict def predict(self,x): assert self._X_train is not None assert self._Y_train is not None assert self._X_train.shape[0]==self._Y_train.shape[0] ,'列数不一样' assert self._X_train.shape[1]==x.shape[0] arr = [i for i in x] pre = np.array(arr) prediction = self._prediction(pre) return prediction def _prediction(self,x): distice = [sqrt(np.sum(i-x)**2) for i in self._X_train] nearest = np.argsort(distice) topK = [self._Y_train[i] for i in nearest[:self.k]] final = Counter(topK) pre = final.most_common(1)[0][0] return pre #测试 if __name__=='__main__': raw_data_X = [[1.232422,1.22324], [2.324232,1.3224], [2.3435353,2.3232342], [3.434353,3.434353], [4.54546,3.54544], [7.42422,6.764353], [6.42224534,7.533232], [8.435353,8.5433], [9.423534,9.422224], [8.544444,9.4564454]] raw_data_y=[0,0,0,0,0,1,1,1,1,1] x_train = np.array(raw_data_X) y_train = np.array(raw_data_y) x = np.array([7.5353343,8.53324232]) knf = KNN_classifier(5) knf.fit(x_train,y_train) print(knf.predict(x))