1.1 kNN简介

kNN-最容易理解和实现的算法

k最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。k最近邻,就是k个最近邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。

kNN算法的核心思想:如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。

该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。




knn的k与遗传算法_数据集


Q: 使用kNN算法时,K值一般会选择奇数?

A:因为选择偶数时,有可能出现平手的情况,这时就没法或者随机返回一个分类,具有不确定性。一般避免这种情况,采用k奇数.

kNN算法

(a)计算测试数据与各个训练数据之间的距离(一般采用欧式距离)

(b)按照距离的递增关系进行排序;

(c)选取距离最小的K个点;

(d)确定前K个点所在类别的出现频率;

(e)返回前K个点中出现频率最高的类别作为测试数据的预测分类


knn的k与遗传算法_k近邻算法_02


1.2 k 值的选择(调参)

参数: 模型参数、超参数

kNN中的参数k为超参数

决策边界

根据决策边界划分为不同的类,同一侧的所有点为同一个分类。决策边界的好坏,影响模型预测的准确程度。决策边界的精细程度,会导致数据欠拟合(不精细)或过拟合(太精细)。kNN 算法中的决策边界,就是确定k的值,确定k的最优解。

如何确定k的最优解呢?

交叉验证

可以采用交叉验证的方式来确定k的最优解。

当获取到数据之后,把数据拆分为训练数据和测试数据,训练数据用于训练模型,测试数据用于测试模型的准确率。


knn的k与遗传算法_测试数据_03


一般选择5折(10折)交叉验证,那么就分别把最原始的训练集分成5种情况


knn的k与遗传算法_测试数据_04


注意:测试数据不可用于训练!

分别取 k=2n+1,n=0,1,2... ,应用于5折交叉验证,然后获取验证数据中准确率最高的 k 值,即为k最优解。

KNN需要注意的地方 - 特征缩放

特征缩放是用来标准化数据特征的范围。分为 线性归一化、标准差标准化。

在K近邻算法中,分类器主要是计算两点之间的欧几里得距离,如果一个特征比其它的特征有更大的范围值,那么距离将会被这个特征值所主导。因此每个特征应该被归一化,比如将取值范围处理为0到1之间。

线性归一化:


knn的k与遗传算法_knn的k与遗传算法_05


标准差标准化


knn的k与遗传算法_测试数据_06


全文总结 -- KNN的几个特点:

  • kNN属于惰性学习(lazy learning)

这是与急切学习(eager learning)相对应的,因为kNN没有显式的学习过程!也就是说没有训练阶段,从样例中就可以看出,数据集事先已有了分类和特征值,待收到新样本后直接进行处理。

  • kNN的计算复杂度较高

新样本需要与数据集中每个数据进行距离计算,计算复杂度和数据集中的数据数目n成正比,也就是说,kNN的时间复杂度为O(n),因此kNN一般适用于样本数较少的数据集。

  • k取不同值时,分类结果可能会有显著不同。

从offer样例中就可以看出,k值得不同,会导致模型预测结果的不同