R语⾔-聚类与分类⼀.聚类:
⼀般步骤:
1.选择合适的变量
2.缩放数据
3.寻找异常点
4.计算距离
5.选择聚类算法
6.采⽤⼀种或多种聚类⽅法
7.确定类的数⽬
8.获得最终聚类的解决⽅案
9.结果可视化
10.解读类
11.验证结果
1.层次聚类分析gardens
the green hornet 案例:采⽤flexclust的营养数据集作为参考
1.基于5种营养标准的27类鱼,禽,⾁的相同点和不同点是什么
2.是否有⼀种办法把这些⾷物分成若⼲各类
1.1计算距离
1 data(nutrient,package = 'flexclust')
2 head(nutrient,4)
3 d <- dist(nutrient)
4 as.matrix(d)[1:4,1:4]
结论:观测的距离越⼤,异质性越⼤
1.2平均联动聚类
1 row.names(nutrient) <- tolower(row.names(nutrient))
2 nutrient.scaled <- scale(nutrient)
3 d2 <- dist(nutrient.scaled)
4 fit.average <- hclust(d2,method = 'average')
5 plot(fit.average,hang=-1,cex=.8,main='Average Linkage Clustering')
结论:只能提供⾷物营养成分的相似性和相异性
1.3获取聚类的个数
1 library('NbClust')
2 devAskNewPage(ask = T)
服装店铺陈列3 nc <- NbClust(nutrient.scaled, distance="euclidean",
4 =2, =15, method="average")
5 table(nc$Best.n[1,])
6 barplot(table(nc$Best.n[1,]),
7 xlab = 'Number of Clusters',ylab = 'Number of Criteria',
8 main='Number of Clusters chon by 26 criteria')
结论:分别有4个投票数最多的聚类(2,3,5,15),从中选择⼀个更适合的聚类数 1.4获取聚类的最终⽅案
1# 聚类分配情况
2 clusters <- cutree(fit.average,k=5)
3 table(clusters)
4# 描述聚类
5 aggregate(nutrient,by=list(clusters=clusters),median)
英文文章格式
囫囵睡是什么意思6 aggregate(as.data.frame(nutrient.scaled),by=list(clusters=clusters),median)
7 plot(fit.average,hang=-1,cex=.8,main='Average Linkpage Clustering\n 5 Cluster Solution')
8 rect.hclust(fit.average,k=5)
结论:
1.sardines canned形成⾃⼰的类,因为钙含量⽐较⾼
2.beef heart也是单独的类,富含蛋⽩质和铁
3.beef roast到pork simmered含有⾼能量和脂肪
4.clams raw到clams canned含有较⾼的维⽣素
5.mackerel canned到bluefish baked含有较低的铁
ncp是什么 2.划分聚类分析
案例:采⽤rattle.data中的wine数据集进⾏分析
1.葡萄酒数据的K均值聚类
# 使⽤卵⽯图确定类的数量
wssplot <- function(data,nc=15,ed=1234){
wss <- (nrow(data)-1) * sum(apply(data,2,var))
for (i in 2:nc) {
t.ed(ed)
wss[i] <- sum(kmeans(data,centers = i)$withinss)
}
plot(1:nc,wss,type = 'b',xlab = 'Number of Clusters',ylab = 'Within groups sum of squares') }
1 data(wine,package = 'rattle.data')
2
3 head(wine)
4 df <- scale(wine[-1])
5 wssplot(df)
6 library(NbClust)自考英语论文
7 t.ed(1234)
8# 确定聚类的数量
9 nc <- NbClust(df, =2, =15, method="kmeans")
10 table(nc$Best.n[1,])
11 barplot(table(nc$Best.n[1,]),
12 xlab="Numer of Clusters", ylab="Number of Criteria",
13 main="Number of Clusters Chon by 26 Criteria")
14 t.ed(1234)
15# 进⾏k值聚类分析
16 fit.km <- kmeans(df, 3, nstart=25)
17 fit.km$size
18 fit.km$centers
19 aggregate(wine[-1], by=list(cluster=fit.km$cluster), mean)
结论:分3个聚类对数据有很好的拟合
# 使⽤兰德系数来量化类型变量和类之间的协议
ct.km <- table(wine$Type,fit.km$cluster)
library(flexclust)
randIndex(ct.km)
结论:拟合结果优秀
围绕中⼼点的分类:因为K均值聚类⽅法是基于均值的,所以对异常值较为敏感,更为稳健的⽅法是围绕中⼼点的划分, k均值聚类⼀般使⽤欧⼏⾥得距离,⽽PAM可以使⽤任意的距离来计算
好听的伤感英文歌
1 library(cluster)
2 t.ed(1234)
3 fit.pam <- pam(wine[-1],k=3,stand = T)
4 fit.pam$medoids
5 clusplot(fit.pam,main = 'Bivariate Cluster Plot')
6 ct.pam <- table(wine$Type,fit.pam$clustering)
7 randIndex(ct.pam)
唯一英文
结论:调整后的兰德指数从之前的0.9下降到0.7
3.避免不存在的聚类anyhow
3.1查看数据集
1 library(fMultivar)
2 t.ed(1234)
3 df <- rnorm2d(1000,rho=.5)
4 df <- as.data.frame(df)
5 plot(df,main='Bivariate Normal Distribution with rho=0.5')
结论:没有存在的类
3.2计算聚类的个数
library(NbClust)
nc <- NbClust( = = 15,method = 'kmeans')
barplot(table(nc$Best.n[1,]),xlab="Numer of Clusters", ylab="Number of Criteria", main="Number of Clusters Chon by 26 Criteria")
结论:⼀共可分为3各类
3.3聚类图像