R语言将层次聚类中的树分成簇

Python022

R语言将层次聚类中的树分成簇,第1张

R语言将层次聚类中的树分成簇

说明

在聚类树图中可以观测到聚类的层次,但是仍然得不到组的信息,不过我们可以定义一个聚类树图会拥有多少个簇,并控制树的高度以便将树分成不同的组。

操作

接上节的数据hc

将数据分成四组

fit = cutree(hc,4)

检查数据的簇标签

fit

[1] 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 3 4 3 4 3 3 4 4 3 4 4 4 3 3 3 4 4 3 4 4 4 4 4 4 4 3 3 4 4 4 3 4 3 3 4 4 4 3 4 4 3

统计每一个簇中的对象数

table(fit)

fit

1 2 3 4

11 8 16 25

使用红色矩形框可视化矩形的簇

plot(hc,hang = -0.01,cex =0.7)

rect.hclust(hc,k=4,border = "red")

除了使用红色矩形来框来界定簇,还可以使用它对单独某个簇进行标记:

plot(hc,hang = -0.01,cex =0.7)

rect.hclust(hc,k = 4,which = 2,border = "red")

标记特定簇

还可以调用dendextend包,使用不同的颜色来绘制红色矩形框的各个不同聚簇。

根据分支所在的不同簇,对其涂色

library(dendextend)#delete

dend %>% color_branches(k=4) %>% plot(horiz = TRUE,main = "Horizontal Dendrogram")

不同簇不同色

在这些簇周围添加红色矩形框

dend %>% color_branches(k=4) %>% plot(horiz = TRUE,main = "Horizontal Dendrogram")

dend %>% rect.dendrogram(k=4,horiz = TRUE)

最后,在图中添加一条切割线来展示对树的操作结:

dend %>% color_branches(k=4) %>% plot(horiz = TRUE,main = "Horizontal Dendrogram")

dend %>% rect.dendrogram(k=4,horiz = TRUE)

abline(v = heights_per_k.dendrogram(dend)["4"] + .1,lwd = 2,lty = 2,col = "blue")

水平聚类树中绘制分割线

首先R是一种专业性很强的统计语言,如果想学得快一些的话,基本的统计学知识要懂,不然很多东西会掌握的比较慢。

掌握基本语法和操作,推荐国内的已经翻译的比如《R语言实战》《R语言编程艺术》,这个过程中最好结合一些小例子来做一些分析的东西。其他还有《R语言实例》《R语言核心技术手册》也都是很好的书!如果需要可视化的话,强烈不推荐学习R本身的作图系统,实在是太不友好了.....还是用ggplot2吧。

掌握了上面的,就可以深入一些了,如果是做数据分析和可视化,推荐《ggplot2:数据分析与图形艺术》,这个才是作图的神器啊.....如果是空间分析相关的,推荐《Applied Spatial Data Analysis with R》,这个如果可以的话看英文版,而且要有地学的一些知识背景,中文版翻译的太次了,尽量不要看。数据挖掘机器学习之类的,可以看看比如《数据挖掘与R语言》、《机器学习——实用案例解析》,不过我觉得这几本书没上面的那几本好,但是可以大概看看是咋回事,最好还是看看专门的相关书籍,熟悉各种算法和流程,到时候搜索R的package,照着文档和例子搞定,不是特别难。

最后,强烈推荐统计之都、R-bloggers,统计之都以及谢益辉、肖凯、刘思喆等人的博客(自行Google以及到上面的网站找链接),订阅一下,会很有帮助,RStudio是个很棒的IDE,用起来很爽,功能很强大。

总之,你可以从《R语言实战》开始出发吧!

你是要做聚类分析是吧,应该是用这个函数是吧hclust(d, method = "complete", members = NULL)。你在r里面输入?hclust。d代表不同结构的分布,你可以运行一下这个程序看一下

require(graphics)

hc <- hclust(dist(USArrests), "ave")

plot(hc)

plot(hc, hang = -1)