python编程之k-近邻算法

83 阅读1分钟
原理是根据未知分类的点到已知分类点的集合的距离最近,近朱者赤近墨者原理
import numpy as np##最近邻代码class NearestNeighbor:    def __init__(who):        pass ##不知道写一些啥,但是为了避免语法错误,就用pass代替    def traim(self,X,y):        self.Xtr=X##点集合        self.ytr=y###分类标签    def predict(self,X):        num_test=X.shape[0]  ##获取的是多少个数据        Ypred=np.zeros(num_test,dtype = self.ytr.dtype)        print("Ypred:",Ypred)        for i in range(num_test):            ###求行相减然后求和            distances=np.sum(np.abs(self.Xtr - X[i,:]),axis=1)  ##X[i,:等同于X[i]            print("distances:",distances)            ###求里面的最小值的下标            min_index=np.argmin(distances)            print("min_index:",min_index)            Ypred[i] = self.ytr[min_index]##[0,0]        return Ypredclass tjn:    nbor=NearestNeighbor();    X=[[-1,2],[1,3],[2,4],[3,6],[2,7],[3,8],[4,9],[4,10]]  ##X是已知的分类集合    labels = ['A','B','B','B','A','B','B','A']##labels是X里面点集合对应的标签    nbor.traim(np.array(X),np.array(labels))    Z = [[0, 2], [0, 3], [1, 3], [6, 3]]##现在有一批未知分类的集合    mm=nbor.predict(np.array(Z))##打印出未知分类集合的大概所属类型    print(mm)