本文所讲的变量聚类方法只是众多聚类方法中的其中一种,与SAS中的变量聚类proc varclus方法一致
- 为什么要做变量聚类
当数据集包含成百上千个变量时,很难挖掘出变量与变量之间的关系,太多的变量也会削弱模型的效果。同时很难对构建的模型进行合理的解释。变量聚类实际上做的是变量缩减,它可以通过减少冗余变量的个数,损失少量信息的情况下提升模型的训练速度和模型效果。
2. 变量聚类
PCA(主成分分析)通过主成分(原始自变量的线性组合)达到变量缩减的目的,但是通常主成分的含义很难得到解释。
一般聚类方法可分为两类:
(1)层次聚类:这种方法是在之前的迭代中嵌套产生不同的簇,是非常常用的聚类方法
(2)分区聚类(partitional clustering):分区聚类简单地将数据对象集合划分为非重叠子集(集群),通过最小化观测向量和参照向量(比如向量中心,或者初始猜测一个中心向量)的距离,使得每个数据对象恰好是一个子集。但是这种方法需要很精细地选择合适的参数以及评估所有可能的切分方式的损失,通常实际很难运用。
层次聚类中有2种方法
· 聚合
1. 每个变量自成一类
2. 计算不同类别之间的相似性
3. 合并最相似的类别
4. 重复步骤2和步骤3,直到只剩一个类别
· 切分
1. 初始时所有观测值全部归为一起成为一个大类
2. 计算不同类别之间的相似性
3. 把最不相似的类别做切分
4. 重复步骤2和步骤3直至每一个观测值都是一个类别
接来下介绍一种便于解释的变量缩减方法
Varclus过程是先把所有变量看成一类,递归地把当前的簇切分成2个子簇直到达到停止条件,从而产生不重叠的层次结构
当一个变量簇中第二大的主成分特征值大于设定的阈值(比如上图中设定为0.7),则认为该变量簇至少可以被两个主要的维度(前两个主成分)解释,因此该变量簇可以被切分为2个簇
分裂成两个簇的过程为:先计算该簇的前两个主成分,再进行斜交旋转,并把每个变量分配到旋转分量对应的簇里,分配的原则是变量与这个主成分相关系数的绝对值最大
分裂结束后,每一个变量簇中的特征值均小于实现设定的阈值
接下来简要做一个varclus结果展示
第一次循环:所有变量作为一个簇,上图中第四列变量解释方差为2.614435,占总方差的37.35%;第二特征值为1.660513>0.7,所以簇1需要被分裂
上图中第三列变量R-squared with own cluster(簇内
第四列变量R-squeared with next cluster(簇间
第五列变量
由于两个簇2的第二特征值为0.925357>0.7,所以簇2需要继续被分裂,分裂结果如下
最终循环结束后,结果如下所示
如何选择代表性变量?
选择每一个簇中