近期工作关系用到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来进行聚类分析。如果有需要解答的问题请留言,笔者会尽其所能地回答。
内容
分别运用分层聚类、K均值聚类以及高斯混合模型来进行分析,然后比较三者的结果
% 使用高斯分布(正态分布) |
% 距离用传统欧式距离,分成两类 |
从轮廓图上面看,第二类结果比较好,但是第一类有部分数据表现不佳。有相当部分的点落在0.8以下。
eucD = pdist(X,'euclidean'); P3 = figure;clf; |
可以选择dendrogram显示的结点数目,这里选择20 。结果显示可能可以分成三类
改为分成三类
[cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean'); |
图上看,比前面的结果略有改善。
P5 = figure;clf |
分别用分布图、热能图和概率图展示结果 等高线
% 等高线 P6 = figure;clf P7 = figure;clf
热能图 % 概率图 |
高斯混合模型法的最大好处是给出分类好坏的标准
AIC = zeros(1,4); |
按AIC准则给出的最优分类数为: 3 对应的AIC值为: 8647.63
后记
(1)pluskid指出K均值算法的初值对结果很重要,但是在运行时还没有发现类似的结果。也许Mathworks对该算法进行过优化。有时间会仔细研究下代码,将结果放上来。