[Rcode]聚类分析

本文介绍了一种使用R语言进行聚类分析的方法,包括计算距离、层次聚类分析、选择聚类个数及最终聚类方案的过程,并展示了如何利用划分聚类分析进行数据处理。
#聚类分析一般步骤[见R in action343]
#计算距离,d<-dist(x,method=)

#层次聚类分析(以平均联动聚类为例)
if(!require('flexclust'))
{
  install.packages('flexclust')
  require('flexclust')
}
data(nutrient,package="flexclust")
row.names(nutrient)<-tolower(row.names(nutrient))          #把行名转化为小写
nutrient.scale<-scale(nutrient)                            #标准化变量
d<-dist(nutrient.scale)
fit.average<-hclust(d,method="average")
plot(fit.average,hang=-1,cex=.8,main="Average Linkage Clustering")
 ##选择聚类的个数
 install.packages("NbClust")
 library(NbClust)
 devAskNewPage(ask=T)
 nc<-NbClust(nutrient.scale,distance = "euclidean",min.nc=2,max.nc=15,method="average") 
 table(nc$Best.n[1,]) 
 barplot(table(nc$Best.n[1,]),
        xlab="Number of Clusters",ylab="Number of Ceiteria",
        main="Number of Clusters Chosen by 26 Ceiteria")
 ##选择最终的聚类方案
 clusters<-cutree(fit.average,k=5)
 table(clusters) 
 aggregate(nutrient,by=list(cluster=clusters),median)      #描述聚类
 aggregate(as.data.frame(nutrient.scale),by=list(cluster=clusters),median)
 plot(fit.average,hang=-1,cex=.8,main="Average Linkage Clustering\n5 Cluster Solution") 
 rect.hclust(fit.average,k=5)                              #用于叠加五类的解决方法

#划分聚类分析
 ##划分聚类分析(对于异常值是敏感的)
 
 ##围绕中心点的划分(更稳健)
 library(cluster)
 set.seed(1234)
 fit.pam<-pam(nutrient[-1],k=3,stand=T)            #去除第一列数据
 fit.pam$medoids                                   #输出中心点
 clusplot(fit.pam,main="Cluster Plot")             #画出聚类的方案
 
 ##Rand index考察分类效果
 library(flexclust)
 randIndex() 
 
 ##避免不存在的类
 install.packages("fMultivar")
 library(fMultivar)
 set.seed(1234)
 df<-rnorm2d(1000,rho=.5)
 df<-as.data.frame(df)
 plot(df,main="Bivariate Normal Distribution with rho=0.5")
 nc<-NbClust(df,min.nc=2,max.nc=15,method="kmeans")
 
 plot(nc$All.index[,4],type="o",ylab="CCC",xlab="Number of clusters",col="blue")
 #当CCC值为负并且对于两类或是更多类递减时,就是典型的单峰分布  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值