混合数值和分类数据的 K-Means 聚类

数据挖掘 数据挖掘 聚类 八度 k-均值 分类数据
2021-09-19 19:19:16

我的数据集包含许多数字属性和一个分类属性。

NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr,,

其中CategoricalAttr取三个可能值之一CategoricalAttrValue1CategoricalAttrValue2CategoricalAttrValue3

我正在为 Octave 使用默认的 k-means 聚类算法实现它仅适用于数字数据。

所以我的问题是:将分类属性拆分CategoricalAttr为三个数字(二进制​​)变量是否正确,例如IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3

4个回答

由于各种原因,标准的 k-means 算法并不直接适用于分类数据。分类数据的样本空间是离散的,并且没有自然来源。在这样的空间上的欧几里得距离函数并没有真正的意义。正如有人所说,“蛇既没有轮子也没有腿的事实让我们对轮子和腿的相对价值无话可说。” (从这里

黄哲学在本文中介绍了一种称为 k-modes 的 k-means 变体,适用于分类数据。请注意,您获得的解决方案对初始条件很敏感,例如此处讨论的(PDF)。

Huang 的论文(如上链接)还有一个关于“k-prototypes”的部分,它适用于具有分类和数字特征的混合数据。它使用距离度量,混合了分类特征的汉明距离和数字特征的欧几里得距离。

谷歌搜索“k-means mix of categorical data”发现了更多关于混合分类和数字数据的 k-means-like clustering 的各种算法的最新论文。(我还没有读过它们,所以我不能评论它们的优点。)


实际上,您的建议(将分类属性转换为二进制值,然后将 k-means 当作数字值)是之前尝试过的另一种方法(早于 k-modes)。(参见 Ralambandrainy, H. 1995。k-means 算法的概念版本。Pattern Recognition Letters, 16:1147-1157。)但我相信 k-modes 方法是首选的,原因是我上面指出的。

在我看来,有一些解决方案可以在聚类中处理分类数据。R 为分类数据提供了特定的距离。这个距离称为高尔,它工作得很好。

(除了蒂姆古德曼的出色回答)

k 模式的选择绝对是确保所使用的聚类算法稳定性的方法。

  1. 聚类算法可以自由选择任何距离度量/相似度得分。欧几里得是最受欢迎的。但是可以使用根据每个维度/属性中的数据分布进行缩放的任何其他度量,例如 Mahalanobis 度量。 根据使用的距离度量说明数据点与中心的距离。

  2. 关于混合(数值和分类)聚类,一篇可能有帮助的好论文是:INCONCO: Interpretable Clustering of Numerical and Categorical Objects

  3. 超越 k-means:由于普通的 k-means 已经被排除为解决这个问题的合适方法,我将冒险超越将聚类视为模型拟合问题的想法。不同的度量,例如信息论度量:Kullback-Liebler 散度在尝试将参数模型收敛到数据分布时效果很好。(当然像 GMM 这样的参数聚类技术比 Kmeans 慢,所以有缺点需要考虑)

  4. 模糊 k 模式聚类听起来也很吸引人,因为开发了模糊逻辑技术来处理诸如分类数据之类的东西。有关详细信息,请参阅使用模糊质心对分类数据进行模糊聚类

另请查看:ROCK:用于分类属性的稳健聚类算法

这个问题似乎真的是关于表示,而不是关于聚类。

分类数据是机器学习中大多数算法的问题。例如,假设您有一些名为“颜色”的分类变量,它可以取红色、蓝色或黄色的值。如果我们简单地将它们分别编码为 1,2 和 3,我们的算法将认为红色 (1) 实际上更接近蓝色 (2) 而不是黄色 (3)。我们需要使用一种表示形式,让计算机理解这些事物实际上都同样不同。

一种简单的方法是使用所谓的one-hot表示,这正是您认为应该做的。我们没有像“颜色”这样可以取三个值的变量,而是将其分成三个变量。这些将是“color-red”、“color-blue”和“color-yellow”,它们都只能取值 1 或 0。

这增加了空间的维度,但现在您可以使用任何您喜欢的聚类算法。有时在执行此过程后对数据进行 zscore 或白化是有意义的,但您的想法绝对是合理的。