大数据分析报告课程设计论文设计Word文档下载推荐.docx
《大数据分析报告课程设计论文设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大数据分析报告课程设计论文设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
本文对聚类分析的原理进展阐述,并聚类分析中的谱系聚类法和K-means对R.A.Fisher的Iris数据进展了数据分析,得到了几乎一样的结论,数据量太少,回带误差大约是20%。
2数据分析预处理
1.1数据来源
分析的数据来自R.A.Fisher在1936年发表的Iris数据〔见附录B表B.1〕,据表可知前50个数据为牵牛一类,再50个数据为杂色一类,后50个数据为锦葵一类。
将数据样本X变量放入matlab变量名X,,保存为matlab的huaban.mat文件。
1.2数据分析
采用谱系聚类分析方法和K-means聚类法解决例如Iris类的分类等问题。
3聚类分析
聚类分析是研究对样品或指标进展分类的一种多元统计方法,是依据研究对象的个体的特征进展分类的方法;
聚类分析把分类对象按一定规如此分成假如干类,这些类非事先指定的,而是根据数据特征确定的。
在同一类中这些对象在某种意义上趋向于彼此相似,而在不同类中趋向于不相似;
职能是建立一种能按照样品或变量的相似程度进展分类的方法。
聚类准如此为“亲者相聚,疏者相分〞。
2.2分类
2.2.1R型聚类分析
R型聚类分析是对变量〔指标〕的分类,其主要作用:
不但可以了解个别变量之间的亲疏程度,而且可以了解各个变量组合之间的亲疏程度。
2.2.2Q型聚类分析
Q型聚类分析是对样品的分类,其主要作用:
可以综合利用多个变量的信息对样本进展分析;
分类结果直观,聚类谱系图清楚地表现数值分类结果;
所得结果比传统分类方法更细致、全面、合理。
其常用的统计量是距离。
常用的聚类方法为谱系聚类法等。
谱系聚类法是目前应用较为广泛的一种聚类法。
谱系聚类是根据生物分类学的思想对研究对象进展分类的方法。
在生物分类学中,分类的单位是:
门、纲、目、科、属、种。
其中种是分类的根本单位,分类单位越小,它所包含的生物就越少,生物之间的共同特征就越多。
利用这种思想,谱系聚类首先将各样品自成一类,然后把最相似〔距离最近或相似系数最大〕的样品聚为小类,再将已聚合的小类按各类之间的相似性〔用类间距离度量〕进展再聚合,随着相似性的减弱,最后将一切子类都聚为一大类,从而得到一个按相似性大小聚结起来的一个谱系图。
2.3.2选择距离(参考文献[1]p209页)
在使用系统聚类法进展聚类的过程中,尤其是Q型聚类是建立在样品之间距离矩阵的根底上的,通常需要对原始数据进展参考点的建立和去量纲化的处理,然后求出样品距离矩阵D,我们采用比拟广泛的闵可夫斯基〔Minkowski〕距离:
当p=2时
即为欧几里得CEuclidean〕距离。
然后进展类的搜索、合并于距离矩阵的更新涉与类间距离的计算,需要事先计算类与类之间的距离。
依据类问距离不同的计算方法,我们可以把系统聚类法分为最短距离法、最长距离法、重心法、离差平方和法(ward〕等。
设Gp,Gq为前一轮操作中形成的某两个聚类,在本轮操作中归聚为新类
Gr=Gp
Gq如此新类Gr与前一轮操作中形成吨,Gq之外的任意一类G,的距离递推公式如下:
最短距离法
其中l
p,q.
最长距离法
中间距离法
-
.
中心距离法
其中,
和
分别为
包含的聚类对象个数,
=
+
.
Ward法
注意,Ward法要求初始距离矩阵采用欧式距离公式计算各个对象的距离。
2.4得到闵可夫斯基〔Minkowski〕距离谱系聚类法函数〔见附录A.1〕
〔1〕pdist创建聚类对象的Minkowski距离矩阵。
〔2〕squarform拉直矩阵D。
〔3〕linkage用D或其拉直矩阵创建信息矩阵G,默认的类间距离为最短距离法。
〔4〕dendrogram创建G的谱系聚类图。
〔5〕cluster创建G的指定个数类。
2.5画谱系聚类图〔见图2.1〕
图2.1Iris花瓣数据谱系聚类图
2.6得出分类
由图2.1得出Iris花瓣数据截断处可选择d=1,d=0.8,d=0.666对应的分类个数为2,3,5类。
2.7cluster创建G的指定个数类。
〔matlab程序见A.3〕
2.7.1分3类图〔见图2.2〕
2.8结论
由图2.2将数据谱系聚类分析分为三类图可知,将数据分为3类不太恰当,应该两类或者5类更适宜,不过也有可能是我们选择的距离有问题。
下面K-means我们将更改距离。
4k-均值聚类
3.1K-Means算法思想
1967年Macqueen提出了K-means算法[4],根本思想是把数据集中的数据点随机生成k组,把每组的均值作为中心点。
重新计算每个数据点与各组的中心点的相似性,根据数据点相似性的度量准如此,把每个数据点重新分组,计算每组新的均值作为中心点。
不断重复上述过程,直到中心点的均值收敛,停止迭代过程。
K-means算法是一种比拟快速的聚类方法,时间复杂度为O(nkt),其中n是数据点的数目,k是分组数目,t是迭代次数。
K-means算法也存在不足,最大问题要指定分组数目并且在运行过程中容易导致局部最优。
3.1.1K-均值算法
K-均值算法是一种聚类个数的“无监视学习〞算法。
首先指定表示聚类个数的K值,然后对数据集聚类,算法完毕时用K个聚类中心表示聚类结果。
对于设定的目标准如此函数,通过向目标准如此函数值减小的方向进展迭代更新,目标准如此函数值达到极小值时算法完毕,得到较优的聚类结果。
设数据集为
,
K个距离中心为V1,V2,..,Vk。
令
表示K个聚类的类别,如此:
(1)
定义目标准如此函数为:
〔2〕
其中|Ci|表示Ci类包含样本的个数,使用欧式距离
〔3〕
度量样本间的相似性。
欧式距离适用于类数据对象符合超球形分布的情况,目标准如此函数SSE表示为每个数据对象到相应聚类中心距离的平方和,即聚类均方误差的最小值。
3.1.2K-均值算法的流程如下:
〔1〕随机选取K个初始聚类中心V1,V2,...,Vk;
〔2〕按照最小距离原如此,对数据集聚类,确定每个样本的类属关系;
〔3〕使用公式〔1〕更新K个簇的中心;
〔4〕重复执行〔2〕到〔4〕,直到目标准如此函数收敛或聚类中心稳定。
显然,初始聚类中心对K-均值算法产生很大的影响,簇集中易存在平均误差较大的簇,聚类结果仅能收敛到局部最优。
即使选取不同的初始聚类中心执行屡次K-均值算法,也只是在庞大的初值空间里进展简单的搜索,聚类结果很难达到全局最优。
当数据集中存在较多噪音或孤立点时,已有的初始聚类中心优化方法很难发现适宜的初始聚类中心。
3.2复合相关系数的计算〔计算过程见附录A.4〕
分别记最短、最长、类平均、重心、离差平方和距离为G1、G2、G3、G4、G5,相对应的复合相关系数分别记为R1、R2、R3、R4、R5,以欧式距离为样本间距离计算得到表3-1
表3-1复合相关系数
R1
R2
R3
R4
R5
由表2可知以重心距离进展聚类分析效果应该最为理想
3.3聚类结果〔见图3.1〕
以重心距离为类间距离进展谱系聚类分析得到〔matlab程序参考附录A.1-4〕
3.4谱系聚类结果〔见图3.2〕
3.4K-Means聚类结果〔见图3.3〕
由图3.2结果可得第1类有36个样本,第2类有64个样本,第3类有50个样本,由图3.3可知第1类有62个样本,第2类有49个样本,第3类有39个样本两种方法根本得到的结论根本一致,不过都不太理想。
这可能是数据量太小了的原因。
大数据时代,需要大量的数据。
参考文献
[1]包研科.数据分析教程.:
清华大学,2011
[2]曾繁慧.数值分析.:
中国矿业大学,2009
[3]袁方,周志勇,宋鑫.初始聚类中心优化的K-means算发[J].计算机工程,2007,33〔3〕:
65-66
[4]MacQueen,James."
Somemethodsforclassificationandanalysisofmultivariateobservations."
ProceedingsofthefifthBerkeleysymposiumonmathematicalstatisticsandprobability.Vol.1.No.281-297.1967.
[5]余立强.LAMP架构搭建与运行实例[J].网络与信息,2011〔8〕:
50-52
[6]吴夙慧,成颖,彦宁,云涛.K-means算法研究综述[J].现代图书情报技术,2011,(5):
28-35.
附录
A.1谱系聚类法函数
functionf=test4()
load
D=pdist(X,'
minkowski'
);
G=linkage(D);
dendrogram(G);
T=cluster(G,3)
A.2自编k-means聚类分析
function[cid,nr,centers]=xwKmeans(x,k,nc)
%[CID,NR,CENTERS]=CSKMEANS(X,K,NC)PerformsK-means
%X输入聚合数据
%K通过观察得到的经验分组数据
%每行一个观测,NC为聚类指数,来源于初始的聚类中心值,默认情况下为随机的观测
%输出:
IDX为最终分类
%nr为每个每个聚合的中心值
%CENTERSisamatrix,whereeachrow
%correspondstoaclustercenter.
[n,d]=size(x);
ifnargin<
3
ind=ceil(n*rand(1,k));
nc=x(ind,:
)+randn(k,d);
end
cid=zeros(1,n);
oldcid=ones(1,n);
nr=zeros(1,k);
maxiter=100;
iter=1;
while~isequal(cid,oldcid)&
iter<
maxiter
fori=1:
n
dist=sum((repmat(x(i,:
),k,1)-nc).^2,2);
[m,ind]=min(dist);
cid(i)=ind;
end
k
ind=find(cid==i);
nc(i,:
)