MATLAB统计工具箱在聚类分析中的应用Word格式.docx
《MATLAB统计工具箱在聚类分析中的应用Word格式.docx》由会员分享,可在线阅读,更多相关《MATLAB统计工具箱在聚类分析中的应用Word格式.docx(32页珍藏版)》请在冰豆网上搜索。
![MATLAB统计工具箱在聚类分析中的应用Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/25/17939559-b4c9-4f80-aa9c-61353fe01e65/17939559-b4c9-4f80-aa9c-61353fe01e651.gif)
之间的欧几里得距离
)
为了可视化,这里使用二维空间,一组模拟数据如图2.1所示:
图2.1模拟数据散点图
从样本点的大体形状可以看出它们大致可以聚为三个类,其中两个是密集一些的,剩下的那些松散一些。
现在我们要为这些样本点分组,以便于能区分出属于不同的簇的数据,如果按照分组把它们按照不同的形状画出来,就是下图这个样子:
图2.2聚类效果图
那么如何用计算机完成这个任务呢,本文采取matlab中的k-means算法对这种m维欧氏空间中的点进行聚类。
在进行k-means的具体步骤之前,首先我们要对进行聚类的数据做一个假设:
对于每一个类,我们可以选出一个中心点,使得该类中的所有的点到该中心点的距离比到其他类的中心的距离小。
当然实际情况中得到的数据并不能总是保证能满足这样的条件约束,但这通常已经是我们所能达到的最好的结果,而那些误差通常是固有存在的或者问题本身的不可分性造成的。
例如下图所示的两个正态分布,从两个分布中随机地抽取一些数据点出来,混杂到一起,现在要让我们将这些混杂在一起的数据点按照它们被生成的那个分布分开来:
图2.3正态分布分析图
我们可以看到,这两个分布它本身就有很大一部分重叠在一起了,比如,对于数据点2.5来说,它由两个分布产生的概率都是相等的,所以我们做的只能是一个猜测;
稍微好一点的情况是2,一般我们会将它归类到左边的那个分布,因为概率相对来说大一些,然而此时它由右边的分布生成的概率仍然也是比较大的,也就是说我们仍然也有不小的几率会猜错。
而整个阴影部分是我们所能达到的最小的猜错的概率,诸如此类的问题,它来自于问题本身的不可分性,无法避免。
因此,我们把k-means所依赖的这个假设看作是合理的。
基于这样一个假设,我们再来导出k-means所要优化的目标函数:
设我们一共有n个数据点需要分为K个类,k-means要做的就是最小化
上述函数,其中
在数据点n被归类到clusterk的时候为1,否则为0。
直接寻找
和
来最小化
并不容易,不过我们可以采取迭代的办法:
先固定
,选择最优的
,很容易看出,只要将数据点归类到离他最近的那个中心就能保证
最小。
下一步则须固定
,再求最优的
。
将
对
求导并令其导数为零,很容易得到
达到最小的时
应该满
足:
也就是说
的值应当是所有clusterk中的数据点的平均值。
由于每一次迭代都是取到
的最小值,因此
只会不断地减小或者不变,而不会增加,这就保证了k-means最终会到达一个极小值。
虽然k-means并不能保证总是能得到全局最优解,但是对于这样的问题,像k-means这种复杂度的算法,这样的结果已经是很不错的了。
2.2k-means算法的具体步骤
选定K个中心
的初值。
这个过程通常是针对具体问题有一些启发式的选取方法,或者在大多数情况下采用随机选取的办法。
因为前面我们说过k-means并不能保证全局最优,而能否收敛到全局最优解其实和初值的选取有很大的关系,所以有时候我们会多次选取初值运行k-means,并取其中最好的一次结果。
1)将每个数据点归类到离它最近的那个中心点所代表的cluster中;
2)用公式
计算出每个cluster的新的中心点;
3)重复第二步,一直到迭代了最大的步数或者前后的
的值相差小于一个阈值为止。
3、数值模拟分析
3.1模拟数据
用matlab产生一组随机数,共300个,非别是完全可分离数据、重叠度较低数据和重叠度较高数据,并画出图形。
[程序1]rngdefault;
%Forreproducibility
X1=randn(100,2)+[0*ones(100,1),m*ones(100,1)];
X2=randn(100,2)+[0*ones(100,1),n*ones(100,1)];
X3=randn(100,2)+[0*ones(100,1),p*ones(100,1)];
DataX=[X1;
X2;
X3];
opts=statset('
Display'
'
final'
);
[idx,C]=kmeans(X,3,'
Distance'
cityblock'
Replicates'
5,'
Options'
opts);
figure;
holdon
plot(X1(:
1),X1(:
2),'
r.'
plot(X2(:
1),X2(:
bo'
plot(X3(:
1),X3(:
r*'
title'
RandomlyGeneratedData'
;
3.1.1完全可分离数据
取m=15,n=8,p=1,此时做散点图如图3.1:
图3.1完全可分离数据散点图
3.1.2重叠度较低的数据
调用程序1,取m=15,n=10,p=5,如图3.2
图3.2重叠度较低的数据散点图
3.1.3重叠度较高的数据
调用【程序1】,取m=15,n=12,p=9,散点图如图3.3所示。
图3.3重叠度较高的数据散点图
3.2聚类分析
3.2.1完全可分离数据
[程序2]rngdefault;
figure;
plot(X(:
1),X(:
.'
title'
P=idx;
a=0;
b=0;
c=0;
fori=1:
1:
300
ifP(i)==1
a=a+1;
elseifP(i)==2;
b=b+1;
elsec=c+1;
end
end
a
b
c
plot(X(idx==1,1),X(idx==1,2),'
MarkerSize'
12)
holdon
plot(X(idx==2,1),X(idx==2,2),'
plot(X(idx==3,1),X(idx==3,2),'
plot(C(:
1),C(:
kx'
...
'
15,'
LineWidth'
3)
legend('
Cluster1'
Cluster2'
Cluster3'
Centroids'
Location'
NW'
ClusterAssignmentsandCentroids'
holdoff
取m=15,n=8,p=1;
聚类效果图如图3.4所示:
图3.4完全可分离数据聚类效果图
Cluster1=100Cluster2=100Cluster3=100
3.2.2重叠度较低的数据
调用【程序2】,取m=15,n=10,p=5;
聚类效果图如图3.5所示:
图3.5重叠度较低数据聚类效果图
Cluster1=99Cluster2=100Cluster3=101
3.2.3重叠度较高的数据
调用【程序2】,取m=12,n=10,p=8;
聚类效果图如图3.6所示:
图3.6重叠度较高数据聚类效果图
Cluster1=95Cluster2=101Cluster3=104
3.3模型评价
3.3.1错误率计算方法
若聚类正确,则记
,
若聚类错误,则记
则,聚类的错误率
3.3.2模拟数据错误率分析
表3.1完全可分离数据错误率分析
类数
点数
聚类前
聚类后
错误率
Cluster1
100
0.00
Cluster2
Cluster3
表3.2重叠度较低数据错误率分析
99
0.01
101
表3.2重叠度较高数据错误率分析
95
0.05
104
0.04
从聚类分析错误率的计算来看,用k-means对重叠度较高的数据进行聚类的结果并不是特别理想,但正如本文前面提到的那个正态分布的例子,在聚类的过程中,出现了部分样本点的重合,这样到底把重合的样本点分到哪一类我们只能进行猜测估计,当然我们有不小的几率会猜错,这来自于问题本身的不可分性,无法避免。
因此,我们将k-means所依赖的假设——对于每一个类,我们可以选出一个中心点,使得该类中的所有的点到该中心点的距离小于到其他类的中心的距离看作是合理的。
下面我们将从具体实例进行分析:
4、实例分析
利用matlab从Excle中导入一组有关iris(鸢尾属植物)的数据,从Sepal.length(花萼长度),Sepal.width(花萼宽度),Petal.length(花瓣长度),Petal.width(花萼宽度)四个方面用k-means进行聚类分析,程序如下:
X=data;
Y=X(1:
150,2:
5);
opts=statset('
[idx,ctrs]=kmeans(X,2,'
city'
表4.1iris(鸢尾属植物)聚类结果表
序号
Sepal.length
Sepal.width
Petal.length
Petal.width
Variety(前)
Variety(后)
1
5.1
3.5
1.4
0.2
Setosa
2
4.9
3
4.7
3.2
1.3
4
4.6
3.1
1.5
5
3.6
6
5.4
3.9
1.7
0.4
7
3.4
0.3
8
9
4.4
2.9
10
0.1
11
3.7
12
4.8
1.6
13
14
4.3
1.1
15
5.8
1.2
16
5.7
17
18
19
3.8
20
21
22
23
24
3.3
0.5
25
1.9
26
27
28
5.2
29
30
31
32
33
4.1
34
5.5
4.2
35
36
37
38
39
40
41
42
4.5
2.3
43
44
0.6
45
46
47
48
49
5.3
50
51
Versicolor
52
6.4
53
6.9
54
55
6.5
2.8
56
57
6.3
58
2.4
59
6.6
60
2.7
61
62
5.9
63
2.2
64
6.1
65
5.6
66
6.7
67
68
69
6.2
70
2.5
71
1.8
72
73
74
75
76
77
6.8
78
79
80
2.6
81
82
83
84
85
86
87
88
89
90
91