K-means算法研究综述
聚类被认为是机器学习中最常使用的技术之一, 它历史悠久、应用广泛,几乎应用于环境学、医学、生物学、天文学、经济学等各个领域。其中K-means是最为常用的聚类算法。现在我们来详细介绍一下K-means算法。
1 K-means算法简介
K-means算法(Lloyod,1982)是简单而又有效的统计聚类算法,使机器能够将具有相同属性的样本归置到一块儿。与分类不同,对于一个分类器,通常需要告诉它“这个样本被分成哪些类”这样一些标签,在最理想情况下,一个分类器会从所得到的训练集中进行“学习”,我们将这种提供训练的过程称为“监督学习”。但是在聚类下,我们并不关心某一类是什么,我们的目的是想将相似的样本归置在一起,这样,一个聚类算法通常只要知道该如何计算样本间的相似度并将相似样本归并到一起就可以操作了,因此聚类通常并不需要使用训练数据进行学习,这在机器学习中被称作“无监督学习”。K-means算法就是这种用于统计的无监督聚类技术。
2K-means算法介绍
K-means算法主要用于处理下图1中的问题。我们可以看到,在图的左边有一些点,此时,我们用肉眼可以看出有三个点群,但是,我们如何让机器识别出这几个点群来呢?于是就出现了我们需要的K-means算法。
图1 K-means算法示意图 Fig1 Illustration of K-means
K-means算法的基本思想是:将N个对象划分到K个簇中,聚类结果要使得相似度较高的对象划分到同一类簇,而差异较大的对象存于不同类簇。
K-means算法的基本流程如下表1所示。
表1K-means算法步骤 Tab.1Training steps of K-means
K-means:
输入:训练样本V={v(1),v(2),…,v(n)},v={v1,v2,…,vni},k:聚类个数; 输出:C={C1,C2,…,Ck};
步骤1 在数据集中随机选取K个对象作为初始聚类中心??1,??2……????;
步骤2 计算数据集中每个对象到聚类中心的距离,选取最小距离min|v- ????|,分配到聚类中,其中v={v1,v2,…,vn},j=1,2……k;
步骤3 计算每个聚类中的所有对象均值,将此均值作为新的聚类中心,????=
1????
?? ??=1????,????为第j类中对象的个数,j=1,2,……k;
??
??步骤4 如果每个簇的聚类中心不再发生变化,聚类准则函数????= ????=1 ??=1|????
??
??
?????|收敛,
则算法结束。否则返回步骤2继续迭代。
3K-means算法优缺点
K-means算法操作简单、运算速度较快,能够有效处理中小型数据集。但同时K-means算法也有不足之处,包含以下几点:
(1) 聚类结果不确定
K-means算法初始聚类中心是随机选择的,初始中心点选取的好坏会导致最终聚类效果。选取不同初始聚类中心,会使得最终聚类得到的类簇发生变化。除此之外,K-means算法一般采用准则函数为目标函数,准则函数中只存在一个全局最小值和N个极小值,这使得算法运算过程中,会陷入局部极小值,导致最终得到的不是全局最优解。
(2) 聚类个数不确定
K-means算法中K表示聚簇个数,K的取值决定聚类结果。K值的选取需要根据实际的需求来确定,但通常情况下我们并不知道需将数据集聚为多少个类簇最合适,所以针对K值的选取依然有待解决。
(3) 数据量大、算法时间复杂度较高
K-Means算法的计算过程是一个不断迭代的过程,为寻找合适的聚类中心,需要不断的计算和调整才能对数据对象进行有效的聚类。这个过程中反复进行大量的对象间距离的计算,所以K-Means聚类过程会消耗大量时间,降低聚类运算效率。
4K-means算法变形
(1) K中心点算法
传统K-means算法在求出聚簇后对簇内的点取平均值,若该簇形成的图像较为狭窄或其图像并不均匀,使用平均值生成的点极有可能会偏离聚簇本身,所以该方法希望通过求生成的簇的重心,以保证生成的中心点不会偏离聚簇本身并能够更好代表整个聚簇。
(2) 高斯随机初始中心点方法
传统K-means算法在初始化K个中心点时使用数据集的前K个样本作为中心点或使用默认的随机化方法初始中心点,这里采用高斯随机化方法从数据集中取K个点作为中心点,可使得聚簇内更加紧密。
(3) 基于最小生成树的K-means算法
通过Kruskal方法找到图中距离最近的两点之间的中心点,再将该中心点放入数据集中,并两点从数据集中删除,形成新的数据集合。然后利用Kruskal算法找新的数据集中的最短距离,重复以上步骤直到数据集中仅剩下K个点则结束,这K个点就是初始聚类中心点。该方法使用最小生成树自动生成K个聚类中心,可有效解决传统K-means算法因初始聚类中心选取的随机性引起的局部最优问题,提高聚类效果。
5结论
经过数十年的发展,聚类问题已被研发出多种算法,但K-means算法依旧活跃于前线,被广泛应用于各类领域。通过研究K-means算法,我们可以看出:一个真正伟大的算法不是因为它有多么复杂,而是它能够用最简单的原理解决最复杂的问题。因此,我们需不断努力,研究出更多实用的算法。
参考文献
[1] Mitchell, T.M. MACHINE LEARNING[M]. 北京:机械工业出版社2003.1 [2] 李航. 统计学习方法[M].北京:清华大学出版社,2012.3 [3] 周志华.机器学习[M].北京:清华大学出版社,2016.1
[4] Peter Harrington. 机器学习实战[M]. 北京:人们邮电出版社, 2013,6
[5] 蒋宗礼, 杜倩. 基于聚类和项目相似性的Slope One算法优化[J]. 计算机与现代化, 2016(8):22-26
汇报人:王一大