上一篇文章给大家介绍了利用 R语言的 hclust()进行聚类分析的步骤,已经很简单了,但是依然有不少小伙伴来问 “老师,还有更简单的方法吗,最好是一条命令那种”,为了满足的大家的需求,小编也是查了很多资料,终于给大家找到了一个满意的答案,今天就和小编一起来看看 R语言怎么用一行命令来实现聚类分析吧。
加载数据
data(iris)str(iris)
![ca5ff6c566170c4dd7934effc6aaf18b.png](https://i-blog.csdnimg.cn/blog_migrate/345066aa56c5c31e8c03cb31e26b429a.jpeg)
输出
iris$Species
使用agens()聚类
cluster 包提供了两种层次聚类的方法,一种是 bottom-up 自底而上,采用先将数据样本先各自看成一类,然后通过合并法的聚类过程,最终形成一个大类,包含全部样本,agnes()函数完成这个功能,这个称为合并层次聚类。而 diana()则采用相反的方法,即 top-down 自顶而下,先将所有样本看成一类,然后通过分裂类的过程将样品最终分为各自样本类,这个称为分裂法。
agens()函数的形式
agnes(x, diss = TRUE|FALSE, metric = "euclidean", stand = FALSE|TRUE, method = "average", par.method, keep.diss = n < 100, keep.data = !diss)
其中的 diss指定 x对象是否是不相似矩阵对象,与 hclust()函数不同,agnes() 既可以使用原始数据也可以采用距离矩阵。stand 是是否要对数据进行标准化,可以采用的类间距离计算方法有 “average”平均法, “UPGMA”, “single”最短距离法, “complete”最大距离法, “ward”离差法, “weighted”权重平均距离法和 “flexible”弹性法。 keep.diss和 keep.data指定在结果中是否保留不相似矩阵和数据,保留这些结果需要更多的内存。
一条命令实现聚类分析
直接对原始数据进行聚类,样本间的不相似度度量使用欧式距离 euclidean,类间距离计算使用最短距离法 single。
直接对原始数据进行聚类,样本间的相似度度量使用欧式距离 euclidean,类间距离计算使用最短距离法 single。ag
![c52c7f4c9f36b4df9bf162c7bd7ff3c8.png](https://i-blog.csdnimg.cn/blog_migrate/35659e2a23fb5ca14794b595ce14c40c.jpeg)
输出
- 查看部分聚类过程
data.frame(ag$merge,ag$height)[50:55,]
![fe3f9060c4b202f577de189875680eae.png](https://i-blog.csdnimg.cn/blog_migrate/e3de9d65e582e1d5ac56ade65b7c0cf6.jpeg)
输出
- 聚类结果可视化
plot(ag, ask = FALSE, which.plots = NULL)
![5fc29858b87c6a288919ee273a61755b.png](https://i-blog.csdnimg.cn/blog_migrate/67c9553c28aedc3a5857de4df71c8d4d.jpeg)
输出
![f01eb4f1dcb07b9f82d168fb163962a8.png](https://i-blog.csdnimg.cn/blog_migrate/e216f5645e042179935e33bdd3bfc8a3.jpeg)
输出
- 输出样本所属的类别
假设聚为3 类,输出每个样本所属的类别。
cutree(ag, k=3)
![be9e88473f86d5a91d34abc4b2142fc7.png](https://i-blog.csdnimg.cn/blog_migrate/67959ee2690c70b7f837356ae30c01d2.jpeg)
输出
注:图中开头的[1]里的数字表示,接下来的样本是第几个样本。