封装一下上面的代码
from collections import Counter from math import sqrt import numpy as np class KNNClassifier(): """封装自己KNN算法""" def __init__(self, k): assert k >= 1, "k 值必须大于1" self.k = k self._X_train = None # 类似private self._y_train = None def fit(self, X_train, y_train): self._X_train = X_train self._y_train = y_train return self def predict(self, X_predict): return np.array([self._predict(x) for x in X_predict]) # _predict私有方法 def _predict(self, x_single): distances = [sqrt(np.sum((x_train - x_single) ** 2)) for x_train in self._X_train] nearst = np.argsort(distances) topK_y = [self._y_train[i] for i in nearst[:self.k]] votes = Counter(topK_y) predict_y = votes.most_common(1)[0][0] return predict_y def __repr__(self): return "KNNClassifier()"调用试试:
还是用库吧嘿嘿嘿