kmodes VS one-hot encoding + kmeans 用于分类数据?

kmodes VS one-hot encoding + kmeans for categorical data?

我正在探索使用 python 对一些分类数据进行聚类的可能性。我目前有 8 个功能,每个功能大约有 3-10 个级别。

据我所知,在这个框架中可以使用 kmeans 和 kmodes 的单热编码,由于维度灾难问题,kmeans 可能不适合 features/levels 的大量组合.

这是正确的吗?

目前我会遵循 kmeans 路线,因为它可以让我灵活地投入一些数值特征,并且计算轮廓统计和评估最佳聚类数量似乎要容易得多。

这有意义吗?对于应该优先使用一种方法的情况,您有什么建议吗?

谢谢

还有一些变体对分类属性使用 k-modes 方法,对连续属性使用均值。

K-modes 比 one-hot+k-means 有一个很大的优势:它是可解释的。每个集群都有一个明确的原型分类值。对于 k-means,由于 SSQ objective,如果 one-hot 变量介于值之间,则它们的误差最小。这是不可取的。

参考Huang(Kmodes作者)的这篇论文。 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.134.83&rep=rep1&type=pdf

  1. 他提到,如果我们使用 Kmeans + 一种热编码,如果分类属性具有大量类别,则会大大增加数据集的大小。这将使 Kmeans 的计算成本很高。所以是的,你关于维度诅咒的想法是正确的。

  2. 此外,聚类意味着没有意义,因为 0 和 1 不是数据的实际值。另一方面,Kmodes 生成集群模式,这些模式是真实数据,因此使集群可解释。

对于您对数值和分类属性的要求,请查看 k-prototypes 方法,该方法结合了 kmeans 和 kmodes 以及使用平衡权重因子。 (再次在论文中解释)。

Code sample in python