最近邻

思路:
通过计算每个训练样例待分类的测试样例的距离,获得与待分类的测试样例距离最近的k个训练样例,通过类似于投票的形式:k个训练样例中属于哪个类别的占多数,则待分类的测试样例就属于哪一个类别。

步骤:
step1:初始化变量
step2:计算某待分类样本与每个训练样本的距离
step3:选择k个最邻近的训练样本
step4:重复上述步骤,直至找到测试样本集中每一个待分类样本的k个近邻
step5:统计没一个k近邻每个标号出现的次数
step6:将每一个k近邻下频数最大的标号作为该分类样本的标号

关键词
距离、k、分类决策规则

优点
易于实现
适合样本量较大、多个分类标签问题
适用与类域交叉或者重叠较多的情况,因为近邻只是由距离决定

缺点
懒惰算法,对距离的计算量特别大 —-改进:浓缩技术与编辑技术
可解释性哺乳决策树
不适用于样本量较小的时候

k的设定多大
k太小,容易受到噪声数据影响;k太大可能在近邻中包含其它类别的点(可对距离加权)
通过交叉检验确定
经验上:k低于训练样本数的开方

分类的机制
投票法没有考虑近邻的距离的远近,距离更近可能更应该决定最终的分类,给距离加权

距离度量
高维下:欧氏距离的区分能力变差
变量值域的影响:变量值域越大,会在距离计算中占主导作用,应先标准化

训练样本是否一视同仁
如某些样本是更值得信赖的,可给不同的训练样本增加不同的权重
这里写图片描述

———————————————————————————————————————
最近邻NearestNeighbors
sklearn.neighbors.NearestNeighbors(n_neighbors=5, radius=1.0, algorithm=’auto’,
                                                               leaf_size=30, metric=’minkowski’,
                                                               p=2, metric_params=None, n_jobs=1, **kwargs)
如果两个近邻具有相同的距离、不同的标签,结果将取决于训练数据的顺序。

参数分析
%n_neighbors=5设置近邻数
可由kneighbors返回k个最近邻距离与对应训练样本中的下标
kneighbors(X=None, n_neighbors=None, return_distance=True)
例:
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]                   #读入数据
from sklearn.neighbors import NearestNeighbors          #读入库
neigh = NearestNeighbors(n_neighbors=1)                   #设置最近邻的参数
neigh.fit(samples)                                                           #建立最近邻的模型
print(neigh.kneighbors([[1., 1., 1.]]))                               #找到离[1,1,1]的最近邻的距离及位置
(array([[0.5]]), array([[2]], dtype=int64))                         #最近邻[1,1,0.5]离 [1,1,1]的距离为0.5,

%radius&

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值