R语言之聚类


利用轮廓系数判断k均值聚类的个数

1、kmeans聚类处理的数据必须是数值型numeric,并且必须是matrxi或者data frame

2、轮廓系数可以使用 fpc包

3、聚类效果没有特殊的评价标准,聚类的个数可以采用这个来判定。

4、聚类个数的其它方法
     亦可采用分层聚类方法,从图形结果划分的类别hclust(见最后)

library(fpc)

data <- iris[,1:4]

定义存放轮廓系数的向量

re<-c()

for(i in2:5) {

result<- kmeans(data, i)

stats<- cluster.stats(dist(data), result$cluster)

re[i]<- stats$avg.silwidth

};

re

final <- which.max(re划分成2个聚类

print(re[final]) 轮廓系数


结果解读:

从结果来看,貌似应该分成2类更加合适(第二个数最大实际数据分为3


# 再练一次

re<-c()

for(iin4:6){

result<-kmeans(data,i)

stats<-cluster.stats(dist(data),result$cluster)

re[i]<-stats$avg.silwidth

}


re

结果解析:

如果聚类指定从4类开始,返回的结果为:

# [1]        NA        NA        NA 0.4965169 0.3711254 0.3599431

从结果看出,前三个NA分别表示了前三个聚类(因为没有参与计算,结果为NA)



fpc包中 关键的函数

cluster.stats(=NULL, clustering, alt.clustering =NULL,

                           noisecluster=FALSE,

                              silhouette =TRUE, G2 =FALSE, G3 =FALSE,

                              wgap=TRUE, sepindex=TRUE, sepprob=0.1,

                              sepwithnoise=TRUE,

                              compareonly =FALSE,

                              aggregateonly =FALSE)

一、输入参数
d : 距离对象(使用dist(data[,"数值型属性"]))

clustering:使用kmeans拟合后的对象(result)cluster(聚类结果),数值型向量(1 1 2 2 3 4 4)

二、返回对象
avg.silwidth:平均轮廓值.(即每一个聚类中心距离之差的平均值)




基于层次聚类的方法


hc <- hclust(dist(data), method="cen"类中心的距离还可以有很多方法 如 ave,median,complete等

绘制聚类结果 (看起来三个效果好一些)

plot(hc);

plot(hchang=-1# hang:负数会在纵坐标0以下,正值则在以上,默认为0.1

然后只取三个聚类 "剪枝"

memb <- cutree(hc, k =3)

memb;

table(membiris[,5]) 判断一下(效果不好)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值