K近邻方法(精选7篇)
K近邻方法 篇1
0引言
近年来,大数据处理[1,2]已成为各领域研究的一个热点问题之一,许多成熟的数据处理方法如神经网络NN( Neural Net- work)[3]、决策树DT( Decision Tree)[4]、支持向量机SVM( Sup- port Vector Machine )[5]、k-近邻方法[6]等被广泛研究并应用。 在这些分类方法中,k-近邻k-NN( k-Nearest Neighbor) 分类是一种最为经典且使用广泛的数据分类方法[7,8]。但是,传统k-NN分类方法存在多方面的困难,如近邻参数k的选择困难、距离度量形式局限、分类速度较慢、不能有效处理高维、非平衡等复杂数据分类问题。
目前,已经提出了多种改进的k-NN分类方法,如针对近邻参数的选择困难问题,采用启发式的搜索策略从参数取值空间中搜索得到更加合理的近邻参数来取代人为指定的参数值,典型的方法如VDM[9]及基于相似度支持度的k-NN参数优化算法[10]等; 针对传统k-NN分类方法不能高效处理高维数据的问题,通过充分利用K-NN分类的简单有效性及李群结构的复杂数据表示和距离计算能力,提出一种多协方差李-KNN分类方法[11],解决了高维数据分类问题; 针对传统k-NN方法分类速度慢,无法高效处理大规模数据的分类问题,目前已经提出了利用向量方差和逼近系数来进行k-NN搜索的方法[12]以加速k-NN分类方法的学习过程,或基于随机采样的方式[13],首先提取种子点,然后根据种子点进行加速的k-NN分类; 此外,许多研究者通过改变距离度量函数、学习样本权重、学习特征权重等方法对距离度量进行了改进,提高了k-NN分类方法处理非平衡分类问题的性能[14,15]。
但是,由于k-NN方法是基于实例学习的方法,即根据训练样本构造分类器,对于每个待分类样本,均需要计算其与训练集中每个训练样本的相似度,才能得到其近邻样本集,得到其标签。假设训练样本集规模为l,向量空间模型特征维度为d,测试样本集规模为t ,则k-NN方法的时间复杂度为O( tld) ,为保证分类的泛化性能,在采用k-NN方法处理实际分类问题时,需要训练集规模足够大,因此k-NN方法的时间复杂度往往较高, 无法处理大规模数据的分类问题。
针对传统k-NN分类方法时间复杂度高,无法进行高效分类的问题,本文提出一种基于聚类的加速k-NN( C_k-NN) 分类方法。该方法首先对训练样本集进行聚类,得到每个类的聚类中心,并将与聚类中心相似度最高的训练样本构成新的具有代表性的训练集。然后针对每个测试样本,选择新的训练样本集中的与其相似度最高的k个样本,以得到该测试样本的模式类别。
1 k-NN分类方法
k-NN分类方法通过选择与未标记样本相似度最高的k个样本构成近邻样本集,然后取近邻样本中类别最多的标签作为该未标记样本的标签,如此循环往复,直到所有未标记样本均得到相应标签为止。
假设训练集为Tr = { X,Y} = { ( xi,yi}li = 1且xi∈ Rd,其中X为训练样本集,Y为训练样本集标签,测试集为TE = { TX,TY} = { ( txj,tyj}jt= 1,其中TX为测试样本集,TY为测试样本集标签, k-NN分类参数为k 。传统k-NN分类方法的目标即根据与测试样本集TX中测试样本txj相似度最高的k个训练样本来得到测试样本txj的类别标签ty'j。k-NN分类方法针对每个测试样本txj,从训练样本集X中选择与测试样本txj相似度最高的k个训练样本k_Set = { xq}kq = 1,其中,任一训练样本xi与测试样本txj的相似度定义如下:
式中,xip表示训练样本xi的第p个分量,txjp表示测试样本txj的第p个分量。假设离散目标函数为f: Rd→ Y,即建立训练样本空间Rd与标签域Y之间的对应关系,如f( xi) = yi,然后采用式( 2) 对测试样本txj打标签。
其中,δ 函数如下:
即可得到测试样本txj的预测标签ty'j,针对测试样本集TX中的每个测试样本循环往复,得到测试样本集TX中每个测试样本的预测标签,并将其与测试样本的真实标签比对,以衡量分类器的泛化性能。
由于传统k-NN分类方法时间复杂度较高,特别地,当训练集规模l较大时,无法建立高性能的分类器。针对这一问题,本文提出一种基于聚类的加速k-NN分类方法,首先对训练样本集进行聚类,得到每个类的聚类中心,并提取与聚类中心最相似的训练样本构成新的训练集,以减小测试集寻找k近邻样本时的搜索规模,提高模型的学习效率,使其能够对大规模数据进行高效分类。
2基于聚类的加速k-NN分类算法
在处理实际问题时,经常会遇到大规模数据的分类问题,传统k-NN分类方法由于其对每个测试样本的标签预测过程均需要对整个训练样本空间的全局搜索,因此当训练样本集规模较大时,无法进行有效的分类。为解决该问题,本文首先对整个训练样本集进行聚类,计算每个聚类的类中心,并选择与类中心相似度最高的训练样本构成新的训练样本集,然后再执行k-NN分类过程。由于基于聚类的加速k-NN分类算法压缩了实际参与的训练样本集的规模,因此其寻找每个测试样本的k个近邻样本的搜索空间变小,搜索速度快,提高了整个k-NN分类算法的执行效率,可对大规模数据集进行高效分类。
具体地,基于聚类的加速k-NN分类算法执行过程如下。
算法1基于聚类的加速k-NN分类算法
初始化: 假设训练集为Tr = { X,Y} = { ( xi,yi}li = 1且xi∈ Rd,其中X为训练样本集,Y为训练样本集标签,测试集为TE = { TX,TY} = { ( txj,tyj}jt= 1,其中TX为测试样本集,TY为测试样本集标签,k-近邻分类参数为k,聚类参数为c 。
Step1: 对训练样本集X进行初始聚类,得到初始聚类划分结果X → { Xp}cp = 1,具体过程如下:
Step1. 1: 从训练样本集X中随机选择c个样本构造初始中心集C = { cr}rc= 1;
Step1. 2: 计算训练样本集X中每个训练样本xi与所有不同类心cr之间的相似度S( xi,cr) :
分别将每个xi归入与其相似度最高的类中心所属的类别;
Step1. 3: 根据式( 5) 更新每个类的中心cr,得到新的类中心集合C :
式中,crp为第r个类心的第p个分量,xrqp表示第r类中第q个样本的第p个分量,nr为第r类中训练样本个数。
Step1. 4: 观测更新前后的聚类中心集合C是否一致,若不一致,则返回Step1. 2继续执行,直到更新前后的聚类中心一致为止,得到聚类划分结果X → { Xp}cp = 1;
Step2: 计算训练样本集X中与聚类中心集C中每个聚类中心相似度最高的训练样本,构成新的训练样本集合X',并结合其样本标签构造新的训练集Tr' = { X',Y'} = { ( x'i,y'i) }ic= 1;
Step3: 针对测试样本集TX中的测试样本txj,根据式( 1) 计算新的训练样本集X' 中每个训练样本x'i与测试样本txj的相似度S( x'i,txj) ;
Step4: 选择相似度最高的前k个训练样本,以得到测试样本txj的预测标签ty'i:
Step5: 针对测试样本集TX中的每个测试样本循环往复执行Step3 - Step4,得到测试样本集TX中每个测试样本的预测标签,构成预测标签集合TY',并将其与测试样本的真实标签集TY比对,以衡量分类器的性能;
Step6: 算法结束,输出分类器的分类精度。
3实验结果及分析
为验证本文提出的基于聚类的加速k-NN分类方法( C_k-NN) 的性能,本文将其与标准k-NN分类方法( k-NN) 、基于近邻参数优化的k-NN分类方法Ok-NN( Nearest Neighbor Optimiza- tion k-NN Classification method)[10]和基于随机采样的加速k-NN分类方法进行了对比RSk-NN( Random Sampling k-NN Classifica- tion Method)[13]。本文的实验在一台PC机( 2. 66 GHz CPU, 2 GB内存) 上进行测试,实验平台是Matlab2008a。实验采用的数据集[16]见表1。
实验中本文提出的C_k-NN优化分类方法的初始聚类参数c分别取20、40、60、80和100进行实验,基于随机采样的加速k- NN分类优化算法中的采样参数与本文方法的聚类参数设置值一致,而k-NN方法中的近邻参数k分别取10、15和20进行测试。图1 - 图5分别为在近邻参数10下三种方法的比较结果。 由于数据集Flare_solar规模较大,标准k-NN分类法方法无法在有效时间内进行高效分类,因此没有得到标准k-NN方法在该数据集上的实验结果值。
由于标准k-NN方法无法在Flare_solar上有效训练,因此没有得到其测试精度,且由于基于近邻参数优化的k-NN分类方法( Ok-NN) 与标准k-NN方法不受参数设置影响,因此其测试精度是一条水平直线。从图中可以看出,除数据集Flare_solar外,在其他数据集上,本文提出的基于聚类的加速k- NN分类方法( C_k-NN) 的测试精度与标准k-NN方法的测试精度最为接近,Ok-NN分类方法则略次于本文提出的C_k-NN方法,而RSk_NN分类方法效果较差,特别地,在数据集German和Titanic上几乎是失效的。其次,从图中可以看出,随着聚类个数参数的增加,C_k-NN方法的测试精度基本呈现相对稳定的增长趋势,这是由于随着聚类个数增加,所得到的实际训练样本集规模增大,包含的分类信息较多,能够进行有效分类。
在取得最优参数值时( 即图中C_k-NN与RSk-NN在不同参数下的最大值) ,三种改进的k-NN分类方法与标准k-NN方法的最小测试精度差值见表2。
从表2中可以看出,与标准k-NN方法相比,本文提出的C_ k-NN分类方法测试精度下降较小,测试精度的差值均在1% 以内; 而其他两种优化方法与标准k-NN分类方法相比,则测试精度有较大程度的损失,特别地,在数据集German上,精度损失很大。这是由于数据集German本身维度较高,分布较为复杂,采用基于近邻参数优化和基于随机采样的方法尽管能够压缩训练样本规模,提高分类效率,但其抽取的样本含有的信息量较小,损失了大量重要的训练样本信息,因此测试精度低,泛化性能差。
表3为近邻参数取10时,四种方法在个数据集上的训练时间比较,其中标准k-NN方法在数据集Flare_solar上无法在有效时间内训练。
从表3中可以看出,与标准k-NN分类方法相比,本文提出的C_k-NN在学习效率方面有了明显地提高,特别对于规模较大的数据集,训练速度提高了成百上千倍,且随着聚类个数参数的增大,实际训练样本集规模增大,因此训练时间增加。但是, Ok-NN方法尽管通过参数优化的方式提高了分类问题学习过程的效率,但其仅仅是通过优化参数的方式进行了加速,没有从本质上改变算法的复杂度,训练效率提高的幅度仍然不够高,对于大规模数据集依旧无法高效得到分类结果。而RSk-NN方法的学习效率很高,甚至在多数数据集上都超过了本文提出的C_ k-NN分类方法,但其测试精度太低,且随着参数变化模型的测试精度值有较大波动,分类器的性能很差。
在其他近邻参数下的实验结果也表明,本文提出的C_k-NN分类方法在保持较高测试精度的同时大幅度提高了模型的学习效率,得到了优秀的实验结果。
综上可知,本文提出的基于聚类的加速k-NN分类方法不仅有效压缩了训练样本规模,在大幅度提高了方法训练效率的同时能够提取重要的训练样本信息,压缩不重要的训练样本信息,使得模型保持较高的泛化性能,可用来解决大规模样本的分类问题。
4结语
针对标准k-NN分类方法时间复杂度较高,对大规模数据无法进行高效分类的问题,本文提出一种基于聚类的加速k-NN分类方法。该方法首先对训练样本集进行聚类,得到每个类的聚类中心,并选择与聚类中心相似度最高的训练样本构成新的训练集。然后针对每个测试样本,计算新训练样本集中的与其相似度最高的k个样本,并选择该k个近邻样本中最多的类别作为该测试样本的预测模式类别,从而在保持较高分类精度的同时大幅度提高了模型的分类性能。在未来的工作中,将进一步结合现有成熟的高维数据机器学习的降维技术,拓展C_k-NN方法在处理大规模的文本分类、图像分类等实际问题中的应用领域。
K-最近邻分类算法应用研究 篇2
K-最近邻(以下简称KNN)分类算法[1]是目前比较流行的一种分类方法。如今它已被广泛应用于各种人工智能领域,如模式识别、数据挖掘、后验概率估计、相似性分类、计算机视觉和生物信息学等。KNN分类算法的最大优点是其适合于属性较多或数据量很大的问题。它不需要先使用训练样本进行分类器设计,而是可以直接用训练集对数据样本进行分类,确定其类别标号。KNN分类算法思想简练,易于实现,在许多领域都有成功应用。
1K-最近邻算法简介
最近邻分类法是基于类比学习,即通过给定的检验元组与和它相似的训练元组进行比较来学习。训练元组用n个属性描述。每个元组代表n维空间的一个点,即所有训练元组都放在n维模式空间中。当给定一个未知元组时,KNN分类算法搜索该模式空间,找出最接近未知元组的k个训练元组。这k个训练元组是未知元组的k个“最近邻”。
文中的KNN分类算法是基于如下假设:1所有数据及类别都为数值类型;2度量距离越大,两个元组越相似;3每一个属性具有相等的权重;4属性值归一化;5如果元组X1和(或)X2的给定属性A的值缺失,则假定取最大可能差。
其中,“邻近性”用欧氏距离度量。两个点或元组X1= (x11,x12,...,x1n)和X2= (x21,x22,...,x2n)的欧氏距离为:
即对于每个数值属性,取元组X1和X2该属性值 的差,取差的平方并累计,并取累计距离计数的平方根。在使用式(1)之前,将每个属性的值规范化,以防止具有较大初始值域的属性(如收入)比具有较小初始值域的属性(如二元属性)的权重大,需要通过计算式(3),使用最小-最大规范化将属性A的值v变换到[0,1]区间中的v'。
其中minA和maxA分别是属 性A的最小值 和最大值[5]。
假定每个属性已经映射到[0,1]区间。如果数值属性A在元组X1和X2都缺失,则差值取1;如果只有一个值缺失,而另一个存在并且已经规范化,则取差1-v′和0-v′中的最大者。
对于近邻数k的最佳取 值,通过实验 确定。一般而言,训练元组数越多,k的值越大。随着训练元组数趋向于无穷并且k=1,误差率不会超过贝叶斯误差率的两倍(后者是理论最小误差率)。如果k也趋向于无穷,则误差率趋向于贝叶斯误差率[5]。
2实验算法流程
KNN分类算法流程如下:
Step1:准备数据,对数据进行预处理。
Step2:选用合适的数据结构存储训练数据和测试元组。
Step3:设定参数k,一般训练 元组数越 多,k的值越大,通常取奇数。
Step4:维护一个大小为k的按距离由大到小的优先级队列,用于存储最近邻训练元组。
Step5:随机从训练元组中选取k个元组作为初始最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级队列。
Step6:遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距 离L与优先级 队列中的 最大距离Lmax进行比较。若L> =Lmax,则舍弃该元组,遍历下一个元组。若L<Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列。
Step7:遍历完毕,计算优先级队列中k个元组的多数类,并将其作为测试元组的类别。
Step8:测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k值。
3实验结果与分析
3.1实验环境和工具
实验环境:MicrosoftWindows7 + JavaDevelopKit1.7.0;服务器配置:Intel(R)Core(TM)CPU2.50GHz,4.0GB内存;实验工具:MyEclipse8.5,Matlab7.0。
3.2实验数据集
本文采用的数据集以经典乘式割草机数据集为例,一个乘式割草机的制造商希望将一个城市中的家庭分类为可能买割草机家庭及不想买割草机家庭。在该城市中,随即抽取12个拥有乘式割草机的家庭和12个没有拥有乘式割草机的家庭。
进行实验时,将实验数据分为两个部分:训练集和测试集。将75%家庭划为训练集,其它25%家庭划为测试集。当k取不同值时,利用训练集家庭对测试集家庭进行分类。乘式割草机数据集如表1所示。
将数据集分为含有18个事例的训练集和含有6个事例的测试集。测试集包含表中第6、7、12、14、19、20个事例,剩下的18个观测点构成训练集。
3.3估值标准
图1展示了在训练集和测试集中的所有事例,“*”表示测试集数据,“·”表示训练集数据。
如果选择k=1,则选择了一种对数据局部特征非常敏感的分类方式。如果选择的k值较大,则相当于取大量的数据点的平均,同时会平滑掉由于单个数据点的噪音而导致的波动性。
3.4实验结果与分析
一般而言,k值通常取奇数。从k=1开始,使用检验集估计分类器的误差率。重复该过程,每次k增值2,允许增加两个近邻。选取产生最小误差率的k值作为本次实验的最佳取值。使用Matlab7.0软件对实验结果作图,如图2所示。
对比表1中的数据分类,可知当k=13时测试集中事例全部分类正确,当k取其它值时差异较大。由图1可以得到表2所示内容。
通过实验分析可以看出,在该案例中,将选择最近邻个数k=13。该选择很好地消除了在低k值时的变动性和高k值时的过平滑现象。针对不同k值的测试可知,k值可通过有效参数的数目来推断。有效参数的数目和k值有关,约等于n/k(约为2),其中,n是该训练集中事例的数目。
4结语
K近邻方法 篇3
近年来, 物体的采样表示方法已成为计算机图形学领域一个重要的趋势, 3D扫描、CT扫描、核磁扫描等被用于生成物体的三维采样数据。传统的处理方法是根据采样点生成三角片网格进行绘制, 但是随着达到真实感场景绘制所需生成的物体模型复杂度的不断提高, 三角片的数量也迅速增加, 正如Alvy Ray Smith所说:“其实就是800 000个多边形”[1]。对大量三角片的处理也造成了带宽瓶颈和过度的浮点计算量。
随着三维扫描技术的高速发展, 扫描所得到的网格点数目达到了十亿的数量级[2]。并且由于传统的三角片网格表示不仅记录了点的信息, 还记录了点和点之间的连接关系, 即边的信息。传统技术更多地关注于每个边、点的放置, 在每个点上耗费的工作相对过多, 这就使得现有的图形工作站无法实时显示这种规模的网格。基于点的绘制技术 PBR (Point-Based Rendering) [3]抛弃了传统的三角片表示方法, 只记录点的信息, 由这些点的信息直接重构出最终的图像, 从而为解决大量三维采样数据的快速绘制处理提供了一条新的途径。
基于点的绘制是用物体表面的点作为绘制元素, 将物体上的所有点显示在屏幕空间。由于点之间存在一定的距离, 并且传统的方法是通过经验值来确定Surfel (Surface Element) [4]的大小, 生成的真实感物体表面上会有很多空洞。为了避免空洞的出现, 本文提出了一种基于k近邻的Surfel半径求解算法。
1 算 法
1.1 相关概念
为了便于对算法进行描述和讨论, 首先给出一些相关概念。
(1) 散乱数据点云
通过坐标测量仪对物体表面进行坐标测量得到的散乱分布的数据点的集合。
(2) Surfel 点模型的基本几何单位。
每一个Surfel包含点的位置、法向、半径等信息。这实际上将每个点考虑为一个圆片来局部近似物体表面 (如图1所示) 。
(3) 最小包围盒
一个沿坐标轴方向且包含散乱数据点集的体积最小的长方体。
(4) 栅格
建立某点的k个最近邻域时, 对最小包围盒进行空间划分产生的小立方体称为栅格。
(5) k近邻
给定一个曲面的散乱数据点集P={Pi (xi, yi, zi) , i=1, 2, …, n}, 设某点为V (xv, yv, zv) , 则称P中距离点V最近的k个点为V的k邻域点集, 记为:KNB|V|={P1, P2, …, Pk}, 称为点V的k近邻, 它反映了点V的局部信息。k近邻中的每个点称为点V的邻近点。
1.2 算法基本思想
本文算法的主要思想是:在二次分割的自适应最小包围盒的栅格化基础上建立k近邻, 然后搜索k个最近邻域并据此计算各散乱点的法向和半径, 最后为了验证算法进行点的建模与绘制。本算法用到的相关数据结构如下:
(1) 数据点集链表 该链表保存数据点集中每个点的坐标信息、法向、半径, 所有数据点按原有点云顺序排列, 链表中每个元素为一个数据点, 数据点的存储结构如图2所示, 其中x、y、z为数据点的几何坐标, n为数据点法向, r为Surfel半径。
(2) 栅格内数据点索引链表 所有属于某一栅格的数据点的索引组成一条链表。
(3) 栅格数组 该数组为一动态三维数组, 由于最小包围盒划分后所得到的栅格数量是随数据点集的变化而变化的, 因此采用动态数组存储。该数组中的每一个元素均为一个索引, 该索引指向栅格数据点索引链表。
(4) k近邻链表 该链表保存当前数据点的k个最近邻域的搜索结果。链表的每一个元素为一个邻结点索引, 邻结点的存储结构如图3所示。其中m_dDisToP表示当前数据点与被搜索数据点之间的距离按距离增序排列, m_pPtObject表示被搜索数据点的索引。
(5) 数据点属性链表 该链表保存数据点集中每个点的相关属性信息:当前数据点的索引、k近邻链表索引等等。链表的每一个元素结构如图4所示。其中m_pPtObject表示当前数据点索引;m_pPKNbPtrList表示当前数据点的k近邻链表索引。
1.3 基于二次分割的自适应最小包围盒的栅格化
为了计算散乱数据点集中某点的k近邻, 首先依据最小包围盒的体积大小、点的总数和邻近点数目k, 计算出栅格的边长L′, 把最小包围盒分成许多大小相同的栅格;然后根据非空栅格数目、首次划分时栅格的边长L′和数据个数点来估算散乱数据点集中点之间的平均点距;之后利用此平均点距计算出最终的栅格边长L, 再次对最小包围盒进行空间划分;然后遍历整个数据集, 使数据集中的每个点归入到相应的栅格内 (每个数据点属于且仅属于一个栅格) ;最后根据栅格内点的几何坐标, 对每个候选点在其周围栅格内进行k近邻搜索, 从而建立点集的邻域结构。
首先计算最小包围盒[Xmin, Xmax][Ymin, Ymax] [Zmin, Zmax], 其x、y、z轴方向的长度分别为Lx、Ly、Lz;然后估算栅格的边长L;最后把数据集的最小包围盒划分成Nc个栅格, 其沿x、y、z 轴方向分割的数目分别为:
Nx=
则栅格数量Nc为:
Nc=Nx×Ny×Nz (2)
其中首次栅格边长L′在文献[5]中的计算方法如式 (3) 所示:
L′=α
为进一步缩小搜索的范围, 提高搜索的速度, 在栅格的边长L的估算上做了进一步改进。具体算法如下:
首先, 利用文献[5]的方法, 对最小包围盒进行首次划分;然后利用划分的结果进行平均点距dAvg的计算;最后以式 (4) 计算出的边长作为栅格的边长, 再次对最小包围盒进行划分, 并作为最终的空间划分结果, 从而完成对散乱数据点集的空间划分。改进后的边长计算公式为:
L=
其中式 (3) 中α为一标量, 用于调节栅格边长的大小。文献[5]在对栅格边长L进行估算时, 在考虑到数据集的范围和数据点总数n的同时, 也考虑到了邻近点的个数k。本文采用此方法作为最小包围盒首次划分的依据, 但却没有以其为最终的划分结果, 而是利用此次划分的结果, 抽取不为空的栅格来估算该数据集的平均点距, 然后依据估算的平均点距, 利用式 (4) 来确定最终的栅格边长。
在点云数据中, 预搜索数据点p的k近邻, 理想情况下p点恰好位于栅格的中央, 而且周围点的数量恰好大于或等于k。则在本栅格内即可完成搜索, 而不必继续搜索周围的邻格, 从而大大提高搜索效率, 节省搜索时间。但实际情况并不理想, 多数数据点并不恰好位于栅格的中央位置。因此, 必须通过搜索邻栅格的数据点, 才能完成k近邻链表的建立。
栅格边长L确定后, 则最小包围盒在x、y、z方向上的分辨率分别为Nx、Ny、Nz栅格数组结构为A[x][y][z]。最后把每个数据点的索引归入到相应的栅格数据点索引链表中。
1.4 k个邻近数据点的搜索
利用上面得到的栅格数组结构, 每个候选点Pi搜索k个最近邻域的步骤如下:
Step1 根据候选点Pi的三维坐标值, 找到其所在的栅格A[ip][jp][kp]。
Step2 计算候选点Pi到当前栅格六面的最短距离dShortest。
Step3 在当前栅格内搜索与候选点Pi最近的k个点, 按距离升序的方式, 记录k个邻近点与候选点间的距离及其索引。
Step4 在当前栅格内, 如果候选点Pi的k个最近邻域已找到, 并且候选点到第k个最近点的距离小于dShortest, 则候选点的 k 个最近邻域搜索结束, 记录它们的索引;否则, 栅格向外扩张一圈, 返回Step3继续搜索。
1.5 Surfel半径求解算法
本文在上述算法的基础上实现了基于k近邻的Surfel半径求解算法, 并进行点的建模与绘制。具体步骤如下:
Step1 将原始点云数据按1.3节点方法进行栅格化操作。
Step2 按1.4节点算法创建每个点的k近邻。
Step3 计算每个点的法矢, 记录到Cpoint类中的成员变量n中。
Step4 求点到k个最近邻域点的距离平均值并将其作为Surfel的半径, 并记录到Cpoint类中的成员变量r中。
Step5 基于点的建模与绘制。
2 算例分析
为了验证本文算法的正确性和有效性, 进行了大量实验。测试硬件环境为P4 2.8G CPU, 512M RAM, 编程环境为 Visual C++6.0, 图形开发环境为 OpenGL。所有实验数据都为真实物体的三维点云数据。
图5上、图6左、图7上为通过经验值确定Surfel大小的方法生成的效果, 图5下、图6右、图7下为本文算法生成的真实感效果图。
3 结束语
本文提出了一种基于k近邻的Surfel半径求解算法。文章系统地阐述了算法的基本思想、栅格边长的优化估算策略、搜索方法和在此基础上确定Surfel的大小。对比实验结果表明本文算法在真实感效果上得到了明显的提高。
未来工作将是根据散乱点云的分布情况, 探测三维点模型的“孤点”、“内部点”、“尖锐特征点”和“边界点”, 来增强真实感的逼真效果。
参考文献
[1]Alvy Ray Smith.Smooth operator[J].The Economist, 1999, 3:73-74.
[2]Levoy M, Pulli K, Curless B, et al.The digital michelangelo project:3Dscanning of large statues[C]//Proceedings SIGGRAPH 2000, 2000:131-144.
[3]Levoy M, Whitted T.The use of points as display primitives TechnicalReport TR 85-022[R].Department of Computer Science, The Univer-sity of North Carolina at Chapel Hill, 1985.
[4]Pfister H, Zwicker M, Van Baar J, et al.Surfels:Surface Elements asRendering Primitives[C]//Proceedings SIGGRAPH 2000, 2000:335-342.
K近邻方法 篇4
上个世纪60年代, Mac Queen首次提出kmeans算法[1], 而后的数十年中, kmeans算法被广泛应用于各种领域, 比如马勇等人将kmeans算法应用在医疗系统中[2], 杨明峰等人将kmeans聚类算法应用于对烤烟外观的区域分类[3]。同时很多的学者投入到对kmeans算法本身特性的研究中[4,5], 目前kmeans算法已经成为机器学习, 数据挖掘等领域比较重要的方法之一。而k近邻算法是图像以及文本分类领域应用比较广泛的算法之一[6,7], 对k近邻算法而言, k值的选择以及样本间距离的度量方式都会影响到分类的精确度。但是同样有许多学者对该算法进行了一些改善, 比如孙秋月等[8]通过对度量的样本数据的每个维度赋不同权值的方式, 降低了样本数据分布不均匀导致的分类误差。严晓明等通过类别平均距离进行加权对大于某一个阈值的数据样本点进行剔除的方式来提高k近邻算法的精度[9]。k近邻算法本身是一种惰性的监督算法, 相较于其他监督算法比如支持向量机、逻辑回归、随机树等, 具有算法简单、易于理解、易于实现、无需估计参数的特性。kmeans算法由于对初始点选择较敏感, 不同的初始点将会导致不同的聚类结果。因此本文对kmeans算法进行改进, 改良的kmeans算法对二分类的结果可以接近k近邻算法的正确率, 甚至在k近邻算法选择不同的k值时, 分类效果会优于采用k近邻算法的分类结果正确率, 同时分类的结果也远高于随机指定初始点的kmeans算法。
1 传统的分类算法与改进算法
1.1 传统的kmeans算法与k近邻算法
对于传统的kmeans算法而言, 对于给定的数据集n个样本, 在不知道数据集的标记时, 通过指定该数据集中的k (k≤n) 数据样本作为初始中心, 通过如下的方式进行聚类:
(1) 对该数据集中任意一个数据样本求其到k个中心的距离, 将该数据样本归属到数据样本距离中心最短的类;
(2) 对于得到的类中的数据样本, 以求类的均值等方法更新每类中心;
(3) 重复上述过程1和2更新类中心, 如果类中心不变或者类中心变化小于某一个阈值, 则更新结束, 形成类簇, 否则继续。
但是对于传统的kmeans聚类算法而言, 由于随机指定初始点, 对kmeans算法通过迭代这样一种启发式的贪心算法而言不能形成一个全局最优解, 迭代最终收敛的结果可能都是局部最优解。这样分类的精度就会难以预料, 对最终的样本分类就难以消除随机指定初始点造成的聚类结果不一致的影响。
对于传统的k近邻算法而言, 对于给定的数据集, 有n个数据样本是已标记的, 另一部分数据样本是未标记的, 对未标记的数据样本, 通过如下的方式进行分类:
(1) 度量每个未标记数据样本与所有已标记数据样本的距离;
(2) 对所有求出的距离选择与未标记数据样本距离最近的k (k ≤n ) 个已标记数据样本;
(3) 统计这k个已标记的数据样本, 哪一类的数据样本个数最多, 则未标记的数据样本标记为该类样本K近邻算法没有一个数据样本训练的过程, 本身是一种惰性的监督算法, 该算法对k值的选择以及距离的度量方式都会影响最终的分类精度。因为该算法只是选择。
k个近邻而没有判断近邻中样本是否分布得均匀。因此, 该算法如果样本分布不均匀, 也会大大影响分类的结果。
1.2 改进的kmeans算法
由于传统kmeans算法初始点的影响较大, 因此可以做如下改进。
对于给定的数据集样本, kmeans可以通过两两比较数据集中数据样本点间的距离, 选择距离最远的两个点A, B作为初始标记。同时为了去除噪声对初始点的影响, 对于选定的初始标记点, 可以选择以初始标记点为中心, 与初始标记点距离小于阈值的若干个点的几何均值A', B' 作为最终的初始点。对于A初始标记点的若干点的选择原则是离初始标记A距离与离B距离的比值大于一定阈值的若干点, 而对于B初始标记点的若干点的选择原则是离初始标记B距离与A距离的比值大于一定阈值的若干点。选定了初始点后, 其后的步骤如下:
(1) 对该数据集中任意一个数据样本求其到A', B' 两个中心的距离, 将该数据样本归属到数据样本距离A', B' 短的类;
(2) 对于得到的类中的数据样本, 求类的均值更新两类中心;
(3) 重复上述过程1和2更新类中心, 如果类中心不变或者类中心变化小于某一个阈值, 则更新结束, 形成类簇, 否则继续。
2 实验结果与分析
采用手写数字集MNIST Handwritten Digits[10]进行实验, 该数字集库含有0-9的10类手写训练数据集和0-9的10类手写测试数据集。每个数据集样本的大小是28*28的图片, 转化成向量是1*784维大小。从手写数据集中抽取标记为1和2的两类数据集样本, 从这类数据集中随机抽取标记为1和2的数据样本各1000个, 共计2000个数据样本进行实验分析。从这2000个数据样本中随机选择1600个数据样本 (标记为1和2的两类数据各800个数据样本) 进行k近邻分析, 400个数据样本 (标记为1和2的两类数据样本各200个) 进行测试。对于改进的kmeans算法, 将小于阈值的5个点取几何均值作为最终的初始点和传统的kmeans算法采用400个数据样本进行测试。改进的kmeans算法测试的正确率为84.25%, 传统的kmeans算法初始值不确定, 可能的正确率为15.75%, 51%以及83.75%等。很明显, 改进的kmeans算法不管从精度还是稳定性方面都优于传统的kmeans算法。k近邻算法选择曼哈顿距离和欧式距离作为距离度量的方式, 同时改变k值对k近邻算法的结果进行测量, 结果如图1所示, 横轴表示k值选择的样本数, 纵轴表示对应的测试正确率。
从图1中可以看出, 随着近邻数的增多, 在一定的范围内, k近邻的精度是下降趋势。对于选择曼哈顿距离度量样本间距离的k近邻算法, 当k值大于200的时候, k近邻算法对样本的分类正确率明显低于改良的kmeans算法对样本分类的正确率。而采用欧式距离度量样本间距离的k近邻算法, 当k值大于380的时候, k近邻算法对样本的分类正确率才明显低于改良的kmeans算法对样本分类的正确率。因此对于k近邻算法而言, k近邻数目的选择以及样本间距离度量的方式对分类的结果都是至关重要的。同时从中可以发现, 在某些情况下, 无监督的学习方式可能比有监督的学习方式更有利, 也更方便。
摘要:kmeans算法作为无监督算法的一种, 对初始点的选择比较敏感;而k近邻作为一种惰性且有监督的算法, 对k值和样本间距离度量方式的选择也会影响结果。改良的kmeans算法通过遍历样本, 筛选初始点, 其准确率超过了k近邻算法, 同时稳定性也优于传统的kmeans算法。无监督算法在一些情况下优于有监督算法。
关键词:初始点,无监督,邻近点,有监督
参考文献
[1]Macqueen J.Some methods for classification and analysis of multivariate observations[C].Proceedings of the fifth Berkeley symposium on mathematical statistics and probability, 1967:281-297
[2]马勇.一种改进的K-means聚类分析算法在医院信息系统中的应用研究[J].信息资源管理学报, 2012, (03) :93-96
[3]杨明峰, 詹良, 魏春阳, 等.基于K-means聚类分析的不同种植区烤烟外观质量区域分类[J].中国烟草科学, 2012, (02) :12-16
[4]张文明, 吴江, 袁小蛟.基于密度和最近邻的K-means文本聚类算法[J].计算机应用, 2010, (07) :1933-1935
[5]袁方, 周志勇, 宋鑫.初始聚类中心优化的k-means算法[J].计算机工程, 2007, (03) :65-66
[6]陈帅均, 蒋平, 吴钦章.改进的KNN算法在光测图像关键事件评估中的应用[J].光电工程, 2014, (08) :66-72
[7]王渊, 刘业政, 姜元春.基于粗糙KNN算法的文本分类方法[J].合肥工业大学学报 (自然科学版) , 2014, (12) :1513-1517
[8]孙秋月.基于SNN相似度的KNN分类算法研究[D].云南大学, 2008
[9]严晓明.基于类别平均距离的加权KNN分类算法[J].计算机系统应用, 2014, (02) :128-132
一种基于K近邻团的聚类算法 篇5
聚类是一种无监督的机器学习模式,是数据挖掘、机器学习以及模式识别领域重要的研究内容,在识别数据集的内在结构方面具有极其重要的地位。聚类算法通常在语音识别、图像处理、数据挖掘、生物学、心理学、考古学等诸多领域和学科中被广泛地应用[1]。
聚类算法主要包括划分方法、层次的方法、基于密度的方法、基于网格的方法以及基于模型的算法。宏观上来看,以上算法大致可分为两类:从整体出发聚类如,K-MEANS、CURE算法等,以及从个体出发聚类如DBSCAN、CHAMELEON算法等。从整体出发的聚类很难考虑到个体之间特定的联系和差异,因此很难发现对象之间固有的联系。与此相反,从个体出发的聚类可以掌握对象之间的关联关系,在聚类过程中能够保持关联的有效性。然而对于个体出发的聚类又难以给出具体的参数对簇的大小和数量加以界定。
为了解决以上问题,优化聚类效果,提出一种基于K近邻团的聚类算法。该算法同时引用了K近邻与逆K近邻[5]的概念,构造K近邻邻接矩阵和逆K近邻邻接矩阵,通过矩阵“与”操作构造K近邻团邻接矩阵,在此邻接矩阵上挖掘K近邻团,从而发现对象之间的固有聚类。K近邻团中的任意两个对象之间互为K近邻,保证了彼此之间的相似性,避免对象被错误地划分到其他簇中。同时选择不同的K值可以形成大小不等的团,通过数据自身的关联来决定簇的数量。
1 K近邻图、逆K近邻图、K近邻团和极大K近邻团
在介绍K近邻团聚类算法之前,先引入K近邻图、逆K近邻图、K近邻团和极大K近邻团的概念。
1.1 K近邻图和逆K近邻图
K近邻(KNN)是由Cover 和Hart 于1968年提出的,定义K近邻图如下:
定义1K近邻图是指有向图GKNN=(V,E),其中结点集V={V1,V2,…,Vn},边集E={e1,e2,…,em}且ek=<Vi,Vj>,Vi,Vj∈V; i=1,2,…,m,当且仅当Vi是Vj的K近邻时ek不为零,且邻接矩阵MKNN(n*n)[ij]不为零。
K近邻图表示对象之间的相似关系,根据K的取值不同邻接矩阵可以是稀疏矩阵,也可以是稠密矩阵,其元素个数为kn个。
定义2 逆K近邻图是指有向图GRKNN=(V,E),其中结点集V={V1,V2,…,Vn},边集E={e1,e2,…,em}且ek=<Vi,Vj>,Vi,Vj∈V; i=1,2,…,m,当且仅当Vi是Vj的逆K近邻时ek不为零,且邻接矩阵MRKNN(n*n)[ij]不为零。
由定义1及定义2可知逆K近邻图是在K近邻图的基础上将所有弧的起始点和终止点对调得到的,反映在邻接矩阵上有MRKNN(n*n)=MKNN(n*n)T,即逆K近邻的邻接矩阵是K近邻邻接矩阵的转置。
1.2 K近邻团和极大K近邻团
定义3K近邻有向图GKNN=(V,E)的子图G′=(V′,E′),V′⊆V,E′⊆E满足∀Vi,Vj∈V′同时存在ek=<Vi,Vj>和ek=<Vj,Vi>,则点集E′称为K近邻团(K-nearest Clique,KNC)。
例如对图1含有5个点的数据集当k=3时我们可以分别计算出K近邻、逆K近邻及K近邻团:
由定义3可知,G是一个有向完全图,由于K近邻团中任意两个点都互为K近邻,因此K近邻团是图GKNN上的一个等价关系。
定义4 若一个K近邻团满足任何以其作为真子集的集合都不能构成K近邻团,则我们称该K近邻团为极大K近邻团(Max K-nearest Clique,MKNC)。
由定义可知图GKNN中可能存在多个MKNC,这些MKNC有可能彼此相交,也有可能彼此无任何联系,但是每个MKNC中的对象都满足彼此相似的特性,因而可以代表一个具有特定意义的簇。由此可见如何发现数据集中的极大K近邻团成为研究的首要目标。
2 K近邻团聚类算法
以图1所示数据为例,若采用KNN聚类算法则点V1和V5具有最大的相似度(相似度为1),这显然是不正确的;若采用RKNN算法,则点V1、V5各为一类,V2、 V3 、V4为一类,这显然也不是理想的结果,而采用KNC作为聚类标准则能够达到期望的聚类效果。K近邻团聚类算法就是利用极大K近邻团作为聚类的依据,将每个极大K近邻团看做一个类别簇,从而实现根据对象本身特性的自然聚类。该算法主要步骤如图2。
2.1 构造K近邻图
挖掘极大K近邻团首先要构造K近邻图GKNN,其中K近邻的度量可以采用多种方法,例如欧式距离、余弦值或内积[2]。求K近邻可以采用R-tree、SS-tree、SR-tree和Voronoi图等计算方法。算法可将距离的度量作为一个参数,根据数据集自身的特点选择不同的距离公式。本文采用欧几里得距离作为K近邻的度量,并使用了一种基于kd-tree的近邻搜索算法ANN[4]来计算K近邻并构造K近邻图。为了提高计算效率和压缩存储空间,对K近邻图的邻接矩阵还采用了一种基于比特的存储方式[3],该方式对0—1矩阵的压缩比达到32∶1,降低了大型数据集计算的内存消耗。
2.2 构造K近邻团无向图
由于K近邻团是图GKNN上的等价关系,因此用来表示K近邻团的图G′的邻接矩阵是一个对称矩阵。又由定义3可知G′即是图GKNN的子图,所以对于任意的K近邻团邻接矩阵都可以通过对GKNN进行初等变换得到。因此,所有的K近邻团构成的集合也必然是GKNN的子集,且刚好覆盖了GKNN中所有的相反弧对。
通过以上分析可知,所有K近邻团构成的集合可以用GKNN与GRKNN的与操作集GKNC来表示;其中点集E保持不变,若GKNN中存在弧<ei,ej>且GRKNN中也存在弧<ei,ej>,则GKNC中存在弧<ei,ej>。用邻接矩阵MKNC表示为:
即MKNC[i,j]=MKNC[i,j]=
MKNN[i,j]&MRKNN[i,j]=
MKNN[i,j]&MKNNT[i,j]=
MKNN[i,j]&MKNN[j,i]。
因此K近邻团集合构成的图可以用对称的无向图来表示,通过图GKNN与图GRKNN的邻接矩阵进行与操作可得K近邻团无向图的邻接矩阵。同时该操作又可以去除有向图中的单边弧,减少了下一步计算的计算量。
2.3 挖掘极大K近邻团
最后利用图GKNC的邻接矩阵MKNC进行极大K近邻团的挖掘。GKNC的构造方式不但提高了计算效率,而且将对极大K近邻团的挖掘转化为GKNC上极大团的挖掘。极大团的挖掘是一个NP完全问题[6],可以利用分治策略、蚁群算法、并行交叉熵等算法来解决。本文借鉴了文献[7]描述的一种快速挖掘并枚举所有极大团的算法,该算法利用枚举树和矩阵乘法在O[M(n)]的时间延迟内完成极大团的挖掘,其中M(n)为n×n矩阵相乘的时间复杂度。算法描述如图3[7]。
2.4 算法的迭代
通过2.3节的计算,可以得到K近邻无向图中所有的极大团集合S。由于图G的复杂性,所得到的极大团集合往往是含有较多的数据集,导致结果呈现为多种类别并存,这对于聚类来说并不是一个很好的结果。根据之前分析可知,虽然数据集是零碎的,但其内聚性却相当高,也即相同极大团中的对象彼此相似度是非常大的,实验表明同一个极大团中的对象有很高的比率是属于同一个类别的。
基于以上分析,利用算法的迭代,将每个极大团看作一个新的对象重复上述算法直到得到较少的簇集。迭代过程中任意两个极大团Ci和Cj之间的距离做如式(2)定义。
选择适当的k值可以保证算法的收敛性。根据后续实验,通常迭代1—2次即可得到较好结果,从而实现具有一定簇数量的聚类划分。
2.5 算法效率分析
该算法主要包括构造K近邻图、构造K近邻团无向图、挖掘K近邻极大团以及迭代四个步骤,其中迭代算法可以看作是前三个步骤的多次执行。不难得出构造K近邻图及K近邻团无向图的时间复杂度均为O(n2),而理论上极大团挖掘算法作为一个NPC问题的时间复杂度为O(2n),采用文献[7]所述算法可将时间复杂度缩减为O(Δ4),其中Δ为K近邻团无向图的度。因此,整体算法的时间复杂度为O(n2)+O(Δ4)。
3 实验及评价
为了验证算法的有效性,首先我们构造了几种不同簇分布的二维数据集,并利用该算法进行聚类测试,对其性能及效果做出相应分析;然后我们以鸢尾花数据集作为真实数据对算法的分析结果进行验证。
在Matlab中构造了如图2所示的四个数据集对算法进行测试。其中图(a)为两个边界清晰的正态分布向量集;图(b)为两个边界较为模糊的正态分布向量集;图(c)中间为正态分布周围为均匀分布的向量集;图(d)为互相咬合的均匀分布向量集。
我们以数据集(a)为例,取不同的k值对数据进行聚类,得到结果如图5。
从图5可以看出,当k值取值较小时,会形成较多基数较小的极大团集合,从而导致数据集被割裂开来,这并不是我们所希望的,但从另一方面来看,每个极大团所包含的元素应具有较高的相似度,通过合并算法的迭代,最终可以得到基数较大、数量较少的簇构成的聚类结果。
根据以上分析,取k=50对数据集(b)、(c)进行聚类,得到结果如图6。
从图6可以看出,对于边界较为模糊的数据集该算法也具有较好的适应性,即对数据集的核心部分可以有效加以分离,对于具有类别二义性的交叉部分也可以进行有效提取,该部分的划分算法可以采用差集的方式加以提取;对于分布范围较大的数据集可以表示为若干较小的聚类簇,我们可以通过算法的迭代将其表示为一个大的聚类簇。
取k=50,图7为数据集(c)、(d)的二次迭代的划分结果。
4 总结
本文提出了一种基于K近邻团的聚类方法。该算法利用了数据集自身数据之间的关联特性构造出K近邻团矩阵,利用团结构的高内聚性保证每个近邻团内的对象之间具有较高的相似度,进而通过挖掘K近邻团对目标数据集进行聚类。算法最终可以通过迭代实现满足要求的聚类划分。
摘要:在K近邻和逆K近邻理论基础上提出了K近邻团的概念。通过度量对象间的相似度,任意两个元素都互为K近邻和逆K近邻的对象集合构成一个K近邻团。利用同一个K近邻团中的对象彼此都具有较高相似性的特点,选取不同的K值对目标集合进行聚类。通过实验证明了该方法的有效性。
关键词:K近邻,逆K近邻,K近邻团,聚类算法
参考文献
[1]孙吉贵,刘杰,赵连宇.聚类算法研究.软件学报,2008;19(1):48—61
[2]桑应宾,基于K近邻的分类算法研究.重庆:重庆大学硕士学位论文,2009
[3]魏小锐,袁瑞芬,曲超.0—1矩阵的比特存储类.东莞理工学院学报,2010;3:44—47
[4]Arya S,Mount D M,Netanyahu N S,et al.An optimal algorithm for approximate nearest neighbor searching fixed dimensions.ACM,1998;45(6):891—923
[5]Achtert E,Bohm C,Kroger P,et al.Skyline and similarity search:Efficient reverse k-nearest neighbor search in arbitrary metric spaces.ACM SIGMOD International Conference on Management of Data,2006:515—526
[6]Karp R.Reducibility among combinatorial problems.Complexity of Computer Computations1972
[7]Makino K,Uno T.New algorithms for enumerating all maximal cliques.Lecture Notes in Computer Science,2004;3111:260—272
K近邻方法 篇6
随着大数据时代的到来,多元化、复杂性数据的产生,机器学习显得尤为重要。多年来,单标签理论发展逐步成熟和广泛应用,但在现实生活中,数据样本可能拥有多个标签。比如:一则新闻可能会同时关于教育、科技、社会等多个标签。多标签学习[1]的研究主要有两大任务:多标签分类[2](Multi-label Classification,MLC)和标签排名[3](Label ranking,LR)。多标签分类是通过训练样本训练出分类器,输出未知样本对标签集中每个集合是否相关的分类结果。标签排名学习由训练集得到一个分类器,输出未知样本对标签集中每个标签相关程度的排名。在某些领域,标签分类和标签排名同等重要。例如在新闻过滤系统中[2],系统必须返回用户最感兴趣的新闻,同时将用户最感兴趣的新闻显示在最上面。理想情况下,系统可以建立一个既可以排序,又对标签进行相关判断的方法,该任务定义为多标签排序[4](Multi-label ranking,MLR)。多标签学习算法[2]主要有问题转换法(Problem Transformation)和算法改进(Algorithm Adaption)两大类。问题转换算法主要有BR(Binary Relevance)二元关系法、RPC(Ranking by Pairwise Comparison)成对比较排序法、LP(Label Powerset)标签密集法等等,而算法改进包括决策树(Decision Tree)、Boosting算法、神经网络(Neural Network)、支持向量机等等。为提高学习算法性能,在处理数据过程中往往需要对数据进行维数约简。维数约简算法包括特征选择[5]和特征提取两类,单标签领域一些算法可以直接应用于多标签学习,而一些算法经过改进后同样也可以运用于多标签学习。数据特征的选择、维数约简是决定数据挖掘方案的最重要部分,所以选择适合多标签数据集进行维数约简的算法非常重要。
1 相关工作
邻近算法(或k近邻)[1](kNN,k-Nearest Neighbor)分类算法是数据分类技术中最简单的算法。张敏灵教授和周志华教授[1]成功将kNN算法运用于多标签学习,即ML-kNN算法,成为多标签学习算法的中的经典算法。ML-kNN算法没有考虑属性特征对标签权重的影响,也未考虑标签集对属性特征的映射关系。有些属性的特征值比较小,但其影响分类的决定性比较大,如果简单采用欧式距离来计算样本的距离就很容易增大样本误分类的可能性。
根据是否利用先验知识划分,主成分分析法属于无监督降维学习方法。主成分分析法通过抽取样本的主要影响因素,简化复杂的问题。主成分分析法还被用于将高纬度数据投影到低维空间,消除数据间的冗余,提高学习算法的精度。文献[7]通过PCA对k近邻多标签学习算法的改进来实现多标签学习,提出了信息损耗率ξ和对k近邻多标签算法的改进。信息损耗率是衡量数据传输、转换过程中的完整程度,损耗率越小证明数据信息越完整。在处理数据过程中,合理控制数据的信息损耗率非常重要。
目前,多标签学习理论和应用都取得丰硕的成果。PCAIML-kNN算法就是在以往理论基础上提出的。该算法主要分两部分来改进,首先通过控制信息损耗率ξ得到样本的动态维度,进而得到特征提取后的动态样本;其次,样本距离计算加入了抽取后定义权重,多标签的评价指标优于与其它算法。该算法的主要思路是先对数据集进行维数约简,再运用改进后的ML-kNN算法对数据集进行多标签处理。
2 PCAI算法
PCAI算法基于k近邻多标签算法,并将PCA算法改进后应用于多标签学习。该改进算法的核心思想是对多标签数据集维数约简得到新数据,然后通过k近邻算法、多标签学习算法处理新数据集。与其它算法相比,该算法有效降低了多标签数据集的维数,提高了分类精度。
2.1 PCA算法
假设多标签数据集的特征向量集为X = [x1,x2,…,xn],经过PCA算法转换后的特征向量集为Y = [x1,x2,…,xn],则向量矩阵X转换成向量矩阵Y线性公式为Y= [px1,px2,…,pxn],X的协方差矩阵、Y协方差矩阵计算分别如式(1)、式(2):
比较式(1)、式(2)可知,原数据集与转换后的协方差矩阵具有相同的特征值和特征向量,样本数据在变换前后并没有改变数据的信息量。PCA改进算法具体过程改如下:
(1)向量矩阵X分解
其中,D表示协方差矩阵Σx的对角矩阵,V表示方差矩阵的对角矩阵D的特征向量。
(2)向量矩阵X奇异值
(3)信息损耗率
其中,d是向量矩阵X特征向量的个数,k是向量矩阵Y特征向量的个数,x(i)表示样本的第i个特征值,x(i)approx是向量矩阵Y的第i个特征值,‖x(i)-x(i)approx‖ 是向量矩阵X与向量矩阵Y特征值的二范数。由k个向量可以确定k个特征值
(4)向量矩阵Y
2.2 k近邻多标签学习算法改进
向量矩阵X经过PCAI算法转换成向量矩阵Y,此时转换后样本矩阵可以表示为yi= [ai1,ai2,…,aik],yj=[aj1,aj2,…,ajk]。在k近邻多标签学习算法中,在计算两个样本的距离中仅仅采用了欧式距离,欧式距离在数据样本维数比较低时比较适合,但在处理高维数据时忽略了数据样本各个特征之间的差异。在计算距离时加入了特征属性重要度,两个数据样本间的重要度可以表示为式(7),本文将特征值加入到计算特征,计算如式(8),改进后的样本间距离如式(9)。
3 实验结果与分析
本实验采用多标签精确度(Precision)、覆盖率(Coverage)、汉明损失(Hamming Loss)、One-错误率(One-Error)、标签排名(Ranking Loss)等5个评价指标。5个评价指标中精确度越大越好(用“↑”表示),其余4个评价指标越小越好(用“↓”表示)。该实验选用的算法有ML-kNN算法、PCAIML-kNN算法、FisherML-kNN算法、ReliefML-kNN算法。本实验采用Yahoo部分数据集,选取Arts、Business、Computers、Education、Entertainment 5 个数据集。5个数据集评价指标如图1~图5所示。
从图1 可以看出,与ML-kNN方法相比,PCAMLkNN算法在分类精度上提高不大,FisherML-kNN、ReliefML-kNN算法与算法PCAML-kNN相比效果显著。5个算法中,PCAIML-kNN算法在多标签数据集分类精确度上明显优于其它算法。图2~图5中,评价指标值越小其相应的评价指标性能越好。需注意的是,各个指标采用平均值和方差的形式,在上述4个评价指标中可以看出,上述方法在处理相同数据集时,方差差异不大,即比较稳定。从平均值来看,PCAIML-kNN与其它算法相比,在覆盖率、汉明损失、one-错误率、排名损失评价指标中值最低,相比而言,算法最好。
4 结语
本文利用PCA对k近邻多标签学习算法(ML-kNN)进行改进,引入信息损耗率,对k近邻多标签学习算法距离进行改进。实验结果证明,与其它多标签分类算法相比,该算法提高了多标签的评价指标性能,在数据分类、标签排序等方面比较突出。本文不足之处在于信息损耗率未能得到理论及实践证明,未能与其它无监督学习算法进行比较。后续将研究具体领域多标签学习,提高样本分类精度、降低时间与空间复杂度。
参考文献
[1]ZHANG M L,ZHOU Z H.ML-KNN:a lazy learning approach to multi-label learning[J].Pattern Recognition,2007,40(7):2038-2048.
[2]TSOUMAKAS G,KATAKIS I.Multi-label classification:an overview[J].International Journal of Data Warehousing&Mining,2007,3(3):1-13.
[3]GENG X,LUO L.Multilabel ranking with inconsistent rankers[C].Computer Vision and Pattern Recognition(CVPR),2014IEEE Conference on.IEEE,2014:3742-3747.
[4]BUCAK S S,MALLAPRAGADA P K,JIN R,et al.Efficient multilabel ranking for multi-class learning:application to object recognition[C].Computer Vision,2009IEEE 12th International Conference on.IEEE,2009:2098-2105.
[5]苏映雪.特征选择算法研究[D].长沙:国防科学技术大学,2006.
[6]FODOR I K.A survey of dimension reduction techniques[J].Perpinan,2003,volume 205:351-359(9).
K近邻方法 篇7
在数据挖掘领域中,分类是一个非常重要的问题,是当前研究的热门。针对分类的问题,国内外都有比较深入的研究。其中成熟的分类算法有如决策树、基于向量空间模型的K-近邻分类、关联规则分类、神经网络、遗传算法、朴素贝叶斯等。在众多的分类算法中,朴素贝叶斯算法由于有着深厚的数学理论研究基础,以及其计算高效简单、有效而在众多应用中所运用。朴素贝叶斯算法是基于这样一个简单的假定:即分类特征属性之间都是条件独立的。用权值的概念表示就是各个属性之间的权值都是相等的,不存在差异。但是在应用环境中,特征类属性之间的关系很少是独立的,不满足实际的需求。针对这种情况,国际上很多学者都对此提出了各自的解决方案,比如,学者Zhang Harry提出了根据属性的重要性给不同属性赋不同权值的加权贝叶斯WNB(Weighted Native Bayesian),他给出了爬山算法和Monte Carlo技术确定权值的加权朴素贝叶斯算法,这些算法确实有了很大的改进,但是对于大数据集,朴素贝叶斯在整个训练集上,分类性能并不能得到很大的提高。我们期望能在局部的数据集上得到一定的释放。
本文通过对K-近邻法的深度研究,综合考察了朴素贝叶斯的分类算法的特点,通过K-近邻法先对测试样本分类,然后在测试的实例领域内构建贝叶斯分类器。提出了基于K-近邻法的局部加权朴素贝叶斯分类算法,并通过实验数据证明了该算法的合理性、可靠性,最终提高了分类的准确率。
1 K-近邻法的相关概念
K-近邻法是一种常用的基于距离的度量方法。训练样本是n维的数值属性描述。每个样本是n维数值空间中的一个点。所有的训练样本都存放在n维模式空间中。当给定一个未知样本时,K-近邻法搜索整个模式空间,找出最近接近未知样本空间的k个训练样本。这k个训练样本就是未知样本的k个“近邻”。“近邻”之间的定义是用欧几里德距离定义,欧几里德距离定义是这样定义如下:若空间中存在两个点x={x1,x2,…,xn},y={y1,y2,…,yn},那么这两个点的距离是:
在比较距离时,我们不必计算平方根,直接使用平方和来比较就可以。在使用该欧几里德距离函数来判断训练集中的哪个实例与一个未知的测试实例最靠近时,我们一旦找到最靠近的训练实例时,那么最靠近实例所属的类就被预测为测试实例的类,未知样本被分配到k个最邻近者中的最公共的类。当k=1时,未知样本被指定到模式空间中与之最邻近的训练样本类。
2 朴素贝叶斯分类器
贝叶斯分类是基于贝叶斯公式的,即:
P(HX)=P(XH)P(H)/P(X) (2)
其中P(XH)代表假设H成立的情况下,观察到X条件概率。P(H)是先验概率,或称H的先验概率,表示在任何数据样本出现证明之前假设H的概率。P(HX)是后验概率,或称条件下H的后验概率。朴素贝叶斯的分类说明步骤如下:
(1) 把每个数据样本数值化,用一个n维特征向量X={x1,x2,…,xn}表示样本属性的n个度量。
(2) 假定有m个类C1,C2,…,Cm。给定一个待分类的样本X,根据贝叶斯定理可得样本X的概率为:
P(Ci
(3) 由于P(X)对所有类都是常数,即只需P(XCi)P(Ci)最大。如果类的先验概率未知,则通常这些类是等概率的。即P(C1)=P(C2)=…=P(Cm)所以只需P(XCi)为最大。
(4) 为了计算P(XCi),我们通常做类条件独立的朴素假定。给定类的标号,假定属性值条件相互独立,则:
P(X
即概率P(X1Ci),P(X2Ci),…,P(XnCi)由训练样本估计,其中:
a) 如果Ak是分类属性,则:
P(XkCi)=Sik/Si (5)
其中Sik是在属性Ak上具有值Xk的类Ci的训练样本数,而Si是Ci中的训练样本数;
b) 如果是连续属性,则通常假定该属性服从高斯分布。因而:
P(Xk
其中给定类样本的Ci的训练样本属性值Ak的值,g(xk,uci,σci)是属性Ak的高斯密度函数,而uci,σci分别为平均值和密度差。
(5) 对未知样本X分类,计算P(XCi)P(Ci),比较P(XCi)P(Ci)与P(XCj)P(Cj),如果P(XCi)P(Ci)>P(XCj)P(Cj),则X被分到Ci类中,反之则分到Cj类中。
3 K-近邻局部加权朴素贝叶斯分类算法
K-近邻局部加权的朴素贝叶斯K-LWNB(K-Locally Weighted Naive Bayes)。它首先应用k-近邻算法找到测试实例的k个邻居,然后应用线性方法来给每个邻居加权,最后在加权后的邻域内构建朴素贝叶斯分类器。K-LWNB算法于K-近邻算法一样是一种k相关的学习算法,要求用户在使用的时候自己认为地输入学习参数k,并且k的取值在一定程度上影响了它的分类性能。所以对于k的选择是相当重要的。本文提出了一种选择邻域大小的朴素贝叶斯模型,该模型为每一个测试实例在具有不同大小k值的数值邻域上学习一组朴素贝叶斯分类器,然后在其中选择一个最高分类准确度的朴素贝叶斯器来分类测试实例。在设计具体算法的时候,我们输入的数据包括有:领域的最大值Kmax、领域最小值Kmin以及训练实例集T;算法输出的数据就是Kbest;
具体算法伪代码描述如下:
4 实验结果
为了验证该算法的有效性,对该算法进行了实例的有效测试,实验中所选用的所有数据都来自于UCI公共数据库。本实验从UCI公共数据库中挑选了十个数据集作为测试数据。这些数据集的基本信息如表1所示,在这些数据中,为了达到更为准确的结果,使用的所有数据的连续属性值都进行了离散化处理,并且实验采用的十次交叉验证法。实验所采用的软件平台是:Windows XP操作系统,weka3.5.8版本数据挖掘工具,硬件平台是:双核T2060 1.6G Hz CPU,2GB内存。
在本实验所用的数据实例中,实验结果表明K-LWNB算法的分类准确率要优于NB算法,在十个实例中,八个实例运行后的精度都要高于NB算法。算法通过计算每个数据集的不同属性值与类别之间的相关性,然后使用K-近邻法得出K个最优邻居,最后用线性的方法给这些邻居加权,即各个相关属性获得了加权系数。最后分类的时候对后验概率计算公式中的每个概率项进行加权修正并最终得出分类结果。从实验结果可以看出,使用K-LWNB算法对属性进行加权分类,更加有效地利用了样本数据信息和属性与类别间的关联性。但值得注意的是在十个实例数据分类中,有两个实例数据分类的准确率小于NB算法,分析发现,这两例实例数据条件属性比较多,K-LWNB算法分类能力与NB算法相比略有下降。可能是因为属性值过多,导致每个属性值所得的加权系数都比较小,而不能真正发挥出自己的作用,但这与理论分析是一致的,在一定的误差范围之内。另一方面就是在算法的运行时间上,K-LWNB算法由于要计算找K个领域,因此要高于NB算法,但不影响分类结果。综上所述,K-LWNB算法是有效的。
5 结 语
条件独立性假设在很大程度上影响了朴素贝叶斯的分类性能,实际上,在现实的生产环境中,对于属性之间条件独立是很少的。但是,由于朴素贝叶斯对于条件独立性的属性分类又是极其优秀的。所以,针对这种情况,本文进行了算法的改进。从局部来释放这种条件独立性的假设,最后从实验得出的数据可以看出,该算法确实提高了分类性能。但是,由于无关属性在多数机器学习方案中存在负面影响,通常在学习之前先进行属性选择,只保留一些最为相关的属性,而将其他属性都去掉,选择相关属性最好的方法是人工选择,通过去除不适当的属性以降低数据的维数,能改善学习算法的性能。还能提高速度,即使属性选择可能会带来很多计算。更重要的是,维数降低形成一个更为紧凑、更易理解的目标概念表达式,使用户的注意力集中在最为相关的变量上。在这个算法中,前期实验准备也进行了人工属性选择,这样对整个算法的执行效率就更为准确有效。最后,论文中用UCI数据库中的10数据集作为测试数据,通过实验比较了朴素贝叶斯分类算法与K-近邻局部加权的朴素贝叶斯分类算法的分类性能,实验结果表明,使用K-近邻局部加权的朴素贝叶斯算法在一定的条件下,分类性能有了明显的提高。
参考文献
[1]Hall M.A decision tree-based attribute weighting filter for Nave Bayes[J].Knowledge-Based Systems,2007,20(1):120-126.
[2]Zheng Z,Webb G I.Lazy learning of Bayesian rules[J].MachineLearning,2000,41(1):53-84.
[3]Kelly D,Tangney 13.Adapting to Intelligence Profile in an AdaptiveEducational Aystem[J].Interacting with Computers,2006,18(3):385-409.
[4]Harry Z,Sheng S.Learning Weighted Naive Bayes with Accurate Rank-ing[C]//Fourth IEEE International Conference on Data Mining(IC-DM’04),2004:567-570.
[5]Chickering DM.Learning Bayes networks is NP-complete[M]//Learn-ing from Data:AI and Statistics V.New York:Springer,1996:121-130.
[6]韩家炜.数据挖掘:概念与技术[M].北京:机械工业出版社,2001.
[7]蒋良孝.朴素贝叶斯分类器及其改进算法研究[D].中国地质大学,2009.
[8]秦锋,任诗流,罗慧.基于属性加权的朴素贝叶斯分类算法[J].计算机工程与应用,2008,44(6):107-110.
[9]邓维斌,王国胤,王燕.基于Rough Set的加权朴素贝叶斯分类算法[J].计算机科学,2007(2):204-206.
[10]程克非,张聪.基于特征加权的朴素贝叶斯分类器[J].计算机仿真,2006,23(10):92-94.
[11]王双成,苑森淼.具有丢失数据的贝叶斯网络结构学习研究[J].软件学报,2004,15(7):1042-1048.
【K近邻方法】推荐阅读:
K近邻算法06-07
K近邻团11-03
改进K近邻算法06-24
K-最近邻聚类算法06-07
近邻传播07-23
最近邻查询11-06
远亲不如近邻六年级作文06-01
K值确定方法08-05
写作方法(叙述方法)09-14
科学方法与创新方法07-01