文本数据挖掘与Python应用例子4.2代码(KNN分类器) p79

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))

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值