机器学习实战第二章kNN算法详解

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值