from numpy import *
import operator
#已有数据,以及对应的标签
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
'''
作用:将待分类数据集与已有数据集以其标签进行计算,从而得出待分类数据集最有可能所属的类别
参数:
inX:待分类数据集
dataSet:已有数据集,通过createDataSet()函数获取
labels:已有数据集对应的分类标签,通过createDataSet()函数获取
k:设置最小距离数
'''
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] #获取数据集的行数
#计算距离
#tile(a,(b,c)):将a的内容在行上重复b次,列上重复c次
#下面这一行代码的结果是将待分类数据集扩展到与已有数据集同样的规模,然后再与已有数据集作差
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2 #对上述差值求平方
sqDistances = sqDiffMat.sum(axis=1) #对于每一行数据求和
distances = sqDistances**0.5 #对上述结果开方
sortedDistIndicies = distances.argsort() #对开方结果建立索引
#计算距离最小的k个点的Lable
classCount={} #建立空字典,类别字典,保存各类别的数目
for i in range(k): #通过循环寻找k个近邻
voteIlabel = labels[sortedDistIndicies[i]] #先找出开方结果索引表中第i个值对应的Label值
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 # 存入当前label以及对应的类别值
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) #对类别字典进行逆排序,级别数目多的往前放
#返回结果
return sortedClassCount[0][0] #返回级别字典中的第一个值,也就是最有可能的Label值
#进行分类
print(classify0([1.0,0.8],group,labels,3))
print(classify0([0.5,0.5],group,labels,3))
文本数据挖掘与Python应用例子4.2代码(KNN分类器) p79
于 2023-12-15 17:08:50 首次发布