机器学习实战-KNN分类
代码:
KNN-test文件
from numpy import * import operator import test
#导入数据 def createDataset(): group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#数据集 lables=['A','A','B','B']#标签 return group,lables
#调用数据,使用KNN算法进行分类 def func(): group,lables=createDataset()#从createDataset函数获取数据集和标签 tmp=test.classify0([0, 0], group, lables, 3)#调用test文件的classify0()函数,进行分类 print(tmp) func()
test文件
from numpy import * import operator
#KNN算法的实现 def classify0(intx,dataset,labels,k): dataSetSize=dataset.shape[0] #ndarray.shape 数组的维度,对于矩阵,n行m列 diffMat=tile(intx,(dataSetSize,1))-dataset #tile(A,(a,b))对于矩阵A在行方向上重复a次,列方向上重复b次 sqDiffMat=diffMat**2 #对每一个维度进行平方 sqDistances=sqDiffMat.sum(axis=1) #np.sum(a, axis=0)的含义是a[0][j],a[1][j],a[2][j](j=0,1,2,3)对应行项相加的结果 distances=sqDistances**0.5 #np.sum(a, axis=1)的含义是a[i][0],a[i][1],a[i][2],a[i][3](i=0,1,2)对应列项相加的结果 print(distances) sortedDistIndicies=distances.argsort() #numpy.argsort() 函数返回的是数组值从小到大的索引值,索引值从0开始 classCount = {} #print(type(classCount)) for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 排序 #如果items()替换为iteritems()则会报错 sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]
浙公网安备 33010602011771号