【ML算法】监督学习——KNN算法

本文介绍了KNN算法的基本原理,包括算法输入输出、K值选择、距离测度和分类决策规则等内容,并探讨了不同参数设置对算法性能的影响。

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

前言

好久没有更新博客啦,罪过罪过,最近生病了,一直在休养,希望广大程序员朋友们一定要注意身体,少熬夜呀~今天又重新温习了一边KNN算法,整理出这篇文章。

算法介绍

KNN(k-nearest neighbor,k近邻)是一种基本的分类与回归算法,是监督学习算法,这个算法并不具有显示的学习过程,其输入为特征向量,输出为实例类别,输出的类别可以为多类,最终通过多数表决的方式进行预测。k值的选择、距离测度和分类决策规则是KNN的三个基本要素。
输入:训练数据集为T

T={(x1,y1),(x2,y2),,(xN,yN)}T={(x1,y1),(x2,y2),⋯,(xN,yN)}

其中, xiχRnxi∈χ⊆Rn 为特征向量,yiY={c1,c2,,cK}yi∈Y={c1,c2,⋯,cK} 为实例类别,i=1,2,3,,Ni=1,2,3,⋯,N
输出:实例x所属类y。
(1)根据距离测度,在训练集T中找到与x最接近的k个点,涵盖这k个点的x的领域记作 Nk(x)Nk(x) ;
(2)在 Nk(x)Nk(x) 中根据分类决策规则决定x的类别y:
y=argmaxxiNK(x)I(yi=cj),i=1,2,,N;j=1,2,,Ky=argmax∑xi∈N−K(x)I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,K

其中,I为指示函数,当 yi=cjyi=cj 时I为1,否则为0。

K值的选择

k值的选择会对算法结果产生重大影响。如果选择较小的k值,就意味着仅会选择很小的邻域点进行训练,换句话说,只有与输入较近的训练样本点才会对算法输出有影响,因此这种情况下学习的近似误差会很小,但是模型估计误差会很大,因为模型对距离较近的邻域的点很敏感,如果这些点中存在噪声,那么模型准确率会迅速下降,也就是说,小的k值就意味着较为复杂的模型,输出结果过于依赖邻域中的几个点,这样就容易发生过拟合。
如果选择的k值较大,就意味着需要很大的邻域点进行训练,模型对于大多数点都具有依赖性,这种情况下,模型的估计误差会减小,但是近似误差会增大,因为训练的邻域中可能会有很多样本点的类别与输入不同,也就是说,大的k值就意味着较为简单的模型,输出结果会受到很多样本点的影响(其中可能有很大一部分样本点与输入并不属于同一类别),这样就容易发生欠拟合。
特殊情况,如果令k=N,模型未考虑数据的多样性,输出结果永远都是模型中类别频数最大的项。
在实际应用中,通常会选取较小的k值,然后通过交叉验证来减轻过拟合。

距离测度

距离测度在KNN、聚类中经常会遇到,常见的有欧式距离、马氏距离、明氏距离、汉明距离、曼哈顿距离等,本文中介绍其中几种。
空间中两个实例点的距离是两个点相似程度的反应。KNN中的特征空间一般为n维实数向量空间 RnRn ,最常使用的是欧式距离,也可以使用 LpLp 距离。
设特征空间 χχ 是n维实数向量空间 RnRn , xi,xjχ,xi=(x1i,x2i,,xni)T,xj=(x1j,x2j,,xnj)T,xi,xjLpxi,xj∈χ,xi=(xi1,xi2,⋯,xin)T,xj=(xj1,xj2,⋯,xjn)T,xi,xj的Lp 距离定义为:

Lp(xi,xj)=(l=1n|xlixlj|P)1p,p1Lp(xi,xj)=(∑l=1n|xil−xjl|P)1p,p≥1

当p=1时,称为曼哈顿距离:
L1(xi,xj)=l=1n|xlixlj|L1(xi,xj)=∑l=1n|xil−xjl|

当p=2时,称为欧式距离:
Lp(xi,xj)=(l=1n|xlixlj|2)12Lp(xi,xj)=(∑l=1n|xil−xjl|2)12

p=p=∞ 时,它是各个坐标距离的最大值:
L1(xi,xj)=maxl|xlixlj|L1(xi,xj)=maxl|xil−xjl|

分类决策规则

KNN算法多采取多数表决原则,即哪个类别投票的频数多,样本点就属于哪个类别,假设分类的损失函数为0-1损失函数,分类函数为:

f:Rn{c1,c2,,cK}f:Rn→{c1,c2,⋯,cK}

那么,误差概率为:
P(Yf(X))=1P(Y=f(X))P(Y≠f(X))=1−P(Y=f(X))

于是,对于k个点,误分类率为:
1kxiNK(x)I(yicj)=11kxiNK(x)I(yi=cj)1k∑xi∈NK(x)I(yi≠cj)=1−1k∑xi∈NK(x)I(yi=cj)

要使误分率最小经验风险最小,就要使 xiNK(x)I(yi=cj)∑xi∈NK(x)I(yi=cj) 最大,所以多数表决规则等价于经验风险最小化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值