层次聚类--R
来源:互联网 发布:数据分析在职研究生 编辑:程序博客网 时间:2024/06/12 19:07
层次聚类
层次聚类
层次聚类,又称为系统聚类。聚类首先要清晰地定义样本之间的距离关系,距离较近的为一类,较远的则属于不同的一类。层次聚类的计算步骤是首先将每个样本单独作为一类,然后将不同类之间最近的进行合并,合并后重新计算类间距。这个过程一直持续到将所有样本归为一类为之。
在计算类间距时有6中不同的常用方法:
最短距离、最长距离、类平均、重心、中间距离、离差平方和法。
R中实现的函数是stats包中的hclust。该函数重要的参数包括:
样本间的距离矩阵、以及计算类间距离的方法。
看一个例子:
首先提取iris数据中的4个数据变量,标准化后计算其欧式距离矩阵。
data <- iris[,-5]means <- sapply(data,mean);SD <- sapply(data,sd)dataScale <- scale(data,center=means,scale=SD) #scale 标准化函数Dist <- dist(dataScale,method="euclidean")
根据矩阵绘制热图,从图中可以看出颜色越深表示样本间距离越近,大致上可以区分出三到四个区块,其样本之间距离比较近。
heatmap(as.matrix(Dist),labRow = F,labCol = F) ###绘制热图
最后使用hclust函数建立聚类模型,将结果存在clusteModel变量中,其中ward参数是将类间距离计算方法设置为离差平方和法。
cutree函数可以提取每个样本所属的类别,如果设置类别为3类
ClusteModel <- hclust(Dist,method = "ward.D")result <- cutree(ClusteModel,k=3)table(iris[,5],result)
观察真实的类别与聚类之间的差别,virginica类错分了23个样本
result 1 2 3 setosa 49 1 0 versicolor 0 50 0 virginica 0 23 27
画出聚类树图
plot(ClusteModel)
层次聚类对于数据规模小的数据比较适合
聚类前无需确定聚类个数,之后切分组可根据业务知识/聚类树图特征
若样本量很大,尝试使用fastcluster包进行快速层次聚类
library(fastcluster)ClusteModel <- hclust(Dist,method = "ward.D")
聚类需要将距离矩阵作为输入,所以聚类的关键是距离计算方法的选择,这种选择很大程度地影响聚类的效果,而这种选择往往依赖具体的引用场景。
R中一些常规的距离可以通过dist得到,其他一些比较特殊的距离需要加载proxy包。
若遇到二分类变量,可采用杰卡德(Jaccard)方法计算他们之间的距离。(method=“Jaccard”)
- 层次聚类--R
- R聚类算法-层次聚类算法
- R WGCNA基础(2)——层次聚类
- R语言使用层次聚类处理数据
- R语言将层次聚类中的树分成簇
- 基于层次的聚类----AGNES算法使用(R语言)
- 基于层次的聚类----AGNES算法使用(R语言)
- R语言之系统聚类(层次)分析之图谱形式完整版
- 基于R语言的聚类分析(k-means,层次聚类)
- R语言 : 层次聚类分析
- R语言实现层次聚类分析
- MATLAB 层次聚类
- 层次聚类算法
- 层次聚类
- 层次聚类算法
- 层次聚类方法
- 层次聚类算法
- 层次聚类
- Java的21个核心技术点,你知道吗?
- 详解Java中ArrayList、Vector、LinkedList三者的异同点
- POJ2996 Help Me with the Game(未完待续,模拟)
- vector & list
- 重排序列(水题)
- 层次聚类--R
- 最大似然估计
- POJ
- 2667: [cqoi2012]模拟工厂
- 多线程第三章(1)
- 【vue】webpack打包vue项目并且运行在Tomcat里面
- PAT乙级1013. 数素数 (20) 判断素数代码
- F
- 【DP?】买卖股票