k-近邻算法(详细代码注释与调参性能分析)

本文详细介绍了k-近邻算法的工作原理、优缺点、适用范围以及Python实现。通过实例展示了如何使用k-近邻算法改进约会网站配对效果和手写识别系统,分析了不同k值对性能的影响,揭示了选择合适k值的重要性。
摘要由CSDN通过智能技术生成

kNN是数据挖掘分类技术中最简单的技术之一。

工作原理:

1、监督学习训练样本集(每个数据都包含label);

2、输入新数据,将每个特征与样本集中数据对应的特征进行比较,提取特征最相似数据(最近邻)的分类标签;

3、一般只选择样本数据集中前 k 个最相似的数据。

算法优缺点:

优点:精读高、对异常值不敏感、无数据输入假定

缺点;计算复杂度高、空间复杂度高

使用数据范围:数值型和连续型

算法实现:

1、初始化训练样本集,输入待测数据;

2、计算当前点和所有训练样本集中的点的距离;

3、按照距离递增排序样本点;

4、选取与当前点距离最小的 k 个点;

5、确定这 k 个点对应label的出现频率;

6、返回频率最高的label。

代码及注释:

def classify0(inX, dataSet, labels,k):
dataSetSize = dataSet.shape[0]#训练集样本数目=训练集向量的列
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistances = sqDiffMat.sum(axis=1)
distance = sqDistances ** 0.5#计算距离(欧氏距离)
sortedDistIndicies = distance.argsort()#获取向量中距离从小到大的索引值
classCount={}#定义classCount
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1#选取距离最小的k个点
sortedClassCount = sorted(classCount.iteritems(),
key=operator.itemgetter(1),reverse=True)#对label出现频率排序

return sortedClassCount[0][0]#返回前k个点频率出现最高的lab

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值