matlab聚类分析代码(matlab的聚类分析)


怎样用matlab作聚类分析啊?求作T_T T_T

展示如何使用MATLAB进行聚类分析

matlab聚类分析代码(matlab的聚类分析)matlab聚类分析代码(matlab的聚类分析)


matlab聚类分析代码(matlab的聚类分析)


matlab聚类分析代码(matlab的聚类分析)


分别运用分层聚类、K均值聚类以及高斯混合模型来进行分析,然后比较三者的结果

生成随机二维分布图形,三个中心

% 使用高斯分布(正态分布)

% 随机生成3个中心以及标准

s = rng(5,'v5normal');

mu = round((rand(3,2)-0.5)19)+1;

sigma = round(rand(3,2)40)/10+1;

X = [mvnrnd(mu(1,:),sigma(1,:),200); ...

mvnrnd(mu(2,:),sigma(2,:),300); ...

mvnrnd(mu(3,:),sigma(3,:),400)];

% 作图

P1 = figure;clf;

scatter(X(:,1),X(:,2),10,'ro');

title('研究样本散点分布图')

K均值聚类

% 距离用传统欧式距离,分成两类

[cidx2,cmeans2,sumd2,D2] = kmeans(X,2,'dist','sqEuclidean');

P2 = figure;clf;

[silh2,h2] = silhouette(X,cidx2,'sqeuclidean');

从轮廓图上面看,第二类结果比较好,但是类有部分数据表现不佳。有相当部分的点落在0.8以下。

分层聚类

eucD = pdist(X,'euclidean');

clustTreeEuc = linkage(eucD,'erage');

cophenet(clustTreeEuc,eucD);

P3 = figure;clf;

[h,nodes] = dendrogram(clustTreeEuc,20);

set(gca,'TickDir','out','TickLength',[.002 0],'XTickLabel',[]);

可以选择dendrogram显示的结点数目,这里选择20 。结果显示可能可以分成三类

重新调用K均值法

改为分成三类

[cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean');

P4 = figure;clf;

[silh3,h3] = silhouette(X,cidx3,'sqeuclidean');

图上看,比前面的结果略有改善。

将分类的结果展示出来

P5 = figure;clf

ptsymb = {'bo','ro','go',',mo','c+'};

MarkFace = {[0 0 1],[.8 0 0],[0 .5 0]};

hold on

for i =1:3

clust = find(cidx3 == i);

plot(X(clust,1),X(clust,2),ptsymb{i},'MarkerSize',3,'MarkerFace',MarkFace{i},'MarkerEdgeColor','black');

plot(cmeans3(i,1),cmeans3(i,2),ptsymb{i},'MarkerSize',10,'MarkerFace',MarkFace{i});

end

hold off

运用高斯混合分布模型进行聚类分析

分别用分布图、热能图和概率图展示结果 等高线

% 等高线

options = statset('Display','off');

gm = gmdistribution.fit(X,3,'Options',options);

P6 = figure;clf

scatter(X(:,1),X(:,2),10,'ro');

hold on

ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);

hold off

P7 = figure;clf

scatter(X(:,1),X(:,2),10,'ro');

hold on

ezsurf(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);

hold off

view(33,24)

热能图

cluster1 = (cidx3 == 1);

cluster3 = (cidx3 == 2);

% 通过观察,K均值方法的第二类是gm的第三类

cluster2 = (cidx3 == 3);

% 计算分类概率

P = terior(gm,X);

P8 = figure;clf

plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),'r.')

grid on;hold on

plot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),'bo')

plot3(X(cluster3,1),X(cluster3,2),P(cluster3,3),'g')

legend('第 1 类','第 2 类','第 3 类','Location','NW')

clrmap = jet(80); colormap(clrmap(9:72,:))

ylabel(colorbar,'Component 1 Posterior Probability')

view(-45,20);

% 第三类点部分概率值较低,可能需要其他数据来进行分析。

% 概率图

P9 = figure;clf

[~,order] = sort(P(:,1));

plot(1:size(X,1),P(order,1),'r-',1:size(X,1),P(order,2),'b-',1:size(X,1),P(order,3),'y-');

legend({'Cluster 1 Score' 'Cluster 2 Score' 'Cluster 3 Score'},'location','NW');

ylabel('Cluster Membership Score');

xlabel('Point Ranking');

通过AIC准则寻找的分类数

高斯混合模型法的好处是给出分类好坏的标准

AIC = zeros(1,4);

NlogL = AIC;

GM = cell(1,4);

for k = 1:4

GM{k} = gmdistribution.fit(X,k);

AIC(k)= GM{k}.AIC;

NlogL(k) = GM{k}.NlogL;

end

[minAIC,numComponents] = min(AIC);

按AIC准则给出的分类数为: 3 对应的AIC值为: 8647.63

后记

(1)pluskid指出K均值算法的初值对结果很重要,但是在运行时还没有发现类似的结果。也许Mathworks对该算法进行过优化。有时间会仔细研究下代码,将结果放上来。

分享:

56

喜欢

4赠金笔

阅读(21209)┊ 评论 (4)┊ 收藏(1) ┊转载原文 ┊ 喜欢▼ ┊打印┊

前一篇:[转载]拉普拉斯矩阵

后一篇:[转载]用matlab做聚类分析

怎样用matlab实现K-means聚类算法

直接用kmeans函数。。。

idx = kmeans(X,k)

idx = kmeans(X,k,Name,Value)

[idx,C] = kmeans(___)

[idx,C,sumd] = kmeans(___)

[idx,C,sumd,D] = kmeans(___)

idx = kmeans(X,k) performs k-means clustering to partition the observations of the n-by-p data matrix X into k clusters, and returns an n-by-1 vector (idx) containing cluster inds of each observation. Rows of X correspond to points and columns correspond to variables.

By default, kmeans uses the squared Euclidean distance measure and the k-means++ algorithm for cluster center initialization.

example

idx = kmeans(X,k,Name,Value) returns the cluster inds with additional options specified by one or more Name,Value pair arguments.

For example, specify the cosine distance, the number of times to repeat the clustering using new initial values, or to use parallel computing.

example

[idx,C] = kmeans(___) returns the k cluster centroid locations in the k-by-p matrix C.

example

[idx,C,sumd] = kmeans(___) returns the within-cluster sums of point-to-centroid distances in the k-by-1 vector sumd.

example

[idx,C,sumd,D] = kmeans(___) returns distances from each point to ry centroid in the n-by-k matrix D.

MATLAB 代码,用高斯混合模型聚类分析处理xlsx文件,只需要三行代码

MATLAB是以矩阵为基本的数据运算单位,它能够很好的与C语言进行混合编程,对于符号运算,其可以直接调用maple的命令,增加了它的适用范围。下面就为大家介绍MATLAB如何读写Excel数据文件的步骤

材料/工具

电脑,MATLAB软件

读取excel文件

1双击打开excel数据文件夹

2使用MATLAB中提供的系统函数xlsread函数,其主要的调用形式为:a=xlsread('filename.xls'),其中a表示读入文件所保存的变量名称,filename.xls(或者filename.xlsx)表示excel数据文件

3对于上图所示的数据文件,只需要使用下面的命令进行读取即可:A = xlsread('data.xlsx')

如果数据文件保存在excel的某个sheet中,使用方式为: A = xlsread('data.xlsx','Sheet1')

写入excel文件

1需要使用MATLAB中提供的系统函数xlswrite()函数,其主要的调用形式为:

xlswrite('filename.xls',variable);

其中variable表示需要写入Excel文件的变量名称,filename.xls(或者filename.xlsx)表示excel数据文件,帮助文档中对xlswrite()函数的介绍如下图所示:

2对于上图所示的数据文件,只需要使用下面的命令进行读取即可:xlswrite('output.xlsx',A)

MATLAB数据分析方法 主成份-聚类分析 matlab

result = result.replaceAll(">s<", "><").replaceAll("|^?])?>", "");

String json = result;

Matcher matcher = "<([^>|^/])>").matcher(result);

while(matcher.find()){

for (int i = 0; i < matcher.groupCount(); i++) {

String s = matcher.group(i+1);

json = json.replaceAll("<"+s+">([^<|^"])", """+s+"":"$1",");

}}

matlab聚类分析只能30个吗

matlab聚类分析不是只能30个。matlab聚类分析可以多于30个也可以少于30个,但在30个之后画聚类图的方式会有所改变。30个之后画图方式如下:

1、x=数据;n行p列n不宜大于80,否则系统聚类的线条密集,不易区分)x=pdist(x);计算成对比较的距离z=erage。

2、用类平均法erage和或最小组内平方和法ward系统聚类dendrgram(z,0),画出系统聚类图。

如何在亚马逊上买东西 亚马逊怎么买东西
上一篇
古代的五谷杂粮指的是什么,历史背景其
下一篇
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 836084111@qq.com ,一经查实,本站将立刻删除。

相关推荐