手动实现最邻近算法 KNN算法(分类 回归)

    技术2025-03-22  22

    #数据 # 特征 raw_data_x= [[3.393533211,2.331273381], [2.110073483,1.781539638], [1.343808831,3.368360954], [3.582294042,4.679179110], [2.280362439,2.866990263], [7.423436942,4.696522875], [5.745051997,3.533989803], [9.172168622,2.511101045], [7.792783481,3.424088941], [7.939820817,0.791637231] ] # 所属类别 raw_data_y = [0,0,0,0,0,1,1,1,1,1] np.array(raw_data_x)#将数据转化成numpy类型 X_train=np.array(raw_data_x) y_train=np.array(raw_data_y) plt.scatter(X_train[y_train==0, 0],X_train[y_train==0, 1], color ='r') plt.scatter(X_train[y_train==1, 0],X_train[y_train==1, 1], color ='g') plt.show() from math import sqrt

    封装一下上面的代码

    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()"

    调用试试: 

     

    还是用库吧嘿嘿嘿

    Processed: 0.009, SQL: 9