许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  用MATLAB进行聚类分析:方法与实例

用MATLAB进行聚类分析:方法与实例

阅读数 4
点赞 0
article_banner

期工作关系用到Matlab做聚类分析。所谓聚类分析,其目的在于将研究的数据样本划分为不同类别。Matlab的统计工具箱提供了相应的分析工具。相关概念在网上可以找到不少资料,这里推荐两个博客供大家参考。

pluskid的漫谈 Clustering 系列: http://blog.pluskid.org/?page_id=78

赵扶风的层次聚类:http://hi.baidu.com/neuxxm01/item/6337bdb3b7f26c74254b0991

两个博客多倾向于 聚类算法  的分析,因为聚类分析可划归为计算机人工智能领域里面无监督的学习。这里不打算就算法进行深入,需要的读者可去咨询上面两位牛人。个人觉得漫谈系列讲解较通俗易懂,赵扶风的可当做进阶。

本文中的例子较接近pluskid的漫谈系列。Matlab本身带有Cluster分析的例子。该例子也是经典的聚类分析案例——对IRIS数据聚类分析。可在Mathworks的主页找到相关资料,地址:

Matlab的Cluster 分析工具 http://www.mathworks.cn/cn/help/stats/cluster-analysis.html

本文重点是展示如何用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,'average'); 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
运用高斯混合分布模型进行聚类分析

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


% 概率图

        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对该算法进行过优化。有时间会仔细研究下代码,将结果放上来。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空