R语言-18聚类

作者: 周一ing | 来源:发表于2019-10-04 16:51 被阅读0次

介绍及应用

是一种无监督的学习算法,根据样本之间的距离或者其他度量,把相似的样本聚集在一起,从而将样本划分出多个类别。在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。

两种基本的聚类思想

1、K 均值(k-means)聚类:定义K个点基于距离慢慢靠拢成K个类的过程

  • 定义 K 个重心。一开始这些重心是随机的(也有一些更加有效的用于初始化重心的算法)
  • 寻找最近的重心并且更新聚类分配。将每个数据点都分配给这 K 个聚类中的一个。每个数据点都被分配给离它们最近的重心的聚类。这里的「接近程度」的度量是一个超参数——通常是欧几里得距离(Euclidean distance)。
  • 将重心移动到它们的聚类的中心。每个聚类的重心的新位置是通过计算该聚类中所有数据点的平均位置得到的。

2、层次聚类:每个点都是一个类别,慢慢合并的过程,最终划分几个类别人为指定

  • 首先从 N 个聚类开始,每个数据点一个聚类。
  • 将彼此靠得最近的两个聚类融合为一个。现在你有 N-1 个聚类。
  • 重新计算这些聚类之间的距离。其中一种方法(平均连接聚类,average-linkage clustering)是将两个+ 聚类之间的距离看作是它们各自元素之间所有距离的平均。
  • 重复第 2 和 3 步,直到你得到包含 N 个数据点的一个聚类。你就会得到如下图所示的树(也被称为树状图))。
    选择一个聚类数量,然后在这个树状图中划一条水平线。比如说,如果你想要 K=2 个聚类,你应该在距离大约为 20000 的位置画一条水平线,你会得到一个包含数据点 8、9、11、16 的聚类和包含其它数据点的另一个聚类。一般而言,你得到的聚类的数量就是水平线与树状图中的竖直线的交叉点的数量。

R语言聚类(k-中心聚类)

k-中心聚类是基于K-means算法的改进:具体介绍http://shiyanjun.cn/archives/1398.html

library(cluster)
gower_dist<-daisy(highdata,metric="gower")#计算混合类型数据的距离
summary(gower_dist)
#利用轮廓系数来确定最佳的聚类个数
sil_width<-c(NA)
for(i in 2:14){
  pam_fit<-pam(gower_dist,
               diss=TRUE,
               k = i)
  sil_width[i]<-pam_fit$silinfo$avg.width
  
}
#绘制不同聚类个数对应的轮廓系数图,选择轮廓系数不再明显下降对应的聚类个数,这里结果是2
plot(1:14, sil_width,
     xlab = "Number of clusters",
     ylab = "Silhouette Width")
lines(1:14,sil_width)

pam_fit <- pam(gower_dist, diss = TRUE, k = 2) #建立聚类数为2类的聚类模型

pam_results <- highdata %>%
mutate(cluster = pam_fit$clustering) %>%
  group_by(cluster) %>%
  do(the_summary = summary(.))
#展示聚类结果的属性特征
print(pam_results$the_summary)

相关文章

网友评论

    本文标题:R语言-18聚类

    本文链接:https://www.haomeiwen.com/subject/jsrspctx.html