• 聚类分析

一种数据归约技术,把大量的观测值归约为若干个类,类被定义为若干个观测值组成的群组,群组内观测值的相似度比群间相似度高, 聚类有层次聚类和划分聚类两种常用方法

  • 层次聚类(hierarchical agglomerative clustering)

每一个观测值自成一类, 这些类每次两两合并,知道所有的类被聚成为一类为止

常用的算法有

a、单联动(single linkage)

b、全联动(complete linkage)

c、平均联动(average linkage)

d、质心(centroid)

e、Ward

 

  • 划分聚类(partitioning clustering)

首先指定类的个数 K,然后观测值被随机分成 K 类,在重新形成聚合的类

常用的算法有

a、K 均值(k-means)

b、围绕点中心的划分(PAM)

 

  • 聚类分析的一般步骤

a、选择合适的变量

    第一(并且可能是最重要的)步

b、缩放数据

    1、分析中选择的变量变化范围很大,那么该变量对结果的影响也是最大的,往往不可取

    2、缩放数据的方法

        1)最常用的是将每个变量标准化为均值为0,标准差为1的变量

        2)使用 scale() 函数来将变量标准化到均值为 0 和标准差为 1 的变量,等价与 1)的方法

         3)其他的替代方法包括每个个变量被其最大值相除或该变量减去它的平均值并除以变量的平均绝对偏差  

df1 <- apply(mydata,2,function(x){(x-mean(x))/sd(x)}) #方法1
df2 <- apply(mydata,2,function(x){x/max(x)})          #方法3
df3 <- apply(mydata,2,function(x){(x-mean(x))/mad(x)})#方法3

c、寻找异常点

    1、许多聚类方法对异常值比较敏感,会扭曲聚类方案

    2、可以使用 outliers 包中的函数筛选(和删除)异常单变量离群点,mvoutlier 包中包含了能够识别多元变量的离群点函数

    3、一种替代方法是使用对异常值稳健的聚类方法,围绕中心点的划分

d、计算距离

    1、通常需要计算被聚类的实体间的距离

    2、两个观测值之间最常用的距离量度是欧几里得距离,其他可选的量度包括曼哈顿距离、兰氏距离、非对称二元距离、最大距离和闵可夫斯基距离(可使用?dist查看详情)

e、选择聚类算法

    1、层次聚类适合小样本(如150个观测值或更少),而且这种情况下嵌套聚类更实用

    2、划分的方法能处理更多的数据量,但是需要事先确定聚类的个数,一旦选定了层次方法或划分方法,就必须选择一个特地的聚类算法,但每个算法都有优缺点     

f、获取一种或多种聚类方法

    这一步可以使用步骤(e)选择的方法

g、确定类的数目

    1、为了得到最终的聚类方案,必须确定类的数目

    2、常用的方法是尝试不同高的类数(如 2 ~ K)并比较解的质量

    3、在 NbClust 包中的 NbClust()函数提供了30个不同指标来帮助你进行选择

h、获得最终的聚类解决方案

    一旦类的个数确定下来,就可以提取出子群,形成最终的聚类方案

i、结果可视化

    1、可视化可以帮助判定聚类方案的意义和用处

    2、层次聚类的结果通常表示一个树状图,划分的结果通常利用可视化双变量聚类图来表示  

j、解读类

    1、一个类中的观测值有何相似之处?

    2、不同类之间能的观测值有何不同?

    3、一般通过对类的汇总统计来完成,对于连续变量,可计算类中的均值和中位数,对混合变量(数据总包含分类变量),可以返回众数、类别分布

k、验证结果

    1、验证聚类方案相当于问“这种划分并不是因为数据集或聚类方法的某种特性,而是确实给出了一个某种程度上有实际意义的结果吗?”如果采用不同的聚类的方法或不同的样本,是否会产生相同的类呢? fpc 、clv 、clValid 包包含了评估聚类解的稳定性函数