R小盐准备介绍R语言机器学习与预测模型的学习笔记
你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】
01 什么是聚类分析
聚类分析,简单的说,就是对数据分群,它以相似性为基础,相同类中的样本比不同类中的样本更具相似性。在商业应用中,聚类通常用来划分用户群,然后分别加以研究。另外,它还可以挖掘数据中潜在的模式,基于此改进业务流程或设计新产品等。常见的聚类算法有k-Means 算法、系统聚类算法,下面将依次介绍。
1.1 K-Means
K-Means算法是一种基于划分的经典聚类算法,对于给定的含有N条记录的数据集,算法将把数据集分成k组(k<N),使得每-分组至少包含-条数据记录,每条记录属于且仅属于一个分组。
算法首先会给出一个随机初始的分组,再通过反复迭代改变分组,使每一次改进的分组比 上-次好,用于衡量好的标准通常是:同-分组中的记录越近越好,而不同分组中的记录越远越好,通常使用欧氏距离作为相异性度量。K-Means 实现的基本流程如图所示。
其基本步骤如下:
①从数据中随机抽取K个点作为初始聚类的K个中心,分别代表K个聚类
②计算数据中所有的点到这K个中心点的距离,通常是欧氏距离
③将每个点归属到离其最近的聚类里,生成K个聚类
④重新计算每类的中心点,即计算每类中所有点的几何中心(即平均值)
⑤如果满足终止条件,算法将结束;否则,进入第②步。
终止条件通常有如下三种:
①聚类的中心点不再移动
②聚类的中心点移动的大小在给定的阀值范围内
③迭次次数达到上限
#重构数据
ap.data<-t(mapply(function(i){AirPassengers[(12*(i-1)+1):(i*12)]},1:12))
#标准化曲线
ap.data.std<-t(apply(ap.data,1,function(x){(x-min(x))/(max(x)-min(x))}))
#使用kmeans函数进行聚类,假定分成两类
kOut<-kmeans(ap.data.std,centers=2,nstart=20,iter.max=200)
#聚类统计情况如下
table(kOut$cluster)
#设置类标签
ap.data.std<-cbind(ap.data.std,kOut$cluster)
#画出曲线图
plot(1:12,1:12,col='white',ylim=c(0,1),xlab="年份",ylab="标准化值")
for(i in 1:nrow(ap.data.std))
{
lines(1:12,ap.data.std[i,1:12],col=ap.data.std[i,13]+2)
}
legend(1,1,c("类1","类2"),lty=1,col=c("blue","green "))
1.2 系统聚类算法
系统聚类法是目前国内外使用比较多的一种聚类方法,它首先将每个样本单独看成一类,在规
定类间距离的条件下,选择距离最小的一对合并成一个新类,并计算新类与其他类之间的距离,再将距离最近的两类合并,这样每次会减少-个类,直到所有的样本合为一类为止。常用的距离包括绝对值距离、欧氏距离、明氏距离、切比雪夫距离、马氏距离、兰氏距离、余弦距离。同时,类间距离也有很多定义方法,主要有:类平均法、可变类平均法、可变法、重心法、中间距离法、最长距离法、最短距离法、离差平方法。
系统聚类实现的一般步骤如下:
①将每个样品看成一类
②计算类间距离矩阵,并将距离最近的两类合并成为一个新类
③计算新类与当前各类之间的距离。若类的个数等于1,则进行下一步,否则转到第2步
④画聚类图
⑤决定聚类数目和类别
在R语言中,通常使用hclust函数来做系统聚类,它的定义及参数说明如表所示。
02 聚类分析R语言实现
#重构数据
ap.data<-t(mapply(function(i){AirPassengers[(12*(i-1)+1):(i*12)]},1:12))
#标准化曲线
ap.data.std<-t(apply(ap.data,1,function(x){(x-min(x))/(max(x)-min(x))}))
#使用hclust函数进行聚类
hc<-hclust(dist(ap.data.std),method="ward.D2")
plot(hc)
rect.hclust(hc,k=2)
#设置类标签
ap.data.std<-cbind(ap.data.std,cutree(hc,k=2))
#画出曲线图
plot(1:12,1:12,col='white',ylim=c(0,1))
for(i in 1:nrow(ap.data.std))
{
lines(1:12,ap.data.std[i,1:12],col=ap.data.std[i,13]+2)
}
legend(1,1,c("类1","类2"),lty=1,col=c("blue","green "))
关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型
网友评论