k近邻法

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维的,与 kNN k 没有关系
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]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值