一种基于参考点的快速精确近邻分类算法的制作方法

文档序号:12468826阅读:480来源:国知局

本发明属于计算机技术领域,涉及一种基于参考点的快速精确近邻分类算法。



背景技术:

k近邻分类算法(k Nearest Neighbors’Algorithm,kNN)是机器学习领域最为经典和常用的分类算法之一。当前,该算法已经广泛应用于特征选择,模式识别,聚类,噪音检测分类等诸多领域。最基本的全搜索k近邻算法(Full Searching algorithm,FSA)算法是通过计算待分类点到各已知类别点的欧式距离以确定k个最近邻点,因此其时间复杂度较高(O(n2)),算法效率很低。另外,现有的k近邻算法在不平衡数据集中的分类精度无法保证。现有的改进的近邻算法主要在于提高k近邻算法的效率,这些算法大体可以分为两类:第一类,创建搜索树以降低时间复杂度。比如,Kim和Park使用有序分拆方法来创建一个多分支搜索树以提高搜索效率;Wang和Gan将投射聚类和主轴搜索树算法相结合以减少运算时间。Chen等使用赢家更新搜索方法和下界树来改善算法效率。以上改进算法的不足之处在于,随着数据维数增加,其时间复杂度急剧变坏,且失去稳定性,所以算法的时间复杂度在(O(nlogn)~O(n2))。第二类,近似k最近邻算法。该类算法通过搜索近似的k最近邻样本代替精确的最近邻样本,来避免所有样本之间距离的直接计算,以提高搜索效率。譬如,Ra和Kim通过计算待分类点到各已知类别点的平均值的差异来除去不可能数据点;Lai使用三角不等式和投影值以降低计算复杂度;Xia在研究数据维度对最近邻搜索算法影响后提出了LDMDBA算法;还有一些算法通过聚类来提高算法效率。这些算法虽然在效率上得到了提升,但是都在不同程度上牺牲了算法的精度,要低于精确最近邻算法(即FSA或是其他基于树索引结构的算法)。总结来说,两类算法无法在保证算法精度的情况下,将算法在包括高维数据集上的各种数据上的时间复杂度降低到O(nlogn)。另外,这些改进算法都无法解决k近邻算法在不平衡数据集上精度下降的问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种新的分类算法,即一种基于参考点的快速精确近邻分类算法(RPkN)。该近邻搜索算法与现有k近邻算法不同的是,其不再搜索最近邻样本用来分类,而是对分类问题更有效的样本。该特性使RPkN能突破现有的最近邻分类算法在处理不平衡数据低精度的局限性,使得RPkN具有更好的分类预测精度。另外,相比现有基于树的精确最近邻算法,RPkN算法不依赖任何树索引结构,所以能够更高效地处理高维数据,该算法的时间复杂度在任何数据集中可以保证在O(nlogn)。另外,RPkN仍然保留了现有最近邻查询算法的优势:在线、多分类、不依赖训练等。

为达到上述目的,本发明提供如下技术方案:

一种基于参考点的快速精确近邻分类算法,该算法用参考点的距离来替代样本点之间的距离的进行直接计算,找到了比最近邻样本更加适合分类的样本点,以提高算法的分类精度,算法给定数据集D∈Rd,k是近邻算法中要搜索的近邻数,A是D中的一个样本点,ε为关系近邻搜索算法时间复杂度的常量;表示候选参考点设置为单位向量及其反向量,定义变量ExistingNeighbors=NULL,j=1,具体步骤包括:

1)设置子序列的长度为2j*k*ε,并选择第i个候选参考点为当前的参考点;

2)计算所有样本点的参考点因子值,即RPF值,并对所有样本点按照其RPF值进行排序并生成一个有序序列;

3)在由ExistingNeighbors和以A为中心且长度为2j*k*ε的子序列构成的集合中,找到与到A最近的k的样本点;

4)计算所有样本点的近邻样本及整个数据集的分类精度;

5)i=i+1,将第i个候选参考点设置为下一个参考点;并计算加入新参考点后的分类精度;

6)如果所有候选参考点被加入且精度增加,用所有样本的k近邻样本替代ExistingNeighbors,转向步骤7);如果还有候选参考点未被加入且精度增加,用所有样本的k近邻样本替代ExistingNeighbors,转向步骤5);

7)如果子序列长度增加后算法的分类精度降低,算法终止;否则,转向步骤8);

8)通过j=j+1将子序列的长度增加1并转向步骤1)。

进一步的,所述ε的设置方法为:ε作为常量,本算法的时间复杂度为O(dn)~O(dnlog2n),ε值越大,算法步骤3)中的子序列将会包含越多的样本点;如果ε很小,算法中参数j的迭代次数将会增加;但是如果ε很大,将可能会增加算法的时间复杂度;因此,ε应该在保证算法的时间复杂度控制在O(nlogn)的情况下设置得越大越好;

在本算法中,ε被设置为关于n的对数函数logmn时,算法中子序列的长度为2*n*k*logmn

所以ε被设置为logmn时,本算法的时间复杂度和快速排序是相同的,即为nlog2n,为了将ε设置的尽量大,m取值为2。

本发明的有益效果在于:本发明基于参考点的近邻分类算法—RPkN构思合理,本RPkN算法通过选择参考点和子序列长度来选择用于分类的近邻样本,而现有的k近邻算法总是查找最近邻样本来用于分类。与现有的k近邻算法相比,由于RPkN能够更好地考虑到数据的整体分布特征,所以RPkN能够更好地解决不平衡数据集分类的问题,获得比其他k近邻算法更好的精度。另外,RPkN通过计算样本点的RPF值避免了样本间距离的直接计算,将算法的时间复杂度降低到了(O(nlogn)),这种时间复杂度的降低不依赖任何维度的树结构,所以相比现有的精确的依赖树索引的k最近邻分类算法,其能够更好的适应高维数据集。在公开数据集和人工数据集上的分类结果中,其精度提升的效果非常显著,在部分数据集上的算法精度提高了9%。另外,算法的效率也明显好于FSA,在高维数据上的算法效率也好于基于树结构的算法。

具体实施方式

下面将结合图表,对本发明的优选实施例进行详细的描述。

一种基于参考点的快速精确近邻分类算法,该算法用参考点的距离来替代样本点之间的距离的进行直接计算,找到了比最近邻样本更加适合分类的样本点,以提高算法的分类精度,算法给定数据集D∈Rd,k是近邻算法中要搜索的近邻数,A是D中的一个样本点,ε为关系近邻搜索算法时间复杂度的常量;表示候选参考点设置为单位向量及其反向量,定义变量ExistingNeighbors=NULL,j=1,具体步骤包括:

1)设置子序列的长度为2j*k*ε,并选择第i个候选参考点为当前的参考点;

2)计算所有样本点的参考点因子值,即RPF值,并对所有样本点按照其RPF值进行排序并生成一个有序序列;

3)在由ExistingNeighbors和以A为中心且长度为2j*k*ε的子序列构成的集合中,找到与到A最近的k的样本点;

4)计算所有样本点的近邻样本及整个数据集的分类精度;

5)i=i+1,将第i个候选参考点设置为下一个参考点;并计算加入新参考点后的分类精度;

6)如果所有候选参考点被加入且精度增加,用所有样本的k近邻样本替代ExistingNeighbors,转向步骤7);如果还有候选参考点未被加入且精度增加,用所有样本的k近邻样本替代ExistingNeighbors,转向步骤5);

7)如果子序列长度增加后算法的分类精度降低,算法终止;否则,转向步骤8);

8)通过j=j+1将子序列的长度增加1并转向步骤1)。

进一步的,所述ε的设置方法为:ε作为常量,本算法的时间复杂度为O(dn)~O(dnlog2n),ε值越大,算法步骤3)中的子序列将会包含越多的样本点;如果ε很小,算法中参数j的迭代次数将会增加;但是如果ε很大,将可能会增加算法的时间复杂度;因此,ε应该在保证算法的时间复杂度控制在O(nlogn)的情况下设置得越大越好;

在本算法中,ε被设置为关于n的对数函数logmn时,算法中子序列的长度为2*n*k*logmn

所以ε被设置为logmn时,本算法的时间复杂度和快速排序是相同的,即为nlog2n,为了将ε设置的尽量大,m取值为2。

本RPkN算法不同于现有最近邻分类算法之处首先在于本算法步骤的第6个步骤,只有能够提高分类精度的近邻才会被加入到变量ExistingNeighbors中,才可能成为样本的最终近邻。现有的最近邻算法只是单纯的查找被查询样本的k个最近邻样本。该特征使得RPkN算法具有比现有k最近邻算法更好的精度。另外,由于使用参考点距离代替样本间距离的计算,使得本算法在不需要依赖树索引结构的情况下,将算法的时间复杂度降低到了O(nlogn)。

下面从算法的有效性和算法的效率两方面进行分析验证。

一、算法的有效性验证

本发明在表1中的十个公开标准数据集上进行有效性验证,将提出的算法在精度上与精确k近邻算法进行比较。由于没有使用随机算法,所以所有的实验结果都是可以再现的。仿真实验环境:Intel I5-3470处理器、8GB内存、windows7操作系统、matlab2014。在表1中的数据集分别是Breast cancer,Diabetes,Fourclass,Svmguide1,Svmguide3and Cod-RNA。由于在KNN算法中并不需要训练过程,在试验中并没有使用交叉验证。

表1实验数据表

算法精度的比较结果表现在表2至表3中。由于在相对较大的数据集上的运行很耗费时间,所以将k值从1变化到15时在相对较大数据集上的最好精度和相应的运行时间列在表4中。各个算法上的最高精度用黑体字表示。由于FSA与其他基于树索引结构的精确近邻算法具有相同的精度(高于近邻算法),所以FSA被选为RPkN的比较算法。

由于RPkN具有比kNNs在不平衡数据集中更加有效,所以RPkN在大多数数据集中相比FSA具有更好的精度。在所示的十个数据集中,除了Four-class和Ijcnn1,RPkN的精度都要好于FSA。在数据集Four-class中,两种算法具有相同的精度。在数据集IJCNN1中,RPkN的算法精度要略小于FSA,为0.3%。在其他9个数据中,RPkN的平均精度明显要好于FSA。优势最明显的是在数据集Cod—RNA中,为9.2%,其中RPkN的精度为94.3%,FSA的为85.1%。实验结果充分说明了本文提出的RPkN算法的有效性。

表2 FSA的算法精度(%)

表3 RPKN的算法精度(%)

表4在大数据集上的执行时间和算法精度

2、算法效率分析

执行时间的对比结果显示在表4到表6中。对于较小的数据集,如表5到6所示,除了在数据集Four-class上RPkN的时间基本要高于FSA。尤其在高维的小数据集上(如Sonar和splice),RPkN相比FSA要更耗时间。其原因主要在于RPkN算法中参与运算的参考点数据与数据的维度是正相关的。高的维度会使得更多的参考点参与运算,并增加运算时间。但是RPkN算法的时间复杂度只有O(nlogn)。所以,正如表6所示,RPkN的执行时间在相对较大的数据集上要远小于FSA.实验结果说明了本文提出的RPkN算法的高效性。

表5 FSA的执行时间(MS)

表6 RPKN的执行时间(MS)

最后说明的是,以上优选实施例仅用以说明本发明的技术方案而非限制,尽管通过上述优选实施例已经对本发明进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本发明权利要求书所限定的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1