'''
模仿knn算法自己封装一个包(这是一个独立的KNN.py文件)
'''
import numpy as np
from math import sqrt
from collections import Counter
class knnclassifier:
def __init__(self,k):
self.k = k
x_train = None
y_train = None
def fit(self,x_train,y_train):
self.x_train = x_train
self.y_train = y_train
def predict(self,x_predict):
y_predict = [self._predict(x) for x in x_predict]
return np.array(y_predict)
def _predict(self,x):
distances = [sqrt(np.sum(x_train -x)**2)
for x_train in self.x_train ]
nearest = np.argsort(distances)
topk_y = [self.y_train[i] for i in nearest[:self.k]]
votes = Counter(topk_y)
return votes.most_common(1)[0][0]
def __repr__(self):
return f'KNN(k={self.k})'
05-14
656