from numpy import *
import operator
from os import listdir
#2.1.2 k-近邻算法
def classify0(inX, dataSet, labels, k): #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 #求出各个训练集与输入向量的距离,并以数组形式存储在变量distance中
sortedDistIndicies = distances.argsort() #将distance中的元素从小到大排列,提取其对应的index(索引),然后输出到sortedDistIndicies中
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #对距离最小的k个点添加标签并以字典方式存储在classCount中
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)#对字典内的元祖按照降序第二个元素(标签所对应元素的频率)排列存储在数组sortedClassCount中(此时字典内的键为标签,值为对应标签的频率)
return sortedClassCount[0][0] #返回频率最高的元素标签
#2.1.1 创建数据集和标签
def c
import operator
from os import listdir
#2.1.2 k-近邻算法
def classify0(inX, dataSet, labels, k): #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 #求出各个训练集与输入向量的距离,并以数组形式存储在变量distance中
sortedDistIndicies = distances.argsort() #将distance中的元素从小到大排列,提取其对应的index(索引),然后输出到sortedDistIndicies中
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #对距离最小的k个点添加标签并以字典方式存储在classCount中
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)#对字典内的元祖按照降序第二个元素(标签所对应元素的频率)排列存储在数组sortedClassCount中(此时字典内的键为标签,值为对应标签的频率)
return sortedClassCount[0][0] #返回频率最高的元素标签
#2.1.1 创建数据集和标签
def c