k近邻法

本文详细介绍了k近邻算法(kNN)的基本原理及其应用。包括算法的三个核心要素:k值选择、距离度量和分类决策规则。同时,文中还讨论了kd树这一数据结构如何提高kNN算法的效率,并提供了基于sklearn的kNN算法实现示例。

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

1.综述

k近邻法(k-nearest neighbor,kNN)是一种基本的分类与回归方法。接下来只叙述分类方法。kNN是一种多分类的方法,没有显示的学习过程,它是利用训练数据集对特征向量空间进行划分,作为分类的模型。
kNN描述:给定训练数据集,对于新输入的实例,在训练数据集中找到与该实例最近的k个实例,这k个实例的多数属于某类,就认为这个是实例是这个类的。
kNN的三个基本要素是:k值的选择、距离的度量、分类决策规则。

2.算法

输入:训练数据集T={(x1,y1),(x2,y2)...(xN,yN)}
其中,xRn为实例的特征向量,yi={c1,c2,c3,..,ck}为实例的类别,i=1,2,3...,N,实例的特征向量为x

输出:实例x所属的类别
(1)根据给定的距离度量方法,在训练集T中找出与x最近的k个点,涵盖这k个点的x的邻域记作Nk(x)
(2)在Nk(x)中根据分类决策规则(一般是多数表决)决定x的类别y

y=argmaxcjxiNk(x)I(yi=cj),i=1,2,...,N;j=1,2...,K

其中,I为指示函数,满足条件为1,不满足为0.
k=1时为最近邻算法。

3.三要素

(1)距离度量

距离是指两个实例点之间相似成度的反映。kNN模型的特征空间一般是n维实数的向量空间Rn.使用距离一般是欧式距离,或更一般的Lp距离(Minkowski距离,闵氏距离)。这里顺便提一下,Lp距离与向量的Lp范数是对应的,p表示参数,如1,2
p=1时,称为曼哈顿距离
p=2时称为欧氏距离
p=时,称为切比雪夫距离
使用不同的距离度量所确定的最近邻是不同的

(2)k的选择

k过小就会使得泛化效果很差,偏差小,方差大
k过大尽管能减小方差,但是使得偏差大
一般k取值比较小,采用交叉验证的方法确定最优的k

(3)分类决策规则

一般采用多数表决规则,其等价于经验风险最小化

4.kd树

kd树是一种存储训练数据的结构,使用这种结构可以减少计算距离的次数。注意,这里的k表示的是实例是k维的,与kNNk没有关系
kd树的构造以及利用kd树的最近邻搜索算法.

5.程序实现

利用sklearn工具包可以快速实现

# coding:utf-8

from sklearn.neighbors import KNeighborsClassifier # 导入knn分类器 
X = [[0], [1], [2], [3]]   #输入数据
y = [0, 0, 1, 1]           #输入每个数据对应的类别
neigh = KNeighborsClassifier(n_neighbors=3)   #生成对象
neigh.fit(X, y)                               #模型训练
print(neigh.predict([[1.1]]))                 #对于新数据的预测
>>>[0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值