基于密度半径的改进K-means聚类算法的制作方法

文档序号:15462977发布日期:2018-09-18 18:37阅读:228来源:国知局

本发明涉及聚类算法领域,特别涉及基于密度半径的改进K-means聚类算法。



背景技术:

聚类是将一些物理的或抽象的对象,根据对象之间的相似程度将其划分为若干个簇类,使同一个簇类中的数据具有较高的相似性,不同簇类内的数据相似性低。聚类是一种无监督的学习方法,在没有先验信息的前提下,将没有标记的数据进行分类。K-means算法是聚类分析中最常用的一种典型的划分算法,该算法是根据数据某种相似性度量方法进行划分,使每个数据到它所属的簇类质心的距离尽可能的小,该算法由于其简单、效率高等优点被广泛应用。但与此同时它还存在一些缺陷,例如需要预先设定聚类的数目(k值),k值选取不准确可能会导致分类不准确;初始值的取值具有随机性,容易导致局部最优解的情况;它对噪声和离群点比较敏感,也会影响到最后聚类的结果。



技术实现要素:

本发明要解决的技术问题是:提供一种基于密度半径的改进K-means聚类算法,解决现有K-means聚类算法存在的局部最优解、对噪声和离群点比较敏感、k值选取不准确问题。

为解决上述问题,本发明采用的技术方案是:基于密度半径的改进K-means聚类算法,包括如下步骤:

A.计算样本数据集T内所有样本点两两之间的距离;

B.指定一个密度半径d,根据密度半径d以及样本点两两之间的距离求出每个样本点在密度半径d内的所有的样本点;

C.根据各样本点在密度半径d内样本点的数目对样本数据集内的样本点排序,从而得到将排序后的数据集T,;

D.定义一个空的集合S,将数据集T’中第一个样本点放入集合S中,并将数据集T’中第一个样本点以及其一个样本点密度半径d内的所有样本点从数据集T’中删除,;

E.重复执行步骤D,直到集合当集合时,集合S中的样本的个数即为K-means聚类算法可能的k值,集合S中的值即为K-means聚类算法可能的初始值;

F.将集合S看作质心集合,质心集合中每个初始值即为不同的类别质心,计算样本数据集T内所有样本点与质心集合中各类别质心的距离,并标记样本数据集T内每个样本点的类别为与该样本点距离最小的质心的类别;

G.利用各类别内所有的样本点重新计算出各类别新的类别质心,从而更新质心集合;

H.判断更新后质心集合内的质心与样本数据集T内的样本点之间的误差平方和准则函数是否收敛,若收敛且更新后质心集合相对于更新前没有发生变化则直接进入步骤I;否则,重复步骤F和G,直到误差平方和准则函数收敛且质心集合更新后再无变化,进入步骤I;

I.求出质心集合内所有质心两两之间的距离,并选择距离最小的两个质心,将距离最小的两个质心所在的两个类别单独拿出来;

J.判断步骤I单独拿出来的两个类别是否需要合并,若不需要合并,则算法结束;若需要合并,则将步骤I单独拿出来的两个类别合并,并计算合并后类别的质心,同时将步骤I选择的两个质心从质心集合中删除,并将合并后类别的质心放入质心集合,同时跳转步骤I。

进一步的,步骤J判断两个类别时需要是否应该合并的方法包括:

将待判断的两个类别看成一个二分聚类中两个类,计算出二分聚类的BIC值,记为BIC score2;

将待判断的两个类别看成一个整体类别,计算出该整体类别的BIC值,记为BIC score1;

若|BIC score1|≥|BIC score2|,则待判断的两个类别需要合并;若|BIC score1|<|BIC score2|,则待判断的两个类别不需要合并。

进一步的,BIC值的计算公式为:

BIC=-2×ln(L)+ln(s)×t

其中,s表示数据集中样本点的数目;L表示似然函数;t表示特征数目,当计算所述二分聚类的BIC值时t=2,当计算所述整体类别的BIC值时t=1。

进一步的,步骤A之前还包括:对样本数据集进行去除噪声和离群点处理;步骤K之后还包括:计算离群点与类别质心之间的距离,将离群点标记为与之距离最近的质心的类别。

进一步的,采用lof方法对样本数据集进行去除噪声和离群点处理。

进一步的,在对样本数据集进行去除噪声和离群点处理之后,且步骤A之前,还包括对样本数据集归一化,样本数据集归一化后的样本坐标为xi.j,

其中,m表示样本点的个数,v表示维度。

进一步的,步骤A、F及I在计算距离时采用欧几里得距离公式计算,公式如下:

进一步的,步骤G计算质心坐标的公式为:

其中,Zi表示第i个质心的坐标。

进一步的,步骤H中,质心集合内的质心与样本数据集T内的样本点之间的误差平方和准则函数的公式为:

其中,k质心集合中的质心个数,Zj表示第j个质心。

本发明的有益效果是:本发明主要通过密度半径来选取聚类的初始值,密度越大说明该样本点越容易是类别质心,因此首先按照密度半径对所有样本点进行排序,选取密度半径最大的样本点作为初始值,并删除所有在该半径内的样本点,然后再重复上述步骤,选出所有的初始点以及类别数量k,并进行聚类操作。由于本发明求出来的初始值会覆盖所有密度较高的点,因此求出来的k值是大于等于真实的k值,因此需要进一步确定k值。从聚类后的类别质心中选出距离最近的两个质心,将这两个质心所在的类别单独拿出来看成一个二分类,并计算其二分类的贝叶斯得分,然后将这个两个类别合并为一个类别,并计算合并后的贝叶斯得分,再根据得分判断是否需要合并这两个类别,重复上述步骤直到不用合并为止。由于该方法最初会覆盖所有密度较高的点,因此很好的解决的了现有聚类算法存在的局部最优解的情况。

附图说明

图1为本发明对初始数据集进行处理流程图;

图2为本发明根据密度半径初步确定k值及初始值流程图;

图3为本发明初步聚类流程图;

图4为本发明类别(k值)优化流程图;

图5为本发明总体流程图。

具体实施方式

本发明主要是为了克服现有的一些聚类算法存在的不足,提出了一种新的聚类算法,它可以解决现有聚类算法存在的局部最优解、对噪声和离群点比较敏感、k值选取不准确等问题。本发明主要包括:对初始数据集进行处理、根据密度半径初步确定类别个数k值以及初始值、聚类并确定质心数几个步骤。以下结合图1-4对本发明采用的技术方案进行详细说明。

一、对初始数据集进行处理。

由于初始数据集中的样本点可能存在一些噪声和离群点,而这些点对初始值和k值的选取有着很大的影响。因此在聚类之前应该先去掉这些离群点,对剩下的样本点进行聚类,最后再根据聚类的情况将这些离群点加入对应的类别中。去除离群点的操作将使用lof算法进行,即通过比较每个点与其领域点的密度来判断该点是否是离群点,如果该点的密度越低越有可能被认定为离群点。而密度,则是通过点的第k距离领域来计算的,第k距离领域即点p的第k距离以及第k距离以内的所有点的个数。因此密度越高,距离越近,密度越低,距离越远。再从中选取密度低的离群点,并去除这些离群点。

然后为了将所有的数据限制在一定的范围内,方便后面计算,对剩下的样本点进行归一化处理,使所有样本点的在每个维度上的坐标在[0,1]之间。

归一化完成后将计算样本点之间的距离,并计算出距离每个样本点距离小于一定范围内的点的数量,该距离即为密度半径。然后再根据此数量从大到小的顺序重新对样本点进行排序。综上,本发明对初始数据集进行处理流程如图1所示。

二、根据密度半径初步确定类别个数k值以及初始值。

本发明确定初始点的基本方法是根据密度进行选取,即上一步中距离每个点密度半径内的点的数目。密度越大的说明该点越容易是类别质心。根据上述思想,将样本点按照前面排序的情况,排在第一位的样本点即密度最大的点集中心,将此样本点定为其中一个初始值,并将该密度半径内的所有点删除。删除后再重复上述操作,即从剩下的样本点中选取密度最大的样本点,并删除该密度半径内的所有点,直到数据集为空。此时选择出来的点初步定为初始点,其个数定为类别个数k值。综上,本发明初步确定k值及初始值流程如图2所示。

三、聚类并确定质心数

根据上述步骤计算出来的k值点会覆盖所有密度较高的点,即本应该属于同一类的样本集被划分成了多个类。因此求出来的k值是大于等于真实的k值(类别数量),因此需要对k值范围进行缩小。

首先按照上面步骤获取的k值和初始值对样本点进行初步聚类,初步聚类的流程如图3所示,从而初步聚类后求出新的类别质心。初步聚类的流程如图3所示,包括:①计算样本数据集T内所有样本点与质心集合中各类别质心的距离;②标记样本数据集T内每个样本点的类别为与该样本点距离最小的质心的类别;③利用各类别内所有的样本点重新计算出各类别新的类别质心,从而更新质心集合;④判断更新后质心集合内的质心与样本数据集T内的样本点之间的误差平方和准则函数是否收敛,若收敛且更新后质心集合相对于更新前没有发生变化,则结束初步聚类;否则重复步骤②和③,直到误差平方和准则函数收敛且质心集合更新后再无变化,结束初步聚类。

由于如果属于同一类的样本集被划分为了多个类,他们的的质心距离也会比较近,因此需要进行类别优化,如图4所示,本发明先计算出所有质心之间的距离,再在距离最近的两个质心所在的样本集单独拿出来,将其看成是一个二分类,并计算其二分类的BIC score。然后再将这两个类别合并为一个类别,并计算其BIC score。根据两次计算的BIC score,判断这两个类别是否应该合并。若合并则循环执行上述步骤,否则此时的类别划分即使最优的划分。由于最初的初始值点会覆盖所有密度较高的点,然后再逐步进行优化,因此通过此方法能很好的解决现有的一些聚类方法存在的局部最优解的情况。

最后再将之前去除掉的离群点加进来,通过计算离群点与类别质心之间的距离,将离群点标记为与之距离最近的质心的类别。

结合以上说明,最终得到如图5所示的整体流程图。

实施例

实施例提供一种基于密度半径的改进K-means聚类算法,包括如下步骤:

1、数据集准备,设数据集中有m个样本点,每个样本点都是v维度,其中v∈Z*。数据集记为T={n1,n2,…,nm},其中ni表示样本点,m表示样本点的个数,样本点ni的坐标记为(xi,1,xi,2,…,xi,v),v表示维度;

2、数据预处理:用lof方法去除噪声和离群点;

3、将数据进行归一化处理:将样本点的每一维度坐标都除以相应维度上样本点坐标的最大值,计算公式如(1)所示,使归一化后的样本坐标xi.j∈[0,1],

4、归一化处理后,计算所有样本点两两之间的欧几里得距离,其中,第i个样本点ni与第j个样本点nj之间的距离d(ni,nj)计算公式如(2)所示,

5、指定一个密度半径d,根据密度半径d以及样本点两两之间的距离求出每个样本点在密度半径d内的所有的样本点,包括样本点的值和数目,将样本点ni周围密度半径内的所有点个数记为

6、根据各样本点在密度半径d内样本点的数目对样本数据集内的样本点从高到低进行排序,从而得到将排序后的数据集T’,记做T’={n’1,n’2,…,n’m},其中T’=T;

7、定义一个空的集合S,用于存放可能的初始值,将数据集T’中第一个元素n’i(第一次执行时即为n’1)放入集合S中,并将第一个元素n’i以及其密度半径d内的所有样本点从数据集T’中删除,其中,元素n’i的密度半径d内的所有样本点即所有与n’i距离小于的样本点n’j,j∈[2,m];

8、从删除后的数据集T’再次选取新的第一个元素n’i,如此重复执行步骤7,直到集合当集合时,此时集合S中的样本的个数即为K-means聚类算法可能的k值,集合S中的值即为可能初始值,记此时集合S={s1,s2,…,sm’},其中m’≤m;

9.将集合S={s1,s2,…,sm’}看作质心集合,质心集合中每个初始值即为不同的类别质心,采用欧几里得距离公式计算样本数据集T内所有样本点ni与质心集合中各类别质心的距离,并标记样本数据集T内每个样本点的类别为与该样本点距离最小的质心的类别;

10、利用各类别内所有的样本点重新计算出各类别新的类别质心,从而更新质心集合S,质心坐标的公式为:

其中,Zi表示第i个质心的坐标;

11、判断更新后质心集合S内的质心与样本数据集T内的样本点ni之间的误差平方和准则函数是否收敛,若收敛且更新后质心集合S相对于更新前没有发生变化则直接进入步骤12;否则,重复步骤9和10,直到误差平方和准则函数收敛且质心集合S更新后再无变化,进入步骤12;

其中,质心集合内的质心与样本数据集T内的样本点之间的误差平方和准则函数的公式为:

式中,k质心集合中的质心个数,Zj表示第j个质心。

12、采用欧几里得距离公式求出质心集合内所有质心两两之间的距离,并选择距离最小的两个质心,将距离最小的两个质心所在的两个类别单独拿出来;

13、判断步骤12单独拿出来的两个类别是否需要合并,若不需要合并,此时质心集合S中的个数即为类别个数,质心集合S中的值即为类别质心,继续进入步骤14;若需要合并,则将步骤12单独拿出来的两个类别合并,并计算合并后类别的质心,同时将步骤12选择的两个质心从质心集合S中删除,并将合并后类别的质心放入质心集合S,同时跳转步骤12;

本步骤中,判断步骤12单独拿出来的两个类别合并的方法如下:

i.将待判断的两个类别看成一个二分聚类中两个类,计算出二分聚类的BIC值(贝叶斯得分),记为BIC score2;

ii.将待判断的两个类别看作一个整体类别,计算出该整体类别的BIC值,记为BIC score1;

步骤i和ii在计算BIC值时,其计算公式为:BIC=-2×ln(L)+ln(s)×t,其中,s表示数据集中样本点的数目;L表示似然函数;t表示特征数目,当计算所述二分聚类的BIC值时t=2,当计算所述整体类别的BIC值时t=1;

iii.若|BIC score1|≥|BIC score2|,则表明步骤12单独拿出来的两个类别需要合并;若|BIC score1|<|BIC score2|,则表明步骤12单独拿出来的两个类别不需要合并;

14、最后再将之前去除掉的离群点加进来,通过计算离群点与类别质心之间的欧式距离,将离群点标记为与之距离最近的质心的类别。

以上描述了本发明的基本原理和主要的特征,说明书的描述只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。

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