MATLAB统计工具箱在聚类分析中的应用.docx
《MATLAB统计工具箱在聚类分析中的应用.docx》由会员分享,可在线阅读,更多相关《MATLAB统计工具箱在聚类分析中的应用.docx(32页珍藏版)》请在冰豆网上搜索。
MATLAB统计工具箱在聚类分析中的应用
MATLAB统计工具箱在聚类分析中的应用
MATLAB统计工具箱提供给人们一个强有力的统计分析工具,是目前国际上流行的科学计算软件,具有强大的矩阵计算和数据可视化能力,可实现数据计算、图形处理、自动处理和信息处理等多种功能;同时,随着经济社会的飞速发展,大数据时代已经悄然来临,海量的数据分类、处理工作显得尤为繁杂,而聚类分析在解决这一繁杂工作的过程中起着不可替代的作用。
那么采取何种办法对样本点进行聚类,才能使得大量的样本按照各自特性进行合理分类,也是一个值得探究的问题。
在MATLAB统计工具箱中提供了许多聚类分析工具,k-means聚类就是其中一种,也叫k均值聚类,本文主要探讨k-means聚类方法,并将其运用于实例分析。
1.1问题背景
聚类分析(ClusterAnalysis),是将一组研究对象分为相对同质的群组的统计分析技术,又称群分析或分类分析,通俗易懂的来说,它是根据“物以类聚”的道理,对某些指标或样品进行分类的一种多元统计分析方法。
也就是说,它们以大量的样品为讨论对象,在没有任何模式依循或可供参考的条件下,要求能够合理地按照各自的特性或属性来进行合理的分类,是在没有先验知识的情况下进行的。
也就是说聚类与分类的不同在于,聚类所要求划分的类是未知的,是将数据分类到不同的类或者簇这样的一个过程,所以在同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。
从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。
当今社会正处于大数据时代,在商业方面,聚类分析是细分市场的有效工具,同时也可用于研究消费者行为,寻找新的潜在市场、选择实验的市场,并作为多元分析的预处理;在经济领域,其可以帮助市场分析人员从客户数据库中发现不同的客户群,并且用购买模式来刻画不同客户群的特征;对住宅区进行聚类,确定自动提款机ATM的安放位置;对股票市场板块分析,找出最具活力的板块龙头股;还可用于企业信用等级分类等方面。
在生物学领域,其可推到动、植物的分类;也可对基因分类,获得对种群的认识;在数据挖掘领域,其可作为其他数学算法的预处理步骤,获得数据分布状况,集中对特定的类做进一步的研究;同时在保险行业、地理及因特网等方面有着巨大的作用。
传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。
采用k-均值、k-中心点等算法的聚类分析工具已被加入到许多著名的统计分析软件包中,如SPSS、MATLAB等。
本文着重介绍MATLAB统计工具箱在聚类分析中的应用。
利用MATLAB统计工具箱中的k-means进行聚类分析,首先进行数据预处理,为衡量数据点间的相似度定义一个距离函数,再聚类或分组,评估输出。
可应用于诸多方面,为人们的生产生活带来方便。
1.2本文主要工作
首先建立聚类分析模型,1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;2)用linkage函数定义变量之间的连接;3)用cophenetic函数评价聚类信息;4)用cluster函数创建聚类。
然后通过模型对模拟数据及实际数据进行分析、聚类,最终通过计算错误率,对模型进行评价。
2.模型综述
2.1用k-means做聚类分析的算法解释
设被聚类对象的样本总数为
样本维数为
即有可测数据样本集
,其中
,i=1,2……n
则定义数据样本
和
之间的欧几里得距离
)
为了可视化,这里使用二维空间,一组模拟数据如图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(:
2),'bo');
plot(X3(:
1),X3(:
2),'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;%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;
plot(X(:
1),X(:
2),'.');
title'RandomlyGeneratedData';
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
figure;
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
holdon
plot(X(idx==2,1),X(idx==2,2),'bo','MarkerSize',12)
holdon
plot(X(idx==3,1),X(idx==3,2),'r*','MarkerSize',12)
plot(C(:
1),C(:
2),'kx',...
'MarkerSize',15,'LineWidth',3)
legend('Cluster1','Cluster2','Cluster3','Centroids',...
'Location','NW')
title'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
100
0.00
Cluster2
100
100
0.00
Cluster3
100
100
0.00
表3.2重叠度较低数据错误率分析
类数
点数
聚类前
聚类后
错误率
Cluster1
100
99
0.01
Cluster2
100
100
0.00
Cluster3
100
101
0.01
表3.2重叠度较高数据错误率分析
类数
点数
聚类前
聚类后
错误率
Cluster1
100
95
0.05
Cluster2
100
101
0.01
Cluster3
100
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('Display','final');
[idx,ctrs]=kmeans(X,2,'Distance','city','Replicates',5,'Options',opts);
表4.1iris(鸢尾属植物)聚类结果表
序号
Sepal.length
Sepal.width
Petal.length
Petal.width
Variety(前)
Variety(后)
1
5.1
3.5
1.4
0.2
Setosa
Setosa
2
4.9
3
1.4
0.2
Setosa
Setosa
3
4.7
3.2
1.3
0.2
Setosa
Setosa
4
4.6
3.1
1.5
0.2
Setosa
Setosa
5
5
3.6
1.4
0.2
Setosa
Setosa
6
5.4
3.9
1.7
0.4
Setosa
Setosa
7
4.6
3.4
1.4
0.3
Setosa
Setosa
8
5
3.4
1.5
0.2
Setosa
Setosa
9
4.4
2.9
1.4
0.2
Setosa
Setosa
10
4.9
3.1
1.5
0.1
Setosa
Setosa
11
5.4
3.7
1.5
0.2
Setosa
Setosa
12
4.8
3.4
1.6
0.2
Setosa
Setosa
13
4.8
3
1.4
0.1
Setosa
Setosa
14
4.3
3
1.1
0.1
Setosa
Setosa
15
5.8
4
1.2
0.2
Setosa
Setosa
16
5.7
4.4
1.5
0.4
Setosa
Setosa
17
5.4
3.9
1.3
0.4
Setosa
Setosa
18
5.1
3.5
1.4
0.3
Setosa
Setosa
19
5.7
3.8
1.7
0.3
Setosa
Setosa
20
5.1
3.8
1.5
0.3
Setosa
Setosa
21
5.4
3.4
1.7
0.2
Setosa
Setosa
22
5.1
3.7
1.5
0.4
Setosa
Setosa
23
4.6
3.6
1
0.2
Setosa
Setosa
24
5.1
3.3
1.7
0.5
Setosa
Setosa
25
4.8
3.4
1.9
0.2
Setosa
Setosa
26
5
3
1.6
0.2
Setosa
Setosa
27
5
3.4
1.6
0.4
Setosa
Setosa
28
5.2
3.5
1.5
0.2
Setosa
Setosa
29
5.2
3.4
1.4
0.2
Setosa
Setosa
30
4.7
3.2
1.6
0.2
Setosa
Setosa
31
4.8
3.1
1.6
0.2
Setosa
Setosa
32
5.4
3.4
1.5
0.4
Setosa
Setosa
33
5.2
4.1
1.5
0.1
Setosa
Setosa
34
5.5
4.2
1.4
0.2
Setosa
Setosa
35
4.9
3.1
1.5
0.2
Setosa
Setosa
36
5
3.2
1.2
0.2
Setosa
Setosa
37
5.5
3.5
1.3
0.2
Setosa
Setosa
38
4.9
3.6
1.4
0.1
Setosa
Setosa
39
4.4
3
1.3
0.2
Setosa
Setosa
40
5.1
3.4
1.5
0.2
Setosa
Setosa
41
5
3.5
1.3
0.3
Setosa
Setosa
42
4.5
2.3
1.3
0.3
Setosa
Setosa
43
4.4
3.2
1.3
0.2
Setosa
Setosa
44
5
3.5
1.6
0.6
Setosa
Setosa
45
5.1
3.8
1.9
0.4
Setosa
Setosa
46
4.8
3
1.4
0.3
Setosa
Setosa
47
5.1
3.8
1.6
0.2
Setosa
Setosa
48
4.6
3.2
1.4
0.2
Setosa
Setosa
49
5.3
3.7
1.5
0.2
Setosa
Setosa
50
5
3.3
1.4
0.2
Setosa
Setosa
51
7
3.2
4.7
1.4
Versicolor
Versicolor
52
6.4
3.2
4.5
1.5
Versicolor
Versicolor
53
6.9
3.1
4.9
1.5
Versicolor
Versicolor
54
5.5
2.3
4
1.3
Versicolor
Versicolor
55
6.5
2.8
4.6
1.5
Versicolor
Versicolor
56
5.7
2.8
4.5
1.3
Versicolor
Versicolor
57
6.3
3.3
4.7
1.6
Versicolor
Versicolor
58
4.9
2.4
3.3
1
Versicolor
Versicolor
59
6.6
2.9
4.6
1.3
Versicolor
Versicolor
60
5.2
2.7
3.9
1.4
Versicolor
Versicolor
61
5
2
3.5
1
Versicolor
Versicolor
62
5.9
3
4.2
1.5
Versicolor
Versicolor
63
6
2.2
4
1
Versicolor
Versicolor
64
6.1
2.9
4.7
1.4
Versicolor
Versicolor
65
5.6
2.9
3.6
1.3
Versicolor
Versicolor
66
6.7
3.1
4.4
1.4
Versicolor
Versicolor
67
5.6
3
4.5
1.5
Versicolor
Versicolor
68
5.8
2.7
4.1
1
Versicolor
Versicolor
69
6.2
2.2
4.5
1.5
Versicolor
Versicolor
70
5.6
2.5
3.9
1.1
Versicolor
Versicolor
71
5.9
3.2
4.8
1.8
Versicolor
Versicolor
72
6.1
2.8
4
1.3
Versicolor
Versicolor
73
6.3
2.5
4.9
1.5
Versicolor
Versicolor
74
6.1
2.8
4.7
1.2
Versicolor
Versicolor
75
6.4
2.9
4.3
1.3
Versicolor
Versicolor
76
6.6
3
4.4
1.4
Versicolor
Versicolor
77
6.8
2.8
4.8
1.4
Versicolor
Versicolor
78
6.7
3
5
1.7
Versicolor
Versicolor
79
6
2.9
4.5
1.5
Versicolor
Versicolor
80
5.7
2.6
3.5
1
Versicolor
Versicolor
81
5.5
2.4
3.8
1.1
Versicolor
Versicolor
82
5.5
2.4
3.7
1
Versicolor
Versicolor
83
5.8
2.7
3.9
1.2
Versicolor
Versicolor
84
6
2.7
5.1
1.6
Versicolor
Versicolor
85
5.4
3
4.5
1.5
Versicolor
Versicolor
86
6
3.4
4.5
1.6
Versicolor
Versicolor
87
6.7
3.1
4.7
1.5
Versicolor
Versicolor
88
6.3
2.3
4.4
1.3
Versicolor
Versicolor
89
5.6
3
4.1
1.3
Versicolor
Versicolor
90
5.5
2.5
4
1.3
Versicolor
Versicolor
91
5.5
2.6
4.4
1.2
Versicolor
Versicolor