R语言之聚类
2014-04-17 08:39
274 查看
利用轮廓系数判断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(d =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
1 2 2 3 4 4)
二、返回对象
avg.silwidth:平均轮廓值.(即每一个聚类中心距离之差的平均值)
# 基于层次聚类的方法
hc <- hclust(dist(data), method="cen") # 类中心的距离还可以有很多方法
如 ave,median,complete等
# 绘制聚类结果 (看起来三个效果好一些)
plot(hc);
plot(hc, hang=-1) #
hang:负数会在纵坐标0以下,正值则在以上,默认为0.1
# 然后只取三个聚类 "剪枝"
memb <- cutree(hc, k =3)
memb;
table(memb, iris[,5]) # 判断一下(效果不好)
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(d =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
1 2 2 3 4 4)
二、返回对象
avg.silwidth:平均轮廓值.(即每一个聚类中心距离之差的平均值)
# 基于层次聚类的方法
hc <- hclust(dist(data), method="cen") # 类中心的距离还可以有很多方法
如 ave,median,complete等
# 绘制聚类结果 (看起来三个效果好一些)
plot(hc);
plot(hc, hang=-1) #
hang:负数会在纵坐标0以下,正值则在以上,默认为0.1
# 然后只取三个聚类 "剪枝"
memb <- cutree(hc, k =3)
memb;
table(memb, iris[,5]) # 判断一下(效果不好)
相关文章推荐
- R语言学习之聚类分析
- 基于划分的聚类----K-means算法使用(R语言)
- R语言三种聚类
- R语言聚类算法之密度聚类(Density-based Methods)
- 分类数据聚类&决策树探索聚类因素-R语言
- 利用R语言如何聚类
- R语言——分类、聚类、关联、时间序列功能及其所用的包
- R语言聚类算法之期望最大化聚类(Expectation Maximization Algorithm)
- R语言获取优化的k均值聚类
- R语言聚类算法之k均值聚类(K-means)
- 最全的R语言聚类树形图画法
- R语言-聚类分析相关函数
- R语言做聚类分析Kmeans时确定类的个数
- R语言:中文分词和聚类
- R语言 层次聚类(系统聚类)
- 基于层次的聚类----AGNES算法使用(R语言)
- R语言简单聚类分析
- R语言聚类分析
- R语言进行中文分词和聚类
- R语言 密度聚类