r语言聚类分析

来源:互联网 发布:ubuntu 网卡重启不生效 编辑:程序博客网 时间:2024/05/22 11:36
聚类分析
k-均值聚类:
1、随机选取k个样本作为类中心;
2、计算各样本与各类中心的距离;
3、将各样本归于最近的类中心点;
4、求各类的样本的均值,作为新的类中心;
5、判定:若类中心不再发生变动或达到迭代次数,算法结束,否则回到第2步。
代码:
x <- 1:100   #生成数据点y <- 50:149plot(x,y)center_1 <- c(x[1],y[1])  #初始化类中心center_2 <- c(x[2],y[2])n <- length(x)   #统计样本个数m <- 3dis <- matrix(nrow = n,ncol = m)sqrt((x[1]-center_1[1])^2+(y[1]-center_1[2])^2)sqrt((x[1]-center_2[1])^2+(y[1]-center_2[2])^2)while(TRUE){  for(i in 1:n){    dis[i,1] <- sqrt((x[i]-center_1[1])^2+(y[i]-center_1[2])^2)    dis[i,2] <- sqrt((x[i]-center_2[1])^2+(y[i]-center_2[2])^2)  }  for(i in 1:n){    dis[i,3] <- which.min(dis[i,1:2])  }    mean(x[dis[,3]==1])  mean(y[dis[,3]==1])    mean(x[dis[,3]==2])  mean(x[dis[,3]==2])  center_1_new <- c(mean(x[dis[,3]==1]),mean(y[dis[,3]==1]))  center_2_new <- c(mean(x[dis[,3]==2]),mean(y[dis[,3]==2]))    if(all(center_1==center_1_new) & all(center_2==center_2_new)){    break  }    center_1 <- center_1_new  center_2 <- center_2_new}
k-中心点聚类
k-中心点算法与k-均值算法在原理上十分相近,它是针对k-均值算法易受极值影响这一缺点的改进算法。在原理上的差异在于选择各类别中心点时不取样本均值点,而在类别内选取到其余样本距离之和最小的样本为中心。
层次聚类
层次聚类的名称在于,其聚类的过程可以通过类似于系谱图的形式呈现出来。相比k-均值算法与k-中心点算法,系谱算法的突出特点在于,不需要事先设定类别数k,这是因为它每次迭代过程叫仅将距离最近的两个样本/簇聚为一类,其运作过程将自然得到k=n至k=1(n为待分类样本总数)个类别的聚类结果。
原创粉丝点击