一、聚类和聚类算法
聚类,就是将数据对象划分成若干个类,在同一个类中的对象具有较高的相似度,而不同的类相似度较小。聚类算法将数据集合进行划分,分成彼此相互联系的若干类,以此实现对数据的深入分析和数据价值挖掘的初步处理阶段。例如在现代商业领域,聚类分析算法可以从庞大的数据集合中对消费者的消费习惯、消费倾向,以方便决策者制订消费策略。总之,作为数据挖掘中的一个模块,聚类分析算法可以作为一个单独的工具已发现数据库中分布的一些深层信息,并概括出每一类的特点。聚类分析算法也可作为数据挖掘算法中其他分析算法的一个预处理步骤。
在数据挖掘领域,聚类分析算法可以分为一下几个大类,包括划分法、层次法、基于密度的方法、基于网络的方法和基于模型的方法。基于划分的基本思想就是通过迭代的方法将含有N个数据对象的数据集分成K个聚类。具体的步骤就是,用户先给出要划分的个数,然后通过一定的算法反复的进行迭代,使得每次得到的分组比前一次更加接近预期目标,是否优化的判定标准是同组数据之间不同数据之间的相似程度,同组数据相似程度越大,组间似程度越小越优化。
K-means聚类算法的核心思想就是基于对数据集合的划分,它把N个数据对象划分成K个类,使每个类中的数据点到该聚类中心的距离平方和最小。下面我将利用C语言来实现K-means算法,并对该算法在输入不同的聚类个数、改变数据点的密集程度以及初始聚类中心点的选择三个方面来测试该算法。
二、K-means算法实现步骤
通过对聚类和K-Means算法思想的了解,C语言算法的实现过程如下:
(1)通过文件输入N个数据点,并选取其中K(K<N)个数据点作为初始聚类中心;
(2)对剩余的数据点分别计算到各个聚类聚点中心的欧氏距离,并将该点划分到最近的类中;
(3)重新计算各个聚类的聚点中心;
(4)与之前的聚类中心比较,如果聚类中心发生变化,转到(2),否则结束迭并输出结果。
三、K-means算法实现
(一)实现思路
通过以上对K-means算法的了解,该算法主要是通过迭代的思想来求解K个聚类的中心。由于传统数组需要先定义再使用,且在使用的过程中不能实现数组长度的动态增长。同时考虑到设计该算法时,没有涉及到在迭代过程中各个数据点的插入和删除,各个数据点具体划分到那个聚类中,是由结构体成员变量中的className来标识,因此选用了Vector来作为存储数据的容器,这样当从文件输入大量数据时,由程序自己开辟需要的存储空间。同时,也可通过Vector向量容器提供的size和迭代器方法,实现遍历并按照所在聚类进行输出。










