干货分享|R语言聚类分析1

聚类分析是一种无监督学习方法,旨在将数据集中的样本按相似性或距离划分为不同的组(即"簇")。与监督学习不同,聚类分析没有预定义的类别标签,而是通过算法在数据中发现潜在的结构。这种方法广泛应用于图像识别、客户分群、市场细分、生物信息学等领域,可以帮助我们揭示数据中的模式和关系。

本章将深入介绍聚类分析的核心概念、常用算法及其实现方法。我们将探讨几种经典的聚类算法,包括K均值聚类、层次聚类和均值聚类,了解如何通过 R 语言对数据进行有效的聚类。此外,还将演示如何对聚类结果进行评估和可视化,以帮助我们更好地解释分析结果,进而为数据驱动决策提供支持。

一、样品的距离

在聚类分析中,样品间距离用于测量样品之间的相似性或差异性,帮助我们理解数据的结构并进行分组。R语言提供了多种方法来计算不同的距离,包括欧氏距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)、布雷-柯蒂斯距离(Bray-Curtis Distance)等。

**(1)**欧氏距离:欧氏距离是最常见的距离度量方式,表示样品之间的直线距离,适用于连续变量数据。定义如下:

【例1】在R中使用dist()函数来计算欧氏距离。

在代码编辑器中依次输入以下代码,选中后单击RUN按钮运行。

复制代码
  data <- matrix(rnorm(25),nrow=5)
  euclidean_dist <- dist(data,method="euclidean")
  euclidean_dist

运行后输出结果如下:

复制代码
           1        2        3        4
  2 0.581547                           
  3 4.153751 4.184982                  
  4 1.364787 1.529577 5.099264         
  5 2.942890 2.988582 2.854306 3.302640

**(2)**曼哈顿距离:曼哈顿距离也称为城市街区距离,表示沿坐标轴的路径距离,适用于一些离散数据或需要强调每个变量独立贡献的情况。定义如下:

【例2】通过dist()函数指定method="manhattan"计算曼哈顿距离。

在代码编辑器中依次输入以下代码,选中后单击RUN按钮运行。

复制代码
  manhattan_dist <- dist(data,method="manhattan")
  manhattan_dist

运行后输出结果如下:

复制代码
            1         2         3         4
  2 0.9706551                              
  3 7.5949329 7.7510528                    
  4 2.6860888 3.3497322 8.3663644          
  5 5.5287849 6.1406327 4.4447700 6.2353583

**(3)**布雷-柯蒂斯距离:布雷-柯蒂斯距离主要用于生态学中,适用于相对丰度数据,用于测量样品之间的差异性。定义如下:

【例3】使用vegan包中的vegdist()函数计算布雷-柯蒂斯距离。

在代码编辑器中依次输入以下代码,选中后单击RUN按钮运行。

复制代码
  library(vegan)
  bray_dist <- vegdist(mtcars[1:4,],method="bray")
  bray_dist <- as.matrix(bray_dist)
  bray_dist

运行后输出结果如下:

复制代码
  Mazda RX4      Mazda RX4     Wag Datsun 710 Hornet 4       Drive
  Mazda RX4      0.000000000   0.001237145    0.1347356      0.1440774
  Mazda RX4 Wag  0.001237145   0.000000000    0.1340318      0.1428439
  Datsun 710     0.134735626   0.134031813    0.0000000      0.2550549
  Hornet 4 Drive 0.144077392   0.142843914    0.2550549      0.0000000

**(4)**马氏距离(Mahalanobis Distance):马氏距离考虑了变量之间的相关性,适用于高维数据和有相关性的特征。它的计算公式为:

其中,S为协方差矩阵。

【例4】使用mahalanobis()函数计算马氏距离。

在代码编辑器中依次输入以下代码,选中后单击RUN按钮运行。

复制代码
  S <- cov(mtcars[1:6,1:4])
  mahalanobis_dist <- mahalanobis(mtcars[1:6,1:4],
                                   colMeans(mtcars[1:6,1:4]),S)
  mahalanobis_dist <- as.matrix(mahalanobis_dist )
  mahalanobis_dist 

运行后输出结果如下:

复制代码
                        [,1]
  Mazda RX4         1.666667
  Mazda RX4 Wag     1.666667
  Datsun 710        4.166667
  Hornet 4 Drive    4.166667
  Hornet Sportabout 4.166667
  Valiant           4.166667

**(5)**闵可夫斯基距离(Minkowski Distance):闵可夫斯基距离是欧氏距离和曼哈顿距离的推广,参数p控制其形态。定义如下:

当p=1时,闵可夫斯基距离退化为曼哈顿距离,即每个维度差值的绝对值之和。

当p=2时,闵可夫斯基距离退化为欧几里得距离(Euclidean Distance),即常见的两点间的直线距离。

当p→∞时,闵可夫斯基距离退化为切比雪夫距离(Chebyshev Distance),即各维度差值的最大值。

【例5】在dist()函数中设置method="minkowski"和p参数求解闵可夫斯基距离。

在代码编辑器中依次输入以下代码,选中后单击RUN按钮运行。

复制代码
  minkowski_dist <- dist(data,method="minkowski",p=3)
  minkowski_dist

运行后输出结果如下:

复制代码
            1          2          3          4
  2 0.5376354
  3 3.5408809  3.5856678 
  4 1.1306428  1.1924417  4.5102983
  5 2.4303189  2.4188221  2.6470566   2.7942379

**(6)**杰卡德距离(Jaccard Distance):杰卡德距离是一种度量不相交集合之间相似度的距离,用于衡量两个集合之间的差异。它通常用于比较两组特征或标签之间的相似性,尤其是在生物信息学、文本挖掘和聚类分析中。

杰卡德距离的计算基于杰卡德相似系数。给定两个集合A和B,杰卡德相似系数定义为:

|A∩B|是集合A和B的交集元素个数,|A∩B|是集合A和B的并集元素个数。杰卡德相似系数的值范围在0和1之间,值越接近1,表示两个集合越相似,值越接近0,表示两个集合越不同。杰卡德距离是相似系数的补值,杰卡德距离也在0和1之间,值越接近0,表示集合越相似,值越接近1,表示两个集合差异越大。

杰卡德距离广泛应用于分类标签、二元特征或其他不相交集合的相似性比较,尤其应用在以下情况中:

文本相似性:计算两个文本的词汇集合的相似度。

生物信息学:比较两个生物样本中基因或特征的相似性。

聚类分析:用于基于集合的相似性进行聚类。

【例6】使用vegan包的vegdist()函数来计算杰卡德距离。

给定一个二进制矩阵数据,其中每行表示一个样本,每列表示一个特征是否存在,可以这样计算。

在代码编辑器中依次输入以下代码,选中后单击RUN按钮运行。

复制代码
  # install.packages("vegan")
  library(vegan)                                  # 安装包
  data <- matrix(c(1,0,1,1,0,0,
                   0,1,1,0,1,1,
                   1,1,0,1,0,1),
                   nrow=3,byrow=TRUE)             # 创建一个示例二进制数据集
  ​
  jaccard_dist <- vegdist(data,method="jaccard")  # 计算杰卡德距离
  print(jaccard_dist)
  运行后输出结果如下:

运行后输出结果如下:

复制代码
            1         2
  2 0.8333333          
  3 0.6000000 0.6666667

在实际应用中,选择合适的距离度量方式对于准确的聚类分析非常重要。欧氏距离适用于连续变量数据,而布雷-柯蒂斯距离适用于生态学或相对丰度数据。通过结合不同的距离度量,可以更好地理解样品之间的相似性或差异性。

本篇文章讲了样品的距离知识点,接下来继续讲解层次聚类和均值聚类的知识点,关注我不迷路!

本文摘自《R语言医学数据分析与可视化》,具体内容请以书籍为准。

R语言医学数据分析与可视化------jd

相关推荐
Aawy1202 小时前
C++与Rust交互编程
开发语言·c++·算法
小王不爱笑1322 小时前
Java 代理模式与 AOP 底层
java·开发语言·代理模式
小鸡吃米…2 小时前
Python 网络爬虫
开发语言·爬虫·python
weixin_404157682 小时前
Java高级面试与工程实践问题集(二)
java·开发语言·面试
暴躁网友w2 小时前
UKF-IMM 与粒子滤波 IMM:计算效率 Matlab 仿真对比
开发语言·matlab
IT猿手2 小时前
基于控制障碍函数(CBF)的多无人机编队避障路径规划研究,MATLAB代码
开发语言·matlab·无人机·路径规划·动态路径规划
于慨2 小时前
java Web
java·开发语言·前端
麦麦鸡腿堡2 小时前
JavaWeb_maven
java·开发语言·maven
IT猿手2 小时前
基于四旋翼无人机离散建模与增量PID控制及轨迹跟踪研究,MATLAB代码
开发语言·matlab·无人机·cocos2d·路径规划·动态路径规划