如何实现同时含有分类变量和数值变量的聚类?
分类:统计学
使用Gower方法来计算距离,在R里可以用cluster包的daisy函数来实现,要设定metric = gower",不过如果你的输入里面含有非数值,那么会自动使用gower。
最快速的聚类k-means只能处理数值型变量,其衍生算法k-modes只能处理分类变量;两种算法的结合k-prototype能够处理混合数据。R中我暂时没有找到相对应的package,但该算法思想不是特别难:两点间的距离被定义为dist = d1 + w * d2,d1是用k-means求得的连续型变量的距离,d2是k-modes求得的分类变量间的差异,w为权重。可以试着自己查资料编程看看。
如果想要直接上手用,我找到个clustMD包里的clustMD()函数,可以同时处理分类和数值变量,似乎是一种基于高斯模型的算法,这里贴一个官方guide和相关paper供参考
https://cran.r-project.org/web/packages/clustMD/clustMD.pdf
http://arxiv.org/pdf/1511.01720v1.pdf