欢迎来到天天文库
浏览记录
ID:38691044
大小:195.79 KB
页数:8页
时间:2019-06-17
《Kmeans聚类算法以及实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、.Kmeans聚类算法以及实现一、Kmeans算法 k-means算法接受参数k;然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。 假设要把样本集分为c个类别,算法描述如下:
2、(1)适当选择c个类的初始中心; (2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类; (3)利用均值等方法更新该类的中心值; (4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式二、算法流程首先从n个数据对象任意选择k个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心
3、(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数.k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。Kmeans算法实现的步骤具体描述为:..(1)从疗个数据对象中任意选取k个对象作为初始的聚类中心。(2)分别计算每个对象到各个聚类中心的距离,把对象分配到距离最近的聚类中。(3)所有对象分配完成后,重新计算k个聚类的中心。(4)与前一次计算得到的k个聚类中心比较,如果聚类中心发生变化,转(2),否则转(5)。(5)输出聚类结果。实现的流程框图为首先从n个数据对象中任意选择k个对象作为
4、初始聚类中心;而对于所剩下的其它对象,则根据他们与这些聚类中心的相似度(距离),分别将他们分配给与其最相似的(聚类中心所代表的)聚类。然后再计算每个所新聚类的聚类中心(该聚类中所有对象的均值)。不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数,具..体定义如下:其中E为数据库中所有对象的均方差之和;p为代表对象的空间中的一个点;m,为聚类G的均值(p和m,均是多维的).上述公式所示聚类标准旨在使所获得的k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类间尽可能的分开。三、设计实现K-Means算法是聚类算法的一种,它通过计算样本
5、数据点之间的逻辑距离来判断某个样本数据点属于哪一个簇,算法最终的目的是要把用于算法的样本数据点分配到K个簇中,使簇内的点有较大的相似度,而簇间的点有较小的相似度。K-Means中的K表示聚类中心的个数,在算法运行过程中,要反复扫描所有样本数据点,要计算每个非中心数据点与某个聚类中心点的距离,并将这个数据点归为与其距离最小的那个聚类中心对应的簇之中。每扫描一次就要重新计算每个聚类中心点的位置。当聚类中心点的位置变化在一定的阈值之内的时候停止处理,最后就可以得到K个簇,并且簇中每个样本数据点到本簇的中心的距离都小于到其它簇中心的距离。本程序使用C++实现算法本身,然
6、后用C#调用C++函数完成了数据的传送和接收算法的输出并可视化结果。并且数据是保存在Access数据库中的一个sample表格中然后通过字符串连接数据库读入数据也可以使用其他数据库,例如sqlserver,修改相应的字符串连接语句即可。下面主要介绍一个导出的函数DataMining_KMeans,这个函数要接收C#传过来的原始数据、K值及其它参数,同时还要将处理的结果赋值给引用参数以便在C#中可以接收到处理结果。DataMining_KMeans函数的原型如下:/* * @Author:YinPSoft * @param: * raw: 原始数据 ..* cou
7、nt: 数据点个数 * K: 聚类中心个数 * means: 初始聚类中心 * minOffset: 聚类中心的最小偏移量,用于控制聚类处理的精度。 * times: 最大迭代次数* c:每个聚类的数据点索引值 * sizes:每个聚类的容量 * finalMeans:最终的聚类中心位置 */ void DataMining_KMeans(double* data,int count, int K, int* means, double minOffset, int times, int* c, int* sizes, double* finalMeans);
8、在这个原型声明中可以看到
此文档下载收益归作者所有