聚类分析算法解析

上传人:桔**** 文档编号:572453733 上传时间:2024-08-13 格式:PDF 页数:4 大小:157.02KB
返回 下载 相关 举报
聚类分析算法解析_第1页
第1页 / 共4页
聚类分析算法解析_第2页
第2页 / 共4页
聚类分析算法解析_第3页
第3页 / 共4页
聚类分析算法解析_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《聚类分析算法解析》由会员分享,可在线阅读,更多相关《聚类分析算法解析(4页珍藏版)》请在金锄头文库上搜索。

1、.聚类分析算法解析聚类分析算法解析一、不相似矩阵计算一、不相似矩阵计算1.1.加载数据加载数据data(iris)data(iris)str(iris)str(iris)分类分析是无指导的分类,所以删除数据中的原分类变量。iris$Species-NULLiris$Species-NULL2.2. 不相似矩阵计算不相似矩阵计算不相似矩阵计算,也就是距离矩阵计算,在 R 中采用 dist()函数,或者 cluster 包中的 daisy()函数。dist()函数的根本形式是dist(*, method = euclidean, diag = FALSE, upper = FALSE, p = 2

2、)其中 *是数据框数据集 ,而方法可以指定为欧式距离euclidean, 最大距离ma*imum, 绝对值距离manhattan, canberra, 二进制距离非对称binary 和明氏距离minkowski。默认是计算欧式距离, 所有的属性必须是一样的类型。 比方都是连续类型,或者都是二值类型。dd-dist(iris)dd-dist(iris)str(dd)str(dd)距离矩阵可以使用 as.matri*()函数转化了矩阵的形式,方便显示。Iris 数据共 150例样本间距离矩阵为 150 行列的方阵。下面显示了15 号样本间的欧式距离。dd-as.matri*(dd)dd-as.ma

3、tri*(dd)二、用二、用 hclust()hclust()进展谱系聚类法层次聚类进展谱系聚类法层次聚类1.1.聚类函数聚类函数R 中自带的聚类函数是 hclust(),为谱系聚类法。根本的函数指令是结果对象 - hclust距离对象, method=方法hclust()可以使用的类间距离计算方法包含离差法ward,最短距离法single, 最大距离法plete,平均距离法average,mcquitty,中位数法median 和重心法centroid。下面采用平均距离法聚类。hc - hclust(dist(iris), method=ave)hc .下面列出了聚类结果对象hc 包含的 m

4、erge 和 height 结果值的前 6 个。 其行表示聚类过程的步骤,*1,*2 表示在该步合并的两类,该为负代表原始的样本序号,为正代表新合成的类;变量 height 表示合并时两类类间距离。比方第 1 步,合并的是样本 102 和 143,其样本间距离是 0.0,合并后的类则使用该步的步数代表,即样本-102 和-143 合并为 1 类。再如第 6 行表示样本 11 和 49 合并,该两个样本的类间距离是0.1,合并后的类称为 6 类。head (hc$merge,hc$height)head (hc$merge,hc$height)下面显示的聚类结果对象hc 包含的 merge 和

5、height 结果值的 5055 步的结果。第 50 步结果说明样本 43 与 13 类即第 13 步的聚类合类结果合并。所有的类负数j 表示原数据的样本,正数i 表示聚类过程的第 i 步形成的新类。再如54 步,表示聚类过程第7 步和第 37步形成的类合并为新类,新类成为第54 类,其类间距离是 0.2641715。data.frame(hc$merge,hc$height)50:55data.frame(hc$merge,hc$height)50:553.3.绘制聚类图绘制聚类图聚类完成后可以使用 plot()绘制出聚类的树图。plot(hc, hang = -1, labels=iris

6、$Species)plot(hc, hang = -1, labels=iris$Species)4.4.指定分类和类中心聚类指定分类和类中心聚类通过观察树形图, 可见由于数据例很多, 使图形很乱, 不容易确定合理的分类, 为简化图形,使用 cutree()来确定最初的分类结果,先初步确定各个样本的最初分类的类数后,然后用hclust()再次聚类,重新聚类后,得出最后的分类结果。memb - cutree(hc, k = 10) #memb - cutree(hc, k = 10) #确定确定 1010 个分类个分类table(memb) #table(memb) #各类中的样本数各类中的样本

7、数为了进展重新聚类, 需要计算各类的类中心的类中心, 这里用各类的均向量来代表各类的类中心,计算程序如下。cent - NULLcent - NULLfor(k in 1:10)for(k in 1:10) cent - rbind(cent, colMeans(irisSamplememb = k, , drop = FALSE) cent - rbind(cent, colMeans(irisSamplememb = k, , drop = FALSE) 有了各类的类中心后,再次使用hclust()函数,从10 类起重新开场聚类。hclust()函数这时需要指定各类的类中心,并采用中心法来

8、聚类。hc1 - hclust(dist(cent), method = centroid, members = table(memb)hc1 .再次聚类的树形图就很精简了。从树形图上看,确定为三类是比拟适宜的。4.4.输出最终分类结果输出最终分类结果使用 cutree()来确定输出各个样本的最后分类。memb - cutree(hc, k =3 #memb - cutree(hc, k =3 #确定确定 3 3 个分类个分类table(memb) #table(memb) #各类中的样本数各类中的样本数下面将聚类结果和原始的分类比拟可见聚类结果是不错的。 错误率约为 14/150=9.33%

9、。5.5.直接数据距离阵聚类直接数据距离阵聚类可以直接输入距离矩阵,然后用as.dist()函数转为 hclust()可以使用的距离阵对象,然后再用 hclust()再进展聚类分析。*-read.table(te*t=*-read.table(te*t=id BA FI MI VO RM TOid BA FI MI VO RM TOBA 0 662 877 255 412 996BA 0 662 877 255 412 996FI 662 0 295 468 268 400FI 662 0 295 468 268 400MI 877 295 0 754 564 138MI 877 295 0

10、754 564 138VO 255 468 754 0 219 869VO 255 468 754 0 219 869RM 412 268 564 219 0 669RM 412 268 564 219 0 669TO 996 400 138 869 669 0,header=T)TO 996 400 138 869 669 0,header=T)row.names(*)-*$idrow.names(*)-*$id*$id-NULL*$id-NULL* *转换为距离阵。*-as.dist(*)*-as.dist(*)hc .library(cluster)library(cluster)dai

11、sy()函数的形式和 dist()相似,可以采用的距离包含欧式距离euclidean, 绝对值距离和manhattan, gower。dd2-daisy(iris)dd2-daisy(iris)dd2-as.matri*(dd1)dd2-as.matri*(dd1)2.2.使用使用 agens()agens()聚类聚类cluster 包提供了两种层次聚类的方法,一种是a bottom-up 自底而上,采用先将数据样本先各自看成一类,然后通过合并法的聚类过程,最终形成一个大类,包含全部样本,agnes()函数完成这个功能,这个称为合并层次聚类。而 diana()则采用相反的方法,即 atop-d

12、own 自顶而下,先将所有样本看成一类,然后通过分裂类的过程将样品最终分为各自样本类,这个称为分裂法。agens()函数的形式是agnes(*, diss = TRUE|FALSE, metric = euclidean, stand = FALSE|TRUE, method = average, par.method, keep.diss = n 100, keep.data = !diss)其中的 diss 指定*对象是否是不相似矩阵对象,与hclust()函数不同,agnes()既可以使用原始数据也可以采用距离阵。stand 是要求对数据进展标准化,而可以采用的类间距离计算方法有aver

13、age平均法,UPGMA, single最短距离法,plete最大距离法,ward离差法,weighted权重平均距离法和fle*ible弹性法。keep.diss 和keep.data 指定在结果中是否保存不相似矩阵和数据,保存这些结果需要更多的存。ag - agnes(iris, diss=F, metric=euclidean, stand=F, method =single)data.frame(ag$merge,ag$height)50:55,plot(ag, ask = FALSE, which.plots = NULL)cutree(ag,k=3)装载数据loadadultuci.rdata)str(AdultUCI)删除原来的目标变量AdultUCI$ine-NULL删除原始据中数据缺失的数据例AdultUCI

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号