1,基本概念
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。KNN 算法本身简单有效,它是一种 lazy-learning 算法,分类器不需要使用训练集进行训练,训练时间复杂度为0,KNN 分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为 n,那么 KNN 的分类时间复杂度为O(n)
由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
2,算法思想
下图图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。
3,算法流程
(1)计算已知类别数据集中的点与当前点的距离
(2)按照距离依次排序
(3)选取与当前点距离最小的K个点
(4)确定前K个点所在类别的出现概率
(5)返回前K个点出现频率最高的类别作为当前点预测分类。
4,,算法的基本要素
K 值的选择,距离度量和分类决策规则是该算法的三个基本要素;
存在的问题:
该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数。
解决办法:对不同的样本给予不同权重项
5,图像分类
CIFAR-10数据集:10类标签;50000个训练数据;10000个测试数据;大小均为32*32
预处理你的数据:对你数据中的特征进行归一化(normalize),让其具有零平均值(zero mean)和单位方差(unit variance)如果数据是高维数据,考虑使用降维方法,比如PCA。
将数据随机分入训练集和验证集。按照一般规律,70%-90% 数据作为训练集
超参数(距离设定和K的选择):
可以利用交叉验证调节这些超参数:
将原始训练集分为训练集和验证集,我们在验证集上尝试不同的超参数,最后保留表现最好那个,使用交叉验证方法,它能帮助我们在选取最优超参数的时候减少噪音。交叉验证的结果展示:
一旦找到最优的超参数,就让算法以该参数在测试集跑且只跑一次,并根据测试结果评价算法