参考博客
博客用的是python2.7,我安装的是python3.6,因此语法上稍有不同,但整体上还是差不多的。
from numpy import*
import operator
def createDataSet():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels
# inVec为待分类向量,dataSet和labels为数据集,k是最近点的个数
def classfy0(inX, dataSet, labels,k):
dataSetSize = dataSet.shape[0] # 获得数据集样本数量
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2 # 求差的平方
sqDistances = sqDiffMat.sum(axis=1) # 求差的平方的和
distances = sqDistances**0.5 # 对平方和开方得到距离
# 对距离进行排序,argsort()函数默认按升序排列,但只返回下标,不对原数组排序
sortedDistIndicies = distances.argsort()
classCount={} # 用于保存各个类别出现的次数
for i in range(k): # 统计最近的 k 个点的类别出现的次数
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0)+1
# 对类别出现的次数进行排序,sorted()函数默认升序
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] # 返回类别出现次数最多的分类名称
在用reload()引入一个文件时报如题的错误:NameError: name 'reload' is not defined
解决方案:
from imp import reload
import KNN (文件名,注意这里不需要跟后缀名)
reload(KNN)











网友评论