
MATLAB程序与数学实验
一、
您的问题的程序代码
%注意:您在网络上给的程序中有些许错误,现在已经改正如下:
x=[165
163
162
173
173
165
178
165
170
163
172
182
171
177
166
170
173
163
155
160
173
180
175
169
163
152
176
179
149
156
162
164
148
172
183
173
156
164
162
162
164
172
176
158
156
167
163
168
163
165
167
175
172
161
182
168
173
152
153
159
148
183
175
170
173
171
170
168
168
167
165
164
168
169
167
150
180
170
183
168
170
172
170
180
156
164
161
162
163
168
170
172
171
172
173
176
168
164
173
168];
y=[75
62
63
61
65
69
68
67
62
64
63
60
61
69
67
62
65
55
56
58
54
74
72
65
68
59
68
75
62
60
61
63
65
69
68
59
54
75
72
70
62
63
65
68
67
72
74
71
70
73
60
65
64
63
68
67
71
70
68
58
54
52
59
68
65
64
62
68
72
75
74
72
73
71
76
65
59
58
72
71
65
64
63
67
70
72
76
76
78
79
71
65
62
63
60
59
54
50
70
51
];
hist(x,10);title('学生身高的直方图')
figure;hist(y,10);title('学生体重的直方图');
%统计量的计算
mean(x)
median(x)
std(x)
var(x)
range(x)
skewness(x)
mean(y)
median(y)
std(y)
var(y)
range(y)
skewness(y)
%分布正态性检验
figure;normplot(x)
figure;normplot(y)
%极大似然估计
[muhat,sigmahat,muci,sigmaci]
=
normfit(x,
005)
[muhat,sigmahat,muci,sigmaci]
=
normfit(y,
005)
二、
具体解决办法及结果如下:
你自己慢慢看吧。
ans
=
1674800
ans
=
168
ans
=
79930
ans
=
638885
ans
=
35
ans
=
-03331
ans
=
656900
ans
=
65
ans
=
64145
ans
=
411454
ans
=
29
ans
=
-02369
muhat
=
1674800
sigmahat
=
79930
muci
=
1658940
1690660
sigmaci
=
70179
92853
muhat
=
656900
sigmahat
=
64145
muci
=
644172
669628
sigmaci
=
56319
74515
图发不上去,你自己把我修改后的代码复制粘贴到Matlab命令窗口中,就会得到四张图。
文档通过邮件发给你了,请注意查收。
以UCI红酒数据集为例:数据记录的是在意大利某一地区同一区域上三种不同品种的酒的化学成分分析,数据里含有178个样本属于三个类别(类别标签已给),每个样本含有13个特征分量。
算法运行结果可得,随机划分178个样本数据集,78个为测试集Xtest,100个为训练集Xtrain;测试集标签为test_wine_labels,训练集标签为train_wine_labels。
唯一的问题是暂时还不知道如何固定随机数种子,使得每次划分的训练集和测试集相同,这样可以用来方便调整其它参数。如果有哪位大佬看见这篇文章,知道怎么做的话,麻烦可以留言或者私信我,万分感谢!!!
引言 聚类分析是人类的区分标志之一,从孩提时代开始,一个人就下意识地学会区分动植物,并且不断改进。这一原理在如今不少领域得到了相应的研究和应用,比如模式识别、数据分析、图像处理、Web文档分类等。 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。 聚类技术正在蓬勃发展,对此有贡献的研究领域包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等。各种聚类方法也被不断提出和改进,而不同的方法适合于不同类型的数据,因此对各种聚类方法、聚类效果的比较成为值得研究的课题。 1 聚类算法的分类 现在有很多的聚类算法,而在实际应用中,正确选择聚类算法的则取决于数据的类型、聚类的目的等因素。如果聚类分析被用作描述或探查的工具,可以对同样的数据尝试多种算法,以发现数据可能揭示的结果。 已知的聚类算法可以大致划分为以下几类:划分方法、层次方法、基于密度的方法、基于网格的方法和基于模型的方法。 每一个类型的算法都被广泛地应用着,例如:划分方法中的k-means聚类算法、层次方法中的凝聚型层次聚类算法、基于模型方法中的神经网络聚类算法等。 聚类问题的研究早已不再局限于上述的硬聚类,即每一个数据只能被归为一类,模糊聚类也是聚类分析中研究较为广泛的一个“流派”。模糊聚类通过隶属函数来确定每个数据隶属于各个簇的程度,而不是将一个数据对象硬性地归类到某一簇中。目前已有很多关于模糊聚类的算法被提出,如FCM算法。 本文主要分析和比较k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法。通过通用测试数据集进行聚类效果的比较和分析。 2 四种常用聚类算法研究 21 k-means聚类算法 k-means是划分方法中较经典的聚类算法之一。该算法的效率高,使得在对大规模数据进行聚类时广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。 k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则,其定义如下: 这里E是数据库中所有对象的平方误差的总和,p是空间中的点,mi是簇Ci的平均值。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。k-means聚类算法的算法流程如下: 输入:包含n个对象的数据库和簇的数目k; 输出:k个簇,使平方误差准则最小。 步骤: (1) 任意选择k个对象作为初始的簇中心; (2) repeat; (3) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇; (4) 更新簇的平均值,即计算每个簇中对象的平均值; (5) until不再发生变化。 22 层次聚类算法 根据层次分解的顺序,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。 凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。四种广泛采用的簇间距离度量方法如下: 这里给出采用最小距离的凝聚层次聚类算法流程: (1) 将每个对象看作一类,计算两两之间的最小距离; (2) 将距离最小的两个类合并成一个新类; (3) 重新计算新类与所有类之间的距离; (4) 重复(2)、(3),直到所有类最后合并成一类。 23 SOM聚类算法 SOM神经网络是由芬兰神经网络专家Kohonen教授提出的,该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。 SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。 算法流程: (1) 网络初始化,对输出层每个节点权重赋初值; (2) 将输入样本中随机选取输入向量,找到与输入向量距离最小的权重向量; (3) 定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢; (4) 提供新样本、进行训练; (5) 收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。 24 FCM聚类算法 1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合’的概念。经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析,就是模糊聚类分析。 FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。 算法流程: (1) 标准化数据矩阵; (2) 建立模糊相似矩阵,初始化隶属矩阵; (3) 算法开始迭代,直到目标函数收敛到极小值; (4) 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。 3 试验 31 试验数据 实验中,选取专门用于测试分类、聚类算法的国际通用的UCI数据库中的IRIS数据集,IRIS数据集包含150个样本数据,分别取自三种不同的莺尾属植物setosa、versicolor和virginica的花朵样本,每个数据含有4个属性,即萼片长度、萼片宽度、花瓣长度,单位为cm。在数据集上执行不同的聚类算法,可以得到不同精度的聚类结果。 32 试验结果说明 文中基于前面所述各算法原理及算法流程,用matlab进行编程运算,得到表1所示聚类结果。 如表1所示,对于四种聚类算法,按三方面进行比较: (1)聚错样本数:总的聚错的样本数,即各类中聚错的样本数的和; (2)运行时间:即聚类整个过程所耗费的时间,单位为s; (3)平均准确度:设原数据集有k个类,用ci表示第i类,ni为ci中样本的个数,mi为聚类正确的个数,则mi/ni为第i类中的精度,则平均精度为: 33 试验结果分析 四种聚类算法中,在运行时间及准确度方面综合考虑,k-means和FCM相对优于其他。但是,各个算法还是存在固定缺点:k-means聚类算法的初始点选择不稳定,是随机选取的,这就引起聚类结果的不稳定,本实验中虽是经过多次实验取的平均值,但是具体初始点的选择方法还需进一步研究;层次聚类虽然不需要确定分类数,但是一旦一个分裂或者合并被执行,就不能修正,聚类质量受限制;FCM对初始聚类中心敏感,需要人为确定聚类数,容易陷入局部最优解;SOM与实际大脑处理有很强的理论联系。但是处理时间较长,需要进一步研究使其适应大型数据库。 4 结语 聚类分析因其在许多领域的成功应用而展现出诱人的应用前景,除经典聚类算法外,各种新的聚类方法正被不断被提出。
该文章仅供学习参考使用,版权归作者所有。
46统计作图461正整数的频率表命令正整数的频率表函数tabulate格式table=tabulate(X)%X为正整数构成的向量,返回3列:第1列中包含X的值第2列为这些值的个数,第3列为这些值的频率。例4-49>>A=[1225638]A=1225638>>tabulate(A)ValueCountPercent111429%222857%311429%40000%511429%611429%70000%811429%462经验累积分布函数图形函数cdfplot格式cdfplot(X)%作样本X(向量)的累积分布函数图形h=cdfplot(X)%h表示曲线的环柄[h,stats]=cdfplot(X)%stats表示样本的一些特征例4-50>>X=normrnd(0,1,50,1);>>[h,stats]=cdfplot(X)h=30013stats=min:-18740%样本最小值max:16924%最大值mean:00565%平均值median:01032%中间值std:07559%样本标准差图4-10463最小二乘拟合直线函数lsline格式lsline%最小二乘拟合直线h=lsline%h为直线的句柄例4-51>>X=[2345681112313816188199]';>>plot(X,'+')>>lsline464绘制正态分布概率图形函数normplot格式normplot(X)%若X为向量,则显示正态分布概率图形,若X为矩阵,则显示每一列的正态分布概率图形。h=normplot(X)%返回绘图直线的句柄说明样本数据在图中用“+”显示;如果数据来自正态分布,则图形显示为直线,而其它分布可能在图中产生弯曲。例4-53>>X=normrnd(0,1,50,1);>>normplot(X)图4-12465绘制威布尔(Weibull)概率图形函数weibplot格式weibplot(X)%若X为向量,则显示威布尔(Weibull)概率图形,若X为矩阵,则显示每一列的威布尔概率图形。h=weibplot(X)%返回绘图直线的柄说明绘制威布尔(Weibull)概率图形的目的是用图解法估计来自威布尔分布的数据X,如果X是威布尔分布数据,其图形是直线的,否则图形中可能产生弯曲。例4-54>>r=weibrnd(12,15,50,1);>>weibplot(r)图4-13466样本数据的盒图函数boxplot格式boxplot(X)%产生矩阵X的每一列的盒图和“须”图,“须”是从盒的尾部延伸出来,并表示盒外数据长度的线,如果“须”的外面没有数据,则在“须”的底部有一个点。boxplot(X,notch)%当notch=1时,产生一凹盒图,notch=0时产生一矩箱图。boxplot(X,notch,'sym')%sym表示图形符号,默认值为“+”。boxplot(X,notch,'sym',vert)%当vert=0时,生成水平盒图,vert=1时,生成竖直盒图(默认值vert=1)。boxplot(X,notch,'sym',vert,whis)%whis定义“须”图的长度,默认值为15,若whis=0则boxplot函数通过绘制sym符号图来显示盒外的所有数据值。例4-55>>x1=normrnd(5,1,100,1);>>x2=normrnd(6,1,100,1);>>x=[x1x2];>>boxplot(x,1,'g+',1,0)图4-14467给当前图形加一条参考线函数refline格式refline(slope,intercept)%slope表示直线斜率,intercept表示截距refline(slope)slope=[ab],图中加一条直线:y=b+ax。例4-56>>y=[3226313424293033322126]';>>plot(y,'+')>>refline(0,3)图4-15468在当前图形中加入一条多项式曲线函数refcurve格式h=refcurve(p)%在图中加入一条多项式曲线,h为曲线的环柄,p为多项式系数向量,p=[p1,p2,p3,…,pn],其中p1为最高幂项系数。例4-57火箭的高度与时间图形,加入一条理论高度曲线,火箭初速为100m/秒。>>h=[85162230289339381413437452458456440400356];>>plot(h,'+')>>refcurve([-491000])图4-16469样本的概率图形函数capaplot格式p=capaplot(data,specs)�ta为所给样本数据,specs指定范围,p表示在指定范围内的概率。说明该函数返回来自于估计分布的随机变量落在指定范围内的概率例4-58>>data=normrnd(0,1,30,1);>>p=capaplot(data,[-2,2])p=09199图4-174610附加有正态密度曲线的直方图函数histfit格式histfit(data)�ta为向量,返回直方图和正态曲线。histfit(data,nbins)%nbins指定bar的个数,缺省时为data中数据个数的平方根。例4-59>>r=normrnd(10,1,100,1);>>histfit(r)4611在指定的界线之间画正态密度曲线函数normspec格式p=normspec(specs,mu,sigma)%specs指定界线,mu,sigma为正态分布的参数p为样本落在上、下界之间的概率。例4-60>>normspec([10Inf],115,125)图4-1947参数估计471常见分布的参数估计命令β分布的参数a和b的最大似然估计值和置信区间函数betafit格式PHAT=betafit(X)[PHAT,PCI]=betafit(X,ALPHA)说明PHAT为样本X的β分布的参数a和b的估计量PCI为样本X的β分布参数a和b的置信区间,是一个2×2矩阵,其第1例为参数a的置信下界和上界,第2例为b的置信下界和上界,ALPHA为显著水平,(1-α)×100%为置信度。例4-61随机产生100个β分布数据,相应的分布参数真值为4和3。则4和3的最大似然估计值和置信度为99%的置信区间为:解:>>X=betarnd(4,3,100,1);%产生100个β分布的随机数>>[PHAT,PCI]=betafit(X,001)%求置信度为99%的置信区间和参数a、b的估计值结果显示PHAT=3901026193PCI=25244174885277634898说明估计值39010的置信区间是[2524452776],估计值26193的置信区间是[1748834898]。命令正态分布的参数估计函数normfit格式[muhat,sigmahat,muci,sigmaci]=normfit(X)[muhat,sigmahat,muci,sigmaci]=normfit(X,alpha)说明muhat,sigmahat分别为正态分布的参数μ和σ的估计值,muci,sigmaci分别为置信区间,其置信度为;alpha给出显著水平α,缺省时默认为005,即置信度为95%。例4-62有两组(每组100个元素)正态随机数据,其均值为10,均方差为2,求95%的置信区间和参数估计值。解:>>r=normrnd(10,2,100,2);%产生两列正态随机数据>>[mu,sigma,muci,sigmaci]=normfit(r)则结果为mu=101455100527%各列的均值的估计值sigma=1907221256%各列的均方差的估计值muci=9765296288105258104766sigmaci=16745186632215524693说明muci,sigmaci中各列分别为原随机数据各列估计值的置信区间,置信度为95%。例4-63分别使用金球和铂球测定引力常数(1)用金球测定观察值为:668366816676667866796672(2)用铂球测定观察值为:66616661666766676664设测定值总体为,μ和σ为未知。对(1)、(2)两种情况分别求μ和σ的置信度为09的置信区间。解:建立M文件:LX0833mX=[668366816676667866796672];Y=[66616661666766676664];[mu,sigma,muci,sigmaci]=normfit(X,01)%金球测定的估计[MU,SIGMA,MUCI,SIGMACI]=normfit(Y,01)%铂球测定的估计运行后结果显示如下:mu=66782sigma=00039muci=6675066813sigmaci=0002600081MU=66640SIGMA=00030MUCI=6661166669SIGMACI=0001900071由上可知,金球测定的μ估计值为66782,置信区间为[66750,66813];σ的估计值为00039,置信区间为[00026,00081]。泊球测定的μ估计值为66640,置信区间为[66611,66669];σ的估计值为00030,置信区间为[00019,00071]。命令利用mle函数进行参数估计函数mle格式phat=mle%返回用dist指定分布的最大似然估计值[phat,pci]=mle%置信度为95%[phat,pci]=mle%置信度由alpha确定[phat,pci]=mle%仅用于二项分布,pl为试验次数。说明dist为分布函数名,如:beta(分布)、bino(二项分布)等,X为数据样本,alpha为显著水平α,为置信度。例4-64>>X=binornd(20,075)%产生二项分布的随机数X=16>>[p,pci]=mle('bino',X,005,20)%求概率的估计值和置信区间,置信度为95%p=08000pci=0563409427常用分布的参数估计函数表4-7参数估计函数表函数名调用形式函数说明binofitPHAT=binofit(X,N)[PHAT,PCI]=binofit(X,N)[PHAT,PCI]=binofit(X,N,ALPHA)二项分布的概率的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计和置信区间poissfitLambdahat=poissfit(X)[Lambdahat,Lambdaci]=poissfit(X)[Lambdahat,Lambdaci]=poissfit(X,ALPHA)泊松分布的参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的λ参数和置信区间normfit[muhat,sigmahat,muci,sigmaci]=normfit(X)[muhat,sigmahat,muci,sigmaci]=normfit(X,ALPHA)正态分布的最大似然估计,置信度为95%返回水平α的期望、方差值和置信区间betafitPHAT=betafit(X)[PHAT,PCI]=betafit(X,ALPHA)返回β分布参数a和b的最大似然估计返回最大似然估计值和水平α的置信区间unifit[ahat,bhat]=unifit(X)[ahat,bhat,ACI,BCI]=unifit(X)[ahat,bhat,ACI,BCI]=unifit(X,ALPHA)均匀分布参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计和置信区间expfitmuhat=expfit(X)[muhat,muci]=expfit(X)[muhat,muci]=expfit(X,alpha)指数分布参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计和置信区间gamfitphat=gamfit(X)[phat,pci]=gamfit(X)[phat,pci]=gamfit(X,alpha)γ分布参数的最大似然估计置信度为95%的参数估计和置信区间返回最大似然估计值和水平α的置信区间weibfitphat=weibfit(X)[phat,pci]=weibfit(X)[phat,pci]=weibfit(X,alpha)韦伯分布参数的最大似然估计置信度为95%的参数估计和置信区间返回水平α的参数估计及其区间估计Mlephat=mle('dist',data)[phat,pci]=mle('dist',data)[phat,pci]=mle('dist',data,alpha)[phat,pci]=mle('dist',data,alpha,p1)分布函数名为dist的最大似然估计置信度为95%的参数估计和置信区间返回水平α的最大似然估计值和置信区间仅用于二项分布,pl为试验总次数说明各函数返回已给数据向量X的参数最大似然估计值和置信度为(1-α)×100%的置信区间。α的默认值为005,即置信度为95%。472非线性模型置信区间预测命令高斯—牛顿法的非线性最小二乘数据拟合函数nlinfit格式beta=nlinfit(X,y,FUN,beta0)%返回在FUN中描述的非线性函数的系数。FUN为用户提供形如的函数,该函数返回已给初始参数估计值β和自变量X的y的预测值。[beta,r,J]=nlinfit(X,y,FUN,beta0)�ta为拟合系数,r为残差,J为Jacobi矩阵,beta0为初始预测值。说明若X为矩阵,则X的每一列为自变量的取值,y是一个相应的列向量。如果FUN中使用了@,则表示函数的柄。例4-65调用MATLAB提供的数据文件reactionmat>>loadreaction>>betafit=nlinfit(reactants,rate,@hougen,beta)betafit=1252600628004000112411914命令非线性模型的参数估计的置信区间函数nlparci格式ci=nlparci(beta,r,J)%返回置信度为95%的置信区间,beta为非线性最小二乘法估计的参数值,r为残差,J为Jacobian矩阵。nlparci可以用nlinfit函数的输出作为其输入。例4-66调用MATLAB中的数据reaction。>>loadreaction>>[beta,resids,J]=nlinfit(reactants,rate,'hougen',beta)beta=1252600628004000112411914resids=01321-01642-00909003100114200498-0026203115-002920109600716-01501-03026J=68739-906536-578640-192880161434454-485357-136240-170300303453563-412099-263042-10521715095169500109100186002791791322967-355658-60537-0756702023118670-895655-1701745-895660440044973-144262-115409-937702574441831-417896-168937-5779410082118286-513721-1541164-2774101500191514-255948-767844-30713825790333730090000720010803526993663-1020611-1074327-358110220047512-244631-163087-10300221141>>ci=nlparci(beta,resids,J)ci=-0746732519-0037701632-0031201113-0060902857-0738131208命令非线性拟合和显示交互图形函数nlintool格式nlintool(x,y,FUN,beta0)%返回数据(x,y)的非线性曲线的预测图形,它用2条红色曲线预测全局置信区间。beta0为参数的初始预测值,置信度为95%。nlintool(x,y,FUN,beta0,alpha)%置信度为(1-alpha)×100%例4-67调用MATLAB数据>>loadreaction>>nlintool(reactants,rate,'hougen',beta)
四种聚类方法之比较
介绍了较为常见的k-means、层次聚类、SOM、FCM等四种聚类算法,阐述了各自的原理和使用步骤,利用国际通用测试数据集IRIS对这些算法进行了验证和比较。结果显示对该测试类型数据,FCM和k-means都具有较高的准确度,层次聚类准确度最差,而SOM则耗时最长。
关键词:聚类算法;k-means;层次聚类;SOM;FCM
聚类分析是一种重要的人类行为,早在孩提时代,一个人就通过不断改进下意识中的聚类模式来学会如何区分猫狗、动物植物。目前在许多领域都得到了广泛的研究和成功的应用,如用于模式识别、数据分析、图像处理、市场研究、客户分割、Web文档分类等[1]。
聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同数据尽量分离。
聚类技术[2]正在蓬勃发展,对此有贡献的研究领域包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等。各种聚类方法也被不断提出和改进,而不同的方法适合于不同类型的数据,因此对各种聚类方法、聚类效果的比较成为值得研究的课题。
1 聚类算法的分类
目前,有大量的聚类算法[3]。而对于具体应用,聚类算法的选择取决于数据的类型、聚类的目的。如果聚类分析被用作描述或探查的工具,可以对同样的数据尝试多种算法,以发现数据可能揭示的结果。
主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法[4-6]。
每一类中都存在着得到广泛应用的算法,例如:划分方法中的k-means[7]聚类算法、层次方法中的凝聚型层次聚类算法[8]、基于模型方法中的神经网络[9]聚类算法等。
目前,聚类问题的研究不仅仅局限于上述的硬聚类,即每一个数据只能被归为一类,模糊聚类[10]也是聚类分析中研究较为广泛的一个分支。模糊聚类通过隶属函数来确定每个数据隶属于各个簇的程度,而不是将一个数据对象硬性地归类到某一簇中。目前已有很多关于模糊聚类的算法被提出,如著名的FCM算法等。
本文主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。
2 四种常用聚类算法研究
21 k-means聚类算法
k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则,其定义如下:
这里E是数据库中所有对象的平方误差的总和,p是空间中的点,mi是簇Ci的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。k-means聚类算法的算法流程如下:
输入:包含n个对象的数据库和簇的数目k;
输出:k个簇,使平方误差准则最小。
步骤:
(1) 任意选择k个对象作为初始的簇中心;
(2) repeat;
(3) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇;
(4) 更新簇的平均值,即计算每个簇中对象的平均值;
(5) until不再发生变化。
22 层次聚类算法
根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。
凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。四种广泛采用的簇间距离度量方法如下:
这里给出采用最小距离的凝聚层次聚类算法流程:
(1) 将每个对象看作一类,计算两两之间的最小距离;
(2) 将距离最小的两个类合并成一个新类;
(3) 重新计算新类与所有类之间的距离;
(4) 重复(2)、(3),直到所有类最后合并成一类。
23 SOM聚类算法
SOM神经网络[11]是由芬兰神经网络专家Kohonen教授提出的,该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。
SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。
算法流程:
(1) 网络初始化,对输出层每个节点权重赋初值;
(2) 将输入样本中随机选取输入向量,找到与输入向量距离最小的权重向量;
(3) 定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;
(4) 提供新样本、进行训练;
(5) 收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。
24 FCM聚类算法
1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合’的概念。经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析,就是模糊聚类分析[12]。
FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。
算法流程:
(1) 标准化数据矩阵;
(2) 建立模糊相似矩阵,初始化隶属矩阵;
(3) 算法开始迭代,直到目标函数收敛到极小值;
(4) 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。
3 四种聚类算法试验
31 试验数据
实验中,选取专门用于测试分类、聚类算法的国际通用的UCI数据库中的IRIS[13]数据集,IRIS数据集包含150个样本数据,分别取自三种不同的莺尾属植物setosa、versicolor和virginica的花朵样本,每个数据含有4个属性,即萼片长度、萼片宽度、花瓣长度,单位为cm。在数据集上执行不同的聚类算法,可以得到不同精度的聚类结果。
32 试验结果说明
文中基于前面所述各算法原理及算法流程,用matlab进行编程运算,得到表1所示聚类结果。
如表1所示,对于四种聚类算法,按三方面进行比较:(1)聚错样本数:总的聚错的样本数,即各类中聚错的样本数的和;(2)运行时间:即聚类整个过程所耗费的时间,单位为s;(3)平均准确度:设原数据集有k个类,用ci表示第i类,ni为ci中样本的个数,mi为聚类正确的个数,则mi/ni为第i类中的精度,则平均精度为:
33 试验结果分析
四种聚类算法中,在运行时间及准确度方面综合考虑,k-means和FCM相对优于其他。但是,各个算法还是存在固定缺点:k-means聚类算法的初始点选择不稳定,是随机选取的,这就引起聚类结果的不稳定,本实验中虽是经过多次实验取的平均值,但是具体初始点的选择方法还需进一步研究;层次聚类虽然不需要确定分类数,但是一旦一个分裂或者合并被执行,就不能修正,聚类质量受限制;FCM对初始聚类中心敏感,需要人为确定聚类数,容易陷入局部最优解;SOM与实际大脑处理有很强的理论联系。但是处理时间较长,需要进一步研究使其适应大型数据库。
聚类分析因其在许多领域的成功应用而展现出诱人的应用前景,除经典聚类算法外,各种新的聚类方法正被不断被提出。
以上就是关于MATLAB程序与数学实验全部的内容,包括:MATLAB程序与数学实验、Matlab随机划分训练集和测试集、几种主要类聚方法的比较和试验等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)