使用R进行聚类分析-基础篇
in 编程 with 0 comment

使用R进行聚类分析-基础篇

in 编程 with 0 comment

前言

何为聚类(clustering)?简单而言,就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能大。即聚类后同一类的数据尽可能聚到一起,不同类的数据尽量分离。数据集中不同观测值间的相似性是根据观测值间的距离进行度量的,比如欧氏距离(euclidean distance)基于相关性的距离(correlation-based distance)

谈到聚类,就不得不谈一下分类(classification),两者是有一定差别的。聚类通常又被称为无监督学习(unsupervised learning),即在聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此,聚类通常并不需要使用训练数据进行学习。

而分类就不一样了,对于一个分类器,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做监督学习(supervised learning)。

从类别来看,聚类的算法有很多种,比如有基于划分的方法、基于层次的方法、基于密度的方法、基于网格的方法、基于模型的方法、基于模糊的方法和其他聚类方法(基于约束、基于粒度、谱聚类、核聚类和量子聚类),但常用的有两种:

数据的准备

要想在R中进行聚类分析,应该按照如下要求准备数据:

  1. 行必须是观测值(个体或样本),列必须是变量;
  2. 任何缺失数据都必须删除;
  3. 必须对数据进行标准化(如成比例缩放)。如想详细了解,请关注下一篇文章。

下面我们将使用内置的R数据集“USArrests”,其中包含1973年美国50个州中每10万居民因袭击,谋杀和强奸而被捕的统计结果。它还包括生活在城市地区人口比例。

data("USArrests")  # 加载数据
df <- USArrests   
  1. 删除数据中可能存在的缺失值:
df <- na.omit(df)
  1. 对数据进行标准化:
df <- scale(df)

将要使用的R包

在后面的文章中,将主要使用2个R包:

factoextra中包含许多用于聚类分析和可视化的函数,包括:

函数功能
dist(fviz_dist, get_dist)距离矩阵的计算与可视化
get_clust_tendency评估聚类趋势
fviz_nbclust(fviz_gap_stat)确定最佳的聚类数
fviz_dend树状图的增强版可视化
fviz_cluster聚类结果的可视化
fviz_mclust基于模型的聚类结果的可视化
fviz_silhouette聚类中的轮廓信息的可视化
hcut分层聚类的计算并剪切树
hkmeans分层的k均值聚类
eclust聚类分析的可视化增强版

参考