原文链接:http://tecdat.cn/?p=9997

原文出处:拓端数据部落公众号


k-medoids聚类简介

k-medoids是另一种聚类算法,可用于在数据集中查找分组。k-medoids聚类与k-means聚类非常相似,除了一些区别。k-medoids聚类算法的优化功能与k-means略有不同。在本节中,我们将研究k-medoids聚类。

k-medoids聚类算法

有许多不同类型的算法可以执行k-medoids聚类,其中最简单,最有效的算法是PAM。在PAM中,我们执行以下步骤来查找集群中心:

  1. 从散点图中选择k个数据点作为聚类中心的起点。

  2. 计算它们与散点图中所有点的距离。

  3. 将每个点分类到最接近中心的聚类中。

  4. 在每个群集中选择一个新点,以使该群集中所有点与自身的距离之和最小。

  5. 重复  步骤2,  直到中心停止变化。

可以看到,除了步骤1  和  步骤4之外,PAM算法与k-means聚类算法相同  。对于大多数实际目的,k-medoids聚类给出的结果几乎与k-means聚类相同。但是在某些特殊情况下,我们在数据集中有离群值,因此首选k-medoids聚类,因为它比离群值更健壮。

k-medoids聚类代码

在本节中,我们将使用在上两节中使用的相同的鸢尾花数据集,并进行比较以查看结果是否明显不同于上次获得的结果。

实现k-medoid聚类

在本练习中,我们将使用R的预构建库执行k-medoids:

  1. 将数据集的前两列存储在  iris_data  变量中:

    iris_data<-iris[,1:2]
  2. 安装  软件包:

    install.packages("cluster")
  3. 导入  软件包:

    library("cluster")
  4. 将PAM聚类结果存储在  km.res  变量中:

    km<-pam(iris_data,3)
  5. 导入库:

    library("factoextra")
  6. 在图中绘制PAM聚类结果:

    fviz_cluster(km, data = iris_data,palette = "jco",ggtheme = theme_minimal())

    输出如下:

    图:k-medoids聚类的结果

k-medoids聚类的结果与我们在上一节中所做的k-means聚类的结果没有太大差异。

因此,我们可以看到前面的PAM算法将我们的数据集分为三个聚类,这三个聚类与我们通过k均值聚类得到的聚类相似。

图:k-medoids聚类与k-means聚类的结果

在前面的图中,观察k均值聚类和k均值聚类的中心如何如此接近,但是k均值聚类的中心直接重叠在数据中已有的点上,而k均值聚类的中心不是。

k-均值聚类与k-medoids聚类

现在我们已经研究了k-means和k-medoids聚类,它们几乎是完全相同的,我们将研究它们之间的区别以及何时使用哪种类型的聚类:

  • 计算复杂度:在这两种方法中,k-medoids聚类在计算上更加复杂。当我们的数据集太大(> 10,000点)并且我们想要节省计算时间时,相对于k-medoids聚类,我们更倾向于k-means聚类。

    数据集是否很大完全取决于可用的计算能力。

  • 离群值的存在:k均值聚类比离群值更容易对离群值敏感。

  • 聚类中心:k均值算法和k聚类算法都以不同的方式找到聚类中心。

使用k-medoids聚类进行客户细分

使用客户数据集执行k-means和k-medoids聚类,然后比较结果。

步骤:

  1. 仅选择两列,即杂货店和冷冻店,以方便地对集群进行二维可视化。

  2. 使用k-medoids聚类绘制一个图表,显示该数据的四个聚类。

  3. 使用k均值聚类绘制四簇图。

  4. 比较两个图,以评论两种方法的结果如何不同。

结果将是群集的k均值图,如下所示:

图:集群的预期k均值图

确定最佳群集数

到目前为止,我们一直在研究鸢尾花数据集,在该数据集中我们知道有多少种花,并根据这一知识选择将数据集分为三个簇。但是,在无监督学习中,我们的主要任务是处理没有任何信息的数据,例如,数据集中有多少个自然簇或类别。同样,聚类也可以是探索性数据分析的一种形式。

聚类指标的类型

确定无监督学习中最佳聚类数的方法不止一种。以下是我们将在本章中研究的内容:

  • 轮廓分数

  • 弯头法/ WSS

  • 差距统计

轮廓分数

轮廓分数或平均轮廓分数计算用于量化通过聚类算法实现的聚类质量。

轮廓分数在1到-1之间。如果聚类的轮廓分数较低(介于0和-1之间),则表示该聚类散布开或该聚类的点之间的距离较高。如果聚类的轮廓分数很高(接近1),则表示聚类定义良好,并且聚类的点之间的距离较低,而与其他聚类的点之间的距离较高。因此,理想的轮廓分数接近1。

计算轮廓分数

我们学习如何计算具有固定数量簇的数据集的轮廓分数:

  1. 将iris数据集的前两列(隔片长度和隔宽度)放在  iris_data  变量中:

  2. 执行k-means集群:

  3. 将k均值集群存储在  km.res  变量中:

  4. 将所有数据点的成对距离矩阵存储在  pair_dis  变量中:

  5. 计算数据集中每个点的轮廓分数:

  6. 绘制轮廓分数图:

    输出如下:

  7. 图:每个群集中每个点的轮廓分数用单个条形表示

前面的图给出了数据集的平均轮廓分数为0.45。它还显示了聚类和点聚类的平均轮廓分数。

我们计算了三个聚类的轮廓分数。但是,要确定要拥有多少个群集,就必须计算数据集中多个群集的轮廓分数。

确定最佳群集数

针对k的各个值计算轮廓分数来确定最佳的簇数:

从前面的图中,选择得分最高的k值;即2。根据轮廓分数,聚类的最佳数量为2。

  1. 将数据集的前两列(长度和宽度)放在  iris_data  变量中:

  2. 导入  库

  3. 绘制轮廓分数与簇数(最多20个)的图形:

    注意

    在第二个参数中,可以将k-means更改为k-medoids或任何其他类型的聚类。

    输出如下:

    图:聚类数与平均轮廓分数

WSS /肘法

为了识别数据集中的聚类,我们尝试最小化聚类中各点之间的距离,并且平方和(WSS)方法可以测量该距离  。WSS分数是集群中所有点的距离的平方的总和。

使用WSS确定群集数

在本练习中,我们将看到如何使用WSS确定集群数。执行以下步骤。

  1. 将虹膜数据集的前两列(隔片长度和隔片宽度)放在  iris_data  变量中:

  2. 导入  库

  3. 绘制WSS与群集数量的图表

    输出如下:

  4. 图:WSS与群集数量

在前面的图形中,我们可以将图形的肘部选择为k = 3,因为在k = 3之后WSS的值开始下降得更慢。选择图表的肘部始终是一个主观选择,有时可能会选择k = 4或k = 2而不是k = 3,但是对于这张图表,很明显k> 5是不适合k的值,因为它们不是图形的肘部,而是图形的斜率急剧变化的地方。

差距统计

差距统计数据是在数据集中找到最佳聚类数的最有效方法之一。它适用于任何类型的聚类方法。通过比较我们观察到的数据集与没有明显聚类的参考数据集生成的聚类的WSS值,计算出Gap统计量。

因此,简而言之,Gap统计量用于测量观察到的数据集和随机数据集的WSS值,并找到观察到的数据集与随机数据集的偏差。为了找到理想的聚类数,我们选择k的值,该值使我们获得Gap统计量的最大值。

利用间隙统计量计算理想的簇数

在本练习中,我们将使用Gap统计信息计算理想的聚类数目:

  1. 将Iris数据集的前两列(隔片长度和隔片宽度)放在  iris_data  变量中

  2. 导入  factoextra  库

  3. 绘制差距统计与集群数量(最多20个)的图表:

    图1.35:差距统计与集群数量

如上图所示,Gap统计量的最大值是k = 3。因此,数据集中理想的聚类数目为3。

找到理想的细分市场数量

使用上述所有三种方法在客户数据集中找到最佳聚类数量:

将变量中的批发客户数据集的第5列到第6列加载。

  1. 用轮廓分数计算k均值聚类的最佳聚类数。

  2. 用WSS分数计算k均值聚类的最佳聚类数。

  3. 使用Gap统计量计算k均值聚类的最佳聚类数。

结果将是三个图表,分别代表轮廓得分,WSS得分和Gap统计量的最佳聚类数。


最受欢迎的见解

1.R语言k-Shape算法股票价格时间序列聚类

2.R语言中不同类型的聚类方法比较

3.R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归

4.r语言鸢尾花iris数据集的层次聚类

5.Python Monte Carlo K-Means聚类实战

6.用R进行网站评论文本挖掘聚类

7.用于NLP的Python:使用Keras的多标签文本LSTM神经网络

8.R语言对MNIST数据集分析 探索手写数字分类数据

9.R语言基于Keras的小数据集深度学习图像分类

拓端tecdat|R语言使用最优聚类簇数k-medoids聚类进行客户细分相关推荐

  1. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  2. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  3. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  4. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  5. R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数) 目录

  6. R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数) 目录

  7. R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数) 目录

  8. R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数) 目录

  9. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  10. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

最新文章

  1. 科大星云诗社动态20201231
  2. 造字工房全套正版精美中文设计字体免费下载使用 (个人非商用/全集打包)
  3. Apache Nuvem将带来更多的开源云?
  4. LeetCode 1644. 二叉树的最近公共祖先 II
  5. PowerShell挂起功能--Confirm参数
  6. 如何在React Native中构建项目并管理静态资源
  7. Windows核心编程_修改其它进程里的内存值+示例:修改游戏分数
  8. [AD]-学习笔记-元件库介绍及电阻容模型和IC类器件的创建
  9. 2023年华南理工大学运筹学与控制论上岸前辈备考经验
  10. 风景园林设计专业要学哪些软件?这几款软件你一定要了解!
  11. Java经典程序编程50题(较适合初学者)
  12. IRP、IO_STACK_LOCATION、文件三种读写方式(buffer/driect/other)、DeviceIoControl
  13. 苹果产品信息查询_不知道的细节 苹果官网
  14. 【黑灰产犯罪研究】恶意注册
  15. 有序的uuid(32位)
  16. 一些好用的APP推荐给你
  17. 初学AI(ML、DL、TensorFlow)与python、OpenCV的一些体会
  18. web网站访问计数器
  19. 在OpenJWeb平台中实现主动扫码(商家主动出示支付二维码)
  20. 北航计算机考研复试时间,北京航空航天大学计算机学院2019年硕士研究生复试安排...

热门文章

  1. 2013华为校园招聘机试题9月10日题(杭州)
  2. elasticsearch中文分词
  3. (转载)Xcode 4.1/4.2/4.3 免证书(iDP)开发+真机调试+生成IPA全攻略
  4. ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM
  5. [国家集训队]飞飞侠
  6. Wine 开发版 4.6 发布,Windows 应用的兼容层
  7. 重读你不知道的JS (上) 第一节五章
  8. 兰州市智能交通实现智慧城市 智能化立体车库有效缓解停车难
  9. phpSQLiteAdmin - 基于Web的SQLite数据库管理工具 - OPEN 开发经验库
  10. mysql新建授权账号系列问题