R语言-混合型数据聚类

利用聚类分析,我们可以很容易地看清数据集中样本的分布情况。以往介绍聚类分析的文章中通常只介绍如何处理连续型变量,这些文字并没有过多地介绍如何处理混合型数据(如同时包含连续型变量、名义型变量和顺序型变量的数据)。本文将利用 Gower 距离、PAM(partitioning around medoids)算法和轮廓系数来介绍如何对混合型数据做聚类分析。

---------------------------------------------------------------------------------------------------

本文主要分为三个部分

  • 距离计算
  • 聚类算法的选择
  • 聚类个数的选择

为了介绍方便,本文直接使用 ISLR 包中的 College 数据集。该数据集包含了自 1995 年以来美国大学的 777 条数据,其中主要有以下几个变量:

  • 连续型变量
  1. 录取率
  2. 学费
  3. 新生数量
  • 分类型变量
  1. 公立或私立院校
  2. 是否为高水平院校,即所有新生中毕业于排名前 10% 高中的新生数量占比是否大于 50%

本文中涉及到的R包有:

构建聚类模型之前,我们需要做一些数据清洗工作:

  • 录取率等于录取人数除以总申请人数
  • 判断某个学校是否为高水平院校,需要根据该学校的所有新生中毕业于排名前 10% 高中的新生数量占比是否大于 50% 来决定

In[5]:

距离计算

聚类分析的第一步是定义样本之间距离的度量方法,最常用的距离度量方法是欧式距离。然而欧氏距离只适用于连续型变量,所以本文将采用另外一种距离度量方法—— Gower 距离。

1Gower 距离

Gower 距离的定义非常简单。首先每个类型的变量都有特殊的距离度量方法,而且该方法会将变量标准化到[0,1]之间。接下来,利用加权线性组合的方法来计算最终的距离矩阵。不同类型变量的计算方法如下所示:

  • 连续型变量:利用归一化的曼哈顿距离
  • 顺序型变量:首先将变量按顺序排列,然后利用经过特殊调整的曼哈顿距离
  • 名义型变量:首先将包含 k 个类别的变量转换成 k 个 0-1 变量,然后利用 Dice 系数做进一步的计算
    • 优点:通俗易懂且计算方便
    • 缺点:非常容易受无标准化的连续型变量异常值影响,所以数据转换过程必不可少;该方法需要耗费较大的内存

利用 daisy 函数,我们只需要一行代码就可以计算出 Gower 距离。需要注意的是,由于新生入学人数是右偏变量,我们需要对其做对数转换。daisy函数内置了对数转换的功能,你可以调用帮助文档来获取更多的参数说明。

此外,我们可以通过观察最相似和最不相似的样本来判断该度量方法的合理性。本案例中,圣托马斯大学和约翰卡罗尔大学最相似,而俄克拉荷马科技和艺术大学和哈佛大学差异最大。

Out [ 7 ]

:

Out [ 8 ]:

聚类算法的选择

现在我们已经计算好样本间的距离矩阵,接下来需要选择一个合适的聚类算法,本文采用 PAM(partioniong around medoids)算法来构建模型,PAM 算法的主要步骤:

  1. 随机选择 k 个数据点,并将其设为簇中心点
  2. 遍历所有样本点,并将样本点归入最近的簇中
  3. 对每个簇而言,找出与簇内其他点距离之和最小的点,并将其设为新的簇中心点
  4. 重复第2步,直到收敛

该算法和 K-means 算法非常相似。事实上,除了中心点的计算方法不同外,其他步骤都完全一致 。

  • 优点:简单易懂且不易受异常值所影响
  • 缺点:算法时间复杂度为 O(n2)

聚类个数的选择

我们将利用轮廓系数来确定最佳的聚类个数,轮廓系数是一个用于衡量聚类离散度的内部指标,该指标的取值范围是[-1,1],其数值越大越好。通过比较不同聚类个数下轮廓系数的大小,我们可以看出当聚类个数为 3 时,聚类效果最好。

聚类结果解释

1描述统计量

聚类完毕后,我们可以调用 summary 函数来查看每个簇的汇总信息。从这些汇总信息中我们可以看出:簇1主要是中等学费且学生规模较小的私立非顶尖院校,簇2主要是高收费、低录取率且高毕业率的私立顶尖院校,而簇3则是低学费、低毕业率且学生规模较大的公立非顶尖院校。

PAM 算法的另一个优点是各个簇的中心点是实际的样本点。从聚类结果中我们可以看出,圣弗朗西斯大学是簇1 的中心点,巴朗德学院是簇2 的中心点,而密歇根州州立大学河谷大学是簇3 的中心点。

2可视化方法

t-SNE 是一种降维方法,它可以在保留聚类结构的前提下,将多维信息压缩到二维或三维空间中。借助t-SNE我们可以将 PAM 算法的聚类结果绘制出来,有趣的是私立顶尖院校和公立非顶尖院校这两个簇中间存在一个小聚类簇。

进一步探究可以发现,这一小簇主要包含一些竞争力较强的公立院校,比如弗吉尼亚大学和加州大学伯克利分校。虽然无法通过轮廓系数指标来证明多分一类是合理的,但是这 13 所院校的确显著不同于其他三个簇的院校。

Out[ 25 ]

转自:http://mp.weixin.qq.com/s?__biz=MzA5NDQ3MDI4NA==&mid=2658610279&idx=1&sn=c913e162de03343a4f89410c18e503a9&scene=1&srcid=09093EVj3DjQk3Jr0UoGqBNT#rd

原文链接:https://dpmartin42.github.io/blogposts/r/cluster-mixed-types

时间: 2024-10-14 21:38:30

R语言-混合型数据聚类的相关文章

R语言进行数据预处理

R语言进行数据预处理wranging li_volleyball 2016年3月22日 data wrangling with Rpackages:tidyr dplyr Ground rules library(tidyr) library(dplyr) ## ## Attaching package: 'dplyr' ## The following objects are masked from 'package:stats': ## ## filter, lag ## The follo

R语言进行数据预处理wranging

R语言进行数据预处理wranging li_volleyball 2016年3月22日 data wrangling with R used packagesP:tidyr dplyr Ground rules library(tidyr) library(dplyr) ## ## Attaching package: 'dplyr' ## The following objects are masked from 'package:stats': ## ## filter, lag ## Th

R语言k-Shape时间序列聚类方法对股票价格时间序列聚类

这次,我们将使用k-Shape时间序列聚类方法检查与我们有业务关系的公司的股票收益率的时间序列. 执行环境如下. R:3.5.1 企业对企业交易和股票价格 在本研究中,我们将研究具有交易关系的公司的价格变化率的时间序列的相似性,而不是网络结构的分析.由于特定客户的销售额与供应商公司的销售额之比较大,当客户公司的股票价格发生变化时,对供应商公司股票价格的反应被认为更大. k-Shape k-Shape [Paparrizos和Gravano,2015]是一种关注时间序列形状的时间序列聚类方法.在我

R语言最优聚类数目k改进kmean聚类算法

原文链接:http://tecdat.cn/?p=7237 在本文中,我们将探讨应用聚类算法(例如k均值和期望最大化)来确定集群的最佳数量时所遇到的问题之一.从数据集本身来看,确定集群数量的最佳值的问题通常不是很清楚.在本文中,我们将介绍几种技术,可用于帮助确定给定数据集的最佳k值.  我们将在当前的R Studio环境中下载数据集: StudentKnowledgeData <-read_csv(“ YourdownloadFolderPath / StudentKnowledgeData.c

R语言之数据可视化 - R的绘图颜色

5. R语言绘图之 颜色 · grDevice 包 - colorRamp() 和 colorRampPalette() - 颜色名字可使用 colors() 获取 · RColorBrewer 包 - 三类调色板: 1. sequential:从一个极端渐变到另一个极端,适合用于呈现顺序数据 2. diverging:两端鲜艳而中间较淡,适合凸显处在极端的数值,即想强调高低对比时可选择 3. qualitative:颜色间对比鲜明,适合呈现分类变量 - 调色板信息可与 colorRamp /

R语言外部数据读取

0  引言 使用R语言.Python等进行数据处理的第一步就是要导入数据(也可以使用UCI数据集),下文主要根据R语言的帮助文档来介绍外部文件数据的导入方法和注意事项. 1 格式read.table read.table(file, header = FALSE, sep ="", quote = "\"'",dec = ".", skip = 0,strip.white = FALSE, blank.lines.skip =TRUE,

R语言之数据输入与输出

一.数据的录入与保存 1.算数表达式的输入与保存R中的算数表达式是直接输入的,输入完成之后按下回车便显示结果,如果想保存输入的结果,直接将其命名一个变量即可,如 > a<- 1+2> a[1] 3 将1+2的结果保存在a变量中,查看结果直接输入变量a即可 2.样本数据的输入与保存 <1>c()函数最常使用的是c()函数,括号内的内容可以是数字或文本,也可以是存储结果的变量,内容间用逗号分割,如果既有文本也有数字,那么数字将会被强制转换为文本.由于是手动输入,因此只适合数据较少

R语言将数据框转成xts

R语言初学者,不这么会,今天碰到的问题,差了好久才找到,原来如此简单 尼玛,下次再忘记抽自己3巴掌 转换的代码和结果

R语言使用K-Means聚类可视化纽约市WiFi访问

可视化已成为数据科学在电信行业中的关键应用.具体而言,电信分析高度依赖于地理空间数据的使用. 这是因为电信网络本身在地理上是分散的,并且对这种分散的分析可以产生关于网络结构,消费者需求和可用性的有价值的见解. 数据 为了说明这一点,使用k均值聚类算法来分析纽约市免费公共WiFi的地理数据.该数据集可从NYC Open Data获得. 具体地,k均值聚类算法用于基于与特定提供商相关联的纬度和经度数据来形成WiFi使用的集群. 从数据集本身,使用R提取纬度和经度数据: #1 newyorkdf <-