改进C均值聚类算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
改进C 均值聚类算法
C 均值算法属于聚类技术中一种基本的划分方法,具有简单、快速的优点。其基本思想是选取c 个数据对象作为初始聚类中心,通过迭代把数据对象划分到不同的簇中,使簇内部对象之间的相似度很大,而簇之间对象的相似度很小。对C 均值算法的初始聚类中心选择方法进行了改进,提出了一种从数据对象分布出发动态寻找并确定初始聚类中心的思路以及基于这种思路的改进算法。
1、C-均值聚类算法
① 给出n 个混合样本,令1=I ,表示迭代运算次数,选取c 个初始聚合中心)1(j Z ,c j ,...,2,1=;
② 计算每个样本与聚合中心的距离))(,(I Z x D j k ,n k ,....,2,1=,c j ,...,2,1=。 若},...,2,1)),(,({min ))(,(,...,2,1n k I Z x D I Z x D j k c
j i k ===,则i k w x ∈。
③ 计算c 个新的集合中心:∑==
+j
n k j k
j
j x
n I Z 1
)(1)1(,c j ,...,2,1=。
④ 判断:若)()1(I Z I Z j j ≠+,c j ,...,2,1=,则1+=I I ,返回②,否则算法结束。
2、C-均值改进算法的思想
在C-均值算法中,选择不同的初始聚类中心会产生不同的聚类结果且有不同的准确率,此方法就是如何找到与数据在空间分布上尽可能相一致的初始聚类中心。对数据进行划分,最根本的目的是使得一个聚类中的对象是相似的,而不同聚类中的对象是不相似的。如果用距离表示对象之间的相似性程度,相似对象之间的距离比不相似对象之间的距离要小。如果能够寻找到C 个初始中心,它们分别代表了相似程度较大的数据集合,那么就找到了与数据在空间分布上相一致的初始聚类中心。
目前,初始聚类中心选取的方法有很多种,在此仅介绍两种: 1)基于最小距离的初始聚类中心选取法
其主要思想:
(1) 计算数据对象两两之间的距离;
(2) 找出距离最近的两个数据对象,形成一个数据对象集合A1 ,并将它们从总的数据集合U 中删除;
(3) 计算A1 中每一个数据对象与数据对象集合U 中每一个样本的距离,找出在U 中与A1 中最近的数据对象,将它并入集合A1 并从U 中删除, 直到A1 中的数据对象个数到达一定阈值;
(4) 再从U 中找到样本两两间距离最近的两个数据对象构成A2 ,重复上面的过程,直到形成k 个对象集合;
(5) 最后对k 个对象集合分别进行算术平均,形成k 个初始聚类中心。
这种方法和Huffman 算法一样。后一种算法介绍是是基于最小二叉树的方法,看
起来比较费劲。
算法:
(1) 计算任意两个数据对象间的距离d ( x, y) ,找到集合U中距离最近的两个数据对象,形成集合Am (1≤m≤k) ,并从集合U中删除这两个对象;
(2) 在U中找到距离集合Am最近的数据对象,将其加入集合Am,并从集合U中删除该对象;
(3) 重复(2)直到集合中的数据对象个数大于等于a3 n /k ( 0 < a≤1) ;
(4) 如果m < k,则m←m + 1,再从集合U中找到距离最近的两个数据对象,形成新的集合Am, (1≤m≤k) ,并从集合U中删除这两个数据对象,返回(2)执行;
(5) 将最终形成的k个集合中的数据对象分别进行算术平均,从而形成k个初始聚类中心。
从这c个初始聚类中心出发,应用c均值聚类算法形成最终聚类。
2)基于取样思想的改进C均值算法
首先对样本数据采用K-means算法进行聚类,产生一组聚类中心。然后将这组聚类中心作为初始聚类中心,在采用K-means算法进行聚类。
在此,也可以在第一步中,对样本数据采用K-means算法进行n次聚类运算,每次产生一组聚类中心,对n组聚类中心进行算术平均,从而得到c组初始聚类中心。
基于取样思想的改进C均值算法程序:
function yy=Kmeans2()
data=[1739.94 1675.15 2395.96 \\样本空间
373.3 3087.05 2429.47
1756.77 1652 1514.98
864.45 1647.31 2665.9
222.85 3059.54 2002.33
877.88 2031.66 3071.18
1803.58 1583.12 2163.05
2352.12 2557.04 1411.53
401.3 3259.94 2150.98
363.34 3477.95 2462.86
1571.17 1731.04 1735.33
104.8 3389.83 2421.83
499.85 3305.75 2196.22
2297.28 3340.14 535.62
2092.62 3177.21 584.32
1418.79 1775.89 2772.9
1845.59 1918.81 2226.49
2205.36 3243.74 1202.69
2949.16 3244.44 662.42
1692.62 1867.5 2108.97
1680.67 1575.78 1725.1
2802.88 3017.11 1984.98 172.78 3084.49 2328.65 2063.54 3199.76 1257.21 1449.58 1641.58 3405.12 1651.52 1713.28 1570.38 341.59 3076.62 2438.63 291.02 3095.68 2088.95 237.63 3077.78 2251.96 1702.8 1639.79 2068.74 1877.93 1860.96 1975.3 867.81 2334.68 2535.1 1831.49 1713.11 1604.68 460.69 3274.77 2172.99 2374.98 3346.98 975.31 2271.89 3482.97 946.7 1783.64 1597.99 2261.31 198.83 3250.45 2445.08 1494.63 2072.59 2550.51 1597.03 1921.52 2126.76 1598.93 1921.08 1623.33 1243.13 1814.07 3441.07 2336.31 2640.26 1599.63 354 3300.12 2373.61 2144.47 2501.62 591.51 426.31 3105.29 2057.8 1507.13 1556.89 1954.51 343.07 3271.72 2036.94 2201.94 3196.22 935.53 2232.43 3077.87 1298.87 1580.1 1752.07 2463.04 1962.4 1594.97 1835.95 1495.18 1957.44 3498.02 1125.17 1594.39 2937.73 24.22 3447.31 2145.01 1269.07 1910.72 2701.97 1802.07 1725.81 1966.35 1817.36 1927.4 2328.79 1860.45 1782.88 1875.13 ];
[IDX,C] = kmeans(data,4);
C
y=[1:59];
z=[data,IDX]';
x=[z;y];