Hierarchical clustering, also known as hierarchical cluster ***ysis, is an algorithm that groups similar objects into groups called clusters. The endpoint is a set of clusters, where each cluster is distinct from each other cluster, and the objects within each cluster are broadly similar to each other.
上篇文章R数据分析:如何做聚类分析,实操解析中介绍了Kmeans聚类 ,本文给大家写层次聚类的R语言实现:
基本思想:
1、开始时,将每个样本作为一类。
2、规定某种度量作为样本之间距离以及类距离之间的度量,并且计算之。(用的是hculster里边的dist 以及method属性)
3、将距离最短的两个类合并为一个类。
4、重复2-3,即不断合并最近的两个类,每次减少一个类,直到所有的样本合并为一个类。
点与点的距离和类与类之间距离的计算有很多 ,大家可以自行查阅相关资料理解。今天给大家写一个具体应用的实例:
数据介绍
今天依然是用大家最熟悉的鸢尾花数据集
data(iris) plot(iris)
聚类之前我们必须要将数据集进行标准化,这么做的目的就是要消除不同的特征不同的量纲,数值差异等的影响:
irisScaled <- scale(iris[, -5])
层次聚类实操
首先层次聚类的之一步就是计算样本之间的距离:
d <- dist(irisScaled[, 1:4]) fitH <- hclust(d, "ward.D2")
咱们知道层次聚类就是以距离为基础的,所以我们首先是用dist 计算一个样本的距离矩阵:
This function computes and returns the distance matrix computed by using the specified distance measure to compute the distances between the rows of a data matrix.
上面就是关于dist 的解释,其中默认的计算距离的 为"euclidean"距离,还有很多可选的 "euclidean", "maximum", "manhattan", "canberra", "binary" or "minkowski",大家都可以试试。
我们得到距离矩阵之后就使用hclust 进行层次聚类了。
对于生成的聚类结果,我们也可以画出来:
plot(fitH)
现在就得到一个完整的层次聚类的树,一层一层的往上聚,比如我们现在想要三类,那么我们亦可以在图上框出来:
rect.hclust(fitH, k = 3, border = "red")
框完了之后我们最想知道的是一个具体的样本到底属于哪一类,这个时候我们就要将这个树进行切割,很形象哈:
clusters <- cutree(fitH, k = 3)
上面代码生成的clusters对象就是算法对每个样本的类划分结果,也就是聚类结果:
对于上面的结果我们也可以在原始数据中用相应的颜色标注:
plot(iris, col = clusters)
小结
今天给大家写了层次聚类的实际操作,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
R数据分析:如何做聚类分析,实操解析
K-means聚类详解,小白看过来
python非监督机器学习入门:K均值聚类实例操练
R数据分析:鸢尾花数据集的聚类分析实操
python机器学习:分类问题学习模型的评价 及代码实现
R语言作图:分类变量与连续变量关系的图形化表达
R数据分析:如何计算问卷的聚合效度,实例操练