聚类分析有两种主要计算方法,分别是层次聚类和K均值聚类
一、层次聚类
层次聚类又称为系统聚类,首先要定义样本之间的距离关系,距离较近归为一类,较远则属于不同类。
可用于定义“距离”的统计量包括
1.欧氏距离(euclidean)
2.马氏距离(manhattan)
3.两项距离(binary)
4.明氏距离(minkowski)
还包括相关系数和夹角余弦
层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。
在计算类间距离时则有六种不同的方法,分别是
1.最长距离法:complete 默认
2.最短距离法:single
3.中间距离法:median
4.类平均法:average
6.重心法:centroid
7.离差平方和法:ward
在这里我们先做出实例数据:
x=runif(20)
y=runif(20)
S=cbind(x,y)
rownames(S)=paste("Name",1:20,"") #赋予名称
out.dist=dist(S,method="euclidean") #数值变距离
这个代码运行得到的S是一个矩阵:
可以看出里面共有20个点,它们的X,Y坐标已知.
根据上面提到的6种求距离类型可知,我们有6种方法可以求矩阵。
我们用默认的算法求距离:
out.hclust=hclust(out.dist,method="complete") #根据最长距离聚类
接下来把聚类结果图画出来
plot(out.hclust) #对结果画图
rect.hclust(out.hclust,k=3) #用矩形画出分为3类的区域
out.id=cutree(out.hclust,k=3) #得到分为3类的数值
二、K均值聚类
K均值聚类又称为动态聚类,它的计算方法较为简单,也不需要输入距离矩阵。首先要指定聚类的分类个数N,随机取N个样本作为初始类的中心,计算各样本与类中心的距离并进行归类,所有样本划分完成后重新计算类中心,重复这个过程直到类中心不再变化。
R中使用 kmeans 函数进行K均值聚类,centers参数用来设置分类数,nstart参数用来设置取随机初始中心的次数,其默认值为1,但取较多次数可以改善聚类效果。model2$cluster可以用来提取每个样本所属类别。
下面用 iris 数据集进行聚类分析
data=iris[,-5]
model2=kmeans(data,centers=3,nstart=10)
往期「精彩内容」,点击回顾
DNA测序历史 | CircRNA数据库 | Epigenie表观综合 | 癌症定位
BWA介绍 | 源码安装R包 | CancerLocator | lme4 | 450K分析
乳腺癌异质性 | BS-Seq | 隐马模型 | Circos安装 | Circos画图
KEGG标记基因 | GDSC | Meta分析 | R线性回归和相关矩阵
精彩会议及课程,点击回顾