01、聚类分析
在没有先验知识的情况下,对样本按各自的特性来进行合理的分类
聚类分析:不需要先知道所属类别就可以实现按各自特性的分类
聚类分析有两种主要计算方法,分别是凝聚层次聚类(Agglomerative hierarchical method)和K均值聚类(K-Means)
(1)层次聚类首先要定义样本之间的距离关系,距离较近的归为一类,较远的则属于不同的类。
(2)K均值聚类不需要计算距离,但要求事先给出分类个数
02、iris聚类分析
2.1、层次聚类
ris数据集包含5个方面的信息,为了探索聚类分析,所以采用前4个变量作为模型前期数据,使用species作为聚类模型结果的验证。
(1)首先提取iris数据中的4个数值变量,然后计算其欧氏距离矩阵。
(2)然后将矩阵绘制热图,从图中可以看到颜色越深表示样本间距离越近·
从图中可以看到颜色越深表示样本间距离越近。大致上可以区分出三到四个区块,其样本之间比较接近。
data<-iris[,-5] #删除第五行
dist.e <- dist(data,method='euclidean') #变量间欧式距离的数据集
heatmap(as.matrix(dist.e),labRow = F, labCol = F)
使用hclust完成数据集的层次聚类,plot函数可以查看聚类结果
使用cutree函数提取每个样本所属的类别
#--------------------------------------------->2、层次聚类模型
#建立聚类模型
model1<-hclust(dist.e,method='ward.D') #采用离差平方和法处理距离
plot(model1) #绘制聚类树图:没什么用的结果
result<-cutree(model1,k=3) #使用cutree函数提取每个样本所属的类别
到此就完成了150个数据的类别划分
可视化展现层次聚类结果
setose品种聚类很成功,但有一些virginica品种的花被错误和virginica品种聚类到一起
#------------------------------------------------->3、层次聚类结果展示
#----------------------------------------------------->3.1、MDS降维
mds<-cmdscale(dist.e,k=2,eig=T)
x <- mds$points[,1]
y <- mds$points[,2]
#----------------------------------------------------->3.2、聚类结果显示
#以不同的的形状表示原本的分类,用不同的颜色来表示聚类的结果
library(ggplot2)
p<-ggplot(data.frame(x,y),aes(x,y))
p+geom_point(size=3,alpha=0.8,aes(colour=factor(result),shape=iris$Species))
#setose品种聚类很成功,但有一些virginica品种的花被错误和virginica品种聚类到一起
2.2、K均值聚类
使用kmeans函数进行K均值聚类
model2<-kmeans(data,centers=3,nstart=10)
model2$cluster #model2$cluster可以用来提取每个样本所属的类别
data$type<-model2$cluster
data$id<-rownames(data)
centers参数用来设置分类个数,
nstart参数用来设置取随机初始中心的次数,其默认值为1,但取较多的次数可以改善聚类效果
K均值聚类后,数据集的结果为:
如果聚类正确的话,圆形点对应红色;三角形对应蓝色;方框对应绿色
K均值聚类setose品种聚类比较好,但有一些virginica品种的花被错误和virginica品种聚类到一起