最近一直在思考PCA是否可以辅助聚类(如kmeans),之前一直认为,如果数据集中如果有太多线性相关的数据,导致特征权重不平衡,会倾向线性相关的那些特征,导致掩盖其他特征。所以,如果通过PCA,是否找到背后关键的特征,避免这类问题。带者这个问题,开始了一次实验。
手动在3维空间中准备了4个类,数据生成代码如下,
通过2d,3d或者MSD等可视化方法,可以清楚的观察到四个簇(下面是MSD绘图),
所以,根据之前的设想,如果添加很多线性相关的列,是否会有更多的簇呢(多余4个)?
结果显示,即使添加了9个冗余的数据,MSD仍然可以清楚显示4个簇,
所以,根据这个实验,可以否定假设“线性相关会添加多余簇”。
下面试试PCA是否可以得到相关结果,
根据PCA结果,只需要前2个组件就是解释99%+,
绘制2维散点图,仍然可以解释4个簇,
结论
根据这次结果,可以发现PCA与聚类结果没有直接的关系。可能的原因:PCA只是降低维度,簇并不一定与维度绑定,因为即使是1维空间,也可以明确的区分4个簇。PCA的作用顶多就是去掉噪音,减少计算量,并不会剔除簇信息,Cross Validated问答站点上有个类似回答,可参考How PCA would help the K-mean clustering analysis?。同时,根据上面的结果,线性相关变量也不一定会生成多余的簇。
试验代码