机器学习实践 学习笔记2 Classifying with k-Nearest Neighbors

本文介绍了k-近邻算法的工作原理、优缺点、适用数据范围及伪代码。通过实例展示了如何在Python中实现kNN,并进行数据预处理,包括归一化处理。此外,还提到了kNN在数字识别系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k-近邻算法(k-Nearest Neighbors,kNN)

工作原理:

knn算法属于监督类型算法。首先我们有样本训练集,知道每一条数据的分类。继而,我们输入没有分类的新数据,将新数据的每个特征与样本集中的对应项进行比较,提取样本集中最相思的数据,这样我们可以获得该数据的分类。一般来说,我们只选择样本集中前k个最相似的数据,通常k不大于20.最后,选择k个相似数据中出现最多的分类,作为新数据的分类,此为k近邻算法。


优点:

精度高,对异常数值不敏感,无数据输入假定。

缺点:计算复杂度高,空间复杂度高。无法给出任何数据的基础结构信息,因此我们也无法知晓平均
实例样本和典型实例样本具有什么特征

适用数据范围:数值型,标称型(numeric values,nominal values)


伪代码:

(1)计算样本数据集中的点与当前带分类数据的点之间的距离(计算相似程度)

(2)按照距离递增排序

(3)选取与当前距离最小的前K个点

(4)确定k个点所在类别的出现频率

(5)返回出现频率最高的类别作为预测分类


python代码:

def createDataSet():#创建样本训练集
	group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
	labels = ['A','A','B','B']
	return group,labels


#intX:待分类数据(向量),dataSet,labels:样本训练集,k
def classi0(intX, dataSet, labels, k):
	dataSetSize = dataSet.shape[0]#训练集大小
	diffMat = tile(intX,(dataSetSize,1)) - dataSet#把待分类数据向量复制成与训练集等阶,对应项求差
	sqDiffMat = diffMat**2#各项平方
	sqDistances = sqDiffMat.sum(axis=1)#axis=1,将一个矩阵的每一行向量相加
	distances = sqDistances**0.5#开方,求出距离
	sortedDistIndicies = distances.argsort()#从小到大排序,返回数组的索引
	classCount = {}
	for i in range(k):#遍历前K个样本训练集
		voteILabel = labels[sort
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值