博主最近实习开始接触数据挖掘,将学习笔记分享给大家。目前用的软件是weka,下篇文章会着重讲解。
转载请附上链接http://blog.csdn.net/iemyxie/article/details/38173495
算法简介:
K-Means算法是输入聚类个数k,以及包含n个数据对象的数据库,输出满足方差最小标准的k个聚类。并使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类对象相似度较小。
算法假设:
均方误差是计算群组分散度的最佳参数。
算法输入:
聚类个数k;包含n个数据对象的数据集。
算法输出:
k个聚类
算法思想:
(a)绿点表示数据集在二级的欧几里德空间,初始化的中心点u1和u2用红的和蓝的叉来分别表示
(b)在最初的E步骤中,每个点根据离哪个簇中心点近,被指定为属于红簇还是蓝簇,这等于将这些点根据垂直于两个中心点的分隔线的的哪边分类,它用紫色的线表示。
(c)在接下来的M步骤,重新计算每个簇的中心点的平均值作为每个簇的中心点。
直至中心点位置不变或者变化很小。
weka运行:
以weather.nominal.arff为例运行结果部分截图如下:
从结果中可以看出,这组数据用K-Means算法迭代四次,初始产生了两个中心点。最终有10个instances聚合为一类,4个instances聚合为一类。
函数调用代码:
//读入样本
Filefile=new File("F:\\Program Files (x86)\\Weka-3-7\\data\\weather.nominal.arff");
ArffLoaderloader= newArffLoader();
loader.setFile(file);
ins=loader.getDataSet();
//初始化聚类器并设置k值
KM= new SimpleKMeans();
KM.setNumClusters(2);
//进行聚类
KM.buildClusterer(ins);
//打印结果
tempIns=KM.getClusterCentroids();
System.out.println(“CentroIds:”+tempIns);
运行结果如下:@attributeoutlook { sunny,overcast,rainy}
@attribute temperature { hot,mild,cool}
@attribute humidity { high,normal}
@attribute windy {TRUE,FALSE}
@attribute play { yes,no}
@data
sunny,mild,high,FALSE,yes
overcast,cool,normal,TRUE,yes
算法应用:
1.图片分割
图为取不同k值时的效果。