k近邻法

k近邻法是一种基本的分类与回归方法。k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多值。k近邻法思想:1. 根据给定的距离度量方法,找出训练数据集中与实例x最相邻的k个点;2. 在k 个点中,根据分类决策规则,决定x 的类别。
k近邻法中,当训练数据集、距离度量、k值、分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一的确定;这相当于将特征空间划分为一些子空间,确定子空间里每一个点所属的类。
在距离度量为欧式距离、分类决策规则为投票表决的情况下,K近邻法代码设计:

import numpy as np
def classify(X,traindata,trainlabel,k)
    m,n=np.shape(traindata) #m,n为行列数
    distances = np.power(np.sum((np.tile(X,(m,1))-traindata)**2,1),0.5) # 实例X与训练数据集所有点的欧式距离
    distancesort = np.argsort(distances) #返回的是下标,例如[5,2,3],排序之后是[1,2,0]
    topK = dict()
    for i in xrange(k):
        label = trainlabel[distancesort[i]]# 得到的前k个相邻的的类别
        topK[label] = topK.get(label,0)+1 # 求得前k个相邻类别的数量
    topKsort = sorted(topK.iteritems(),key=lambda x:x[1],reverse=True)
    return topKsort[0][0] #返回实例X的类别

由上述可知,K近邻法有四个关键元素:训练数据集、k值、距离度量、分类决策规则。

k值

  • 若k值较小,就相当于用较小的邻域的训练数据集进行预测。优点是学习的近似误差会减小,只有与输入实例相近的点才会对预测起作用。缺点是学习的估计误差会增大,预测结果对近邻的实例点非常敏感,如果实例点恰巧是噪声,预测就很可能出错。即,k值越小,整体模型越复杂,易过拟合。
  • 若k值较大,就相当于用较大的邻域的训练数据集进行预测。优点是学习的估计误差会减小。缺点是学习的近似误差会增大,与输入实例不相似的点也会对预测起作用。
  • 在实际中,k 值一般取一个较小的值。可以通过逐步增大k值的方法来观察最小误差率,选择合适的k值。

距离度量

  • 欧式距离,实例点与训练数据点各特征的差的平方和,再开根号;
  • 曼哈顿距离,实例点与训练数据点各特征的差的绝对值的和。
    在距离度量的计算中,需要注意每个特征的值的范围。如果相差很大,应该进行规范化。有助于防止较大初始值域的特征比较小值域特征的权值过大。规范化公式为:
    v=vminmaxmin

分类决策规则

k近邻的分类决策规则往往是多数表决,即由输入实例的k个临近的训练实例的多数类决定输入实例的类。

总结

优点缺点适用范围
精度高、对异常点不敏感、无数据输入假设计算复杂度高、空间复杂度高数值型、标称型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值