提升KNN的运行效率

20221005 -

引言

KNN算法是一种”懒惰“算法,在模型训练过程,仅仅是将数据存储到快速查询的数据结构中,在测试阶段会通过进行距离计算来输出结果,那么当数据集比较大的时候,一方面内存要求会提升,另一方面在计算的时间也会增大。

之前的时候,也偶尔看到过相关的论文,对knn的训练集进行裁剪,或者说数据集约减这种方面的论文,本质上就是降低存储和计算复杂度,类似对OCSVM的数据集进行相关的操作一样。

不过搜索之后,感觉这部分研究还是挺少的,看到的一些经典算法都已经是上个世纪很久之前的了。这篇文章就作为最近看到的一些内容的概要记录。

训练集约减方法

文章[1]中,对三种方法进行了介绍,分别是剪辑法、多重剪辑法,以及压缩近邻法。其中介绍部分通过图片的形式进行了介绍,从图片上的形式可以看到比较明显的数据集约减效果。不过他提供的代码貌似有些问题,直接运行效果并不是很好,特别是后面的压缩近邻法。

文章[2]中,对两种方法进行了简单总结,我觉得下面这句话说的挺到位的,直观上说出了两种方法的特点。

目前有两种减少训练集样本数的方法:剪辑方法和压缩方法。前者通过删除错误分类的样本达到压缩训练集的效果,后者的目的是在不改变分类决策边界的前提下减少每一个类的样本数目。

文章[3]对KNN算法进行了具体介绍,并且提到了其中的一些提升方案,其中就包含了本文的重点内容。

实现代码

在谷歌上搜索相关的内容,发现有用的信息也比较少。最后在一个样本不均衡处理的python库[4]上找到了代码,该机器学习库主要是针对样本不均衡问题封装了一些算法,例如常用的SMOTE方法在这个部分也有。

一开始的时候并不理解为什么压缩近邻算法会被放到这个部分,看到他本质上是把该算法算为了降采样方法。

有了这个库,就可以直接来进行试验了,不用再自己来实现代码。

参考文献

[1]如何减少KNN的训练集样本并最大程度维持模型准确性:剪辑法,多重剪辑法,压缩近邻法
[2]K近邻算法:样本剪辑和压缩方法
[3]机器学习笔记—KNN算法
[4]imblearn.under_sampling.CondensedNearestNeighbor

你可能感兴趣的:(机器学习,机器学习,人工智能,python)