主题: [MATLAB基础] 求聚类分析程序
查看单个帖子
旧 2009-09-29, 08:15   #3
slgu
高级会员
 
注册日期: 2007-06-24
年龄: 70
帖子: 188
声望力: 21
slgu 正向着好的方向发展
默认 回复: 求聚类分析程序

若将n个数据点(x)分成g组,主要有两种聚类方法。
一是系统聚类,先将每一点视为一类,按某种规则计算类间距离(第一步时即为点间距离),然后将最相近的两类合并成一新类,重新(按规则)计算类间距离(只需计算新类与其它类的类间距离,其它类间距离没有发生变化,不必计算),再将最相近的两类合并。如此反复,直至所有点成为一类。这里,计算类间距离的规则有6种,亦即形成了6种基本的系统聚类方法:最近距离法、最远距离法、中间距离法、重心法、类平均法、最小组内平方和法。在matlab中,这可以通过以下几个命令实现:
y=pdist(x,' '),% ' '中为计算空间距离的选项
z=linkage(y,' '),% ' '中为类间距离的选项,对应有,single, complete, median, centroid, average, ward 等。
最后画出聚类树:dendrogram(z), or dendrogram(z,0)
另一类是动态聚类,它在给定初始聚类的基础上,反复修改分类,使分类趋于某种事先设定的标准(目标函数),最终得到一个优化的目标函数,对应于一个优化的分类。在matlab中,仅有组中心距离最短(现改为组中心距离和最小)这一目标函数的kmeans法,这可通过:
kmeans(x,g)
实现。
但这种方法的能力有限,不一定能实现全距最优分类。
若将数据(最好是数据点原始数据,亦即x数据)置上,可以代为聚类,实现各类不同方法优化的动态聚类。
slgu 当前离线   回复时引用此帖