目录
前言
kNN是一种基本的分类和回归方法,本文探讨的是KNN的分类方法。kNN可以理解为给定训练样本,对于新的测试数据,在训练样本中找到与测试数据最临近的k个训练样本,根据最近的k个训练样本的类别,通过多数投票的方式进行预测。
假设如下图,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。
如上图:
- 如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
- 如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
1、kNN算法总结
输入:
- 训练数据集,其中
- 测试数据x
输出:
- 根据给定的距离度量,在训练集T中找到与x距离最近的k个样本,涵盖这k个点的x的邻域记作
- 在N_k(x)中根据分类规则(如多数表决)确定x的类别y,
2、三要素
从kNN的算法描述中可以发现,在KNN算法中有三个要素很重要,分别是距离度量,k的大小和分类规则。
2.1. 距离度量:描述最邻近
距离度量有很多种方式,要根据具体情况选择合适的距离度量方式。常用的是闵可夫斯基距离:
- 当p=2时,是欧氏距离
- 当p=1时,是曼哈顿距离
2.2. k的大小
如果k值较小,就相当于用较小邻域中的训练实例进行预测,极端情况下k=1,测试实例只和最接近的一个样本有关,训练误差很小(0),但是如果这个样本恰好是噪声,预测就会出错,测试误差很大。也就是当k值较小的,会产生过拟合的现象。
如果k值较大,就相当于用很大邻域中的训练实例进行预测,极端情况是k=n,测试实例的结果是训练数据集中实例最多的类,这样会产生欠拟合。
在应用中,一般选择较小k并且k是奇数。通常采用交叉验证的方法来选取合适的k值。(选取k值很重要的关键是实验调参,通过调整超参数来得到一个较好的结果)
2.3. 分类规则
kNN中的分类决策规则通常是多数表决,即由测试样本的k个临近样本的多数类决定测试样本的类别。
3 场外:kNN最重要的特征工程——特征归一化
举例:对人的性别进行分类,特征分别为身高(单位cm)和鞋码(尺码)。假设数据集如表:
序号 | 身高 | 鞋码 | 性别 |
1 | 179 | 42 | 男 |
2 | 278 | 43 | 男 |
3 | 165 | 36 | 女 |
4 | 177 | 42 | 男 |
5 | 160 | 35 | 女 |
看出问题了吗?
身高特征的数值是脚码特征的4倍左右,那么在进行距离度量的时候,算法就会偏向于身高特征,对于距离的计算结果受身高特征的影响较大,这样造成俩个特征并不是等价重要的,最终可能会导致距离计算错误,从而导致预测错误。
这就是特征量纲(简单理解为取值范围或者衡量单位)的问题,因为特征量纲的不同导致了身高的重要性已经远远大于脚码了,这是不客观的。
一般来说,在进行KNN分类使用的样本特征时,都会对特征进行归一化处理,减少由于特征本身属性和取值问题带入的先验的影响,导致特征权重的偏移。