使用分类数据处理这种无监督聚类问题的最佳方法?

数据挖掘 机器学习 聚类 分类数据 无监督学习
2021-10-15 22:20:15

我是一名刚接触机器学习的软件工程师。我已经阅读了基本的非监督技术,如 k-means 和层次聚类,现在我正试图将它们付诸实践,解决一个基本问题。

假设我有很多行数据,每行看起来像这样:

"employeesRange": "11-50", 
"category": "Lobbying", 
"categoryGroup": "Polication Action", 
"sector": "Industrials", 
"subCategory": "Direct", 
"tags": [ "Progressive", "Libertarian", "PAC" ]

我想分析这些数据并寻找模式,即经常一起出现的信息集群。例如,为“进步”、“自由主义”事业寻找较小的 11-50 人游说团体可能是一种常见的模式,但“总统”或“地方政治”团体往往偏大。

或者也许在类别和部门之间可以找到另一个链接,诸如此类。

这似乎比我读过的示例更难,因为我的一些数据是标签云(“标签”字段),它是非结构化的,可以包含多个条目,并且类别和员工范围更结构化的字段。

似乎一个不错的起点是使用层次聚类(因为我不知道 k a-priori)也许遵循这里的建议:

https://stackoverflow.com/questions/23943391/how-to-cluster-users-based-on-tags

我对此有几个问题。首先,这是一个好方法吗?Mahout 是最好的工具吗?有什么明显的简化方法吗?最后,如何将标签聚类方法与行中其他更结构化的数据结合起来?

4个回答
  1. K-means 是一种合理的方法,也是理解数据的明智方法。

  2. 我从未使用过 mahout,但我会使用 R 或 Python 进行此类分析,因为可以使用不错的库来快速实现 K-means。

  3. 带有标签的聚类方法相当简单。您基本上可以使用指示变量(也称为二进制编码)对其进行编码。如果标签出现在标签列表中,您可以将此变量/功能设置为 1,否则设置为 0。然后您只需要为存在的标签总数分配空间。如果您有大量标签,您可以通过使用至少具有某种频率或其他“合理”方式的标签来限制它们。

  4. 您可以选择 ķ以多种方式。通常人们会随意选择 K,因为他们想要,例如,10 个组来将他们的客户或数据分成。在我提供的模拟中,它将为您提供一种使用增量改进来优化 K 的蹩脚方式。

我制作了一个带有模拟的笔记本,引导您了解如何“标记”您的标签并用二进制/单热编码表示它们。值得注意的是,这种标记化忽略了标签的顺序,这对于您的用例来说可能没问题。

还值得注意的是,K-means 肯定不是衡量数据相似性的唯一方法,但我认为这是一个很好的直观开始。

再次,对于选择ķ笔记本中概述的方法是详尽的,因为它从 1 开始,直到每个观察结果都是一个集群。这意味着您必须运行 K-meansn次,这在实践中很愚蠢,但从这里的学习角度来看很有用。一般来说,这并不理想,因为它很昂贵,而且通常您不想设置ķ=n 但是这个模拟对正在发生的事情给出了很好的直觉。

在实践中,您可以在大量集群(例如,5、10、15、20、..、100)或类似的东西的间隙中执行此操作,然后选择肉眼下降幅度最大的一个 -球它。这是一种非常武断和不满意的选择方式ķ,但它似乎对很多人都有效。

正如这里已经回答的那样,原始方式的 k-means 不会很有效,因为欧几里德距离无法处理分类数据。

存在一些扩展(例如 k 模式)或具有其他距离的修改(例如 Gower)。讨论在这里展开。

我没有直接的答案,但我建议查看已经实施的不同可能性,并考虑每种可能性的优缺点。 在这里,您可以找到许多不同的方法,它们可能适用于您的问题。

希望能帮助到你

如果您希望对位于关系 SQL 或 Hadoop 类型数据库中的大量数据进行集群,您可能需要使用为 Spark 上的并行处理构建的一些算法。Spark 的 ML Lib 主包可以做到这一点,但我会推荐 H2O 包,因为文档似乎是一流的,为您提供多种语言的选择,并且可以快速消耗 TB 级数据。如果您已经拥有良好的开发背景,这可能对您的工程技能集有更多帮助,并且借助 H2O 的出色文档,您可以更多地关注数据管道和特征选择,而不是聚类模型的理论基础。您可以使用 Java 或 Scala 在 Spark 上实现 H2O,也可以保留更多的工程前景,而不是使用 R 或 Python 等脚本语言。

链接到他们的 K-means 算法文档

http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/k-means.html

K-means 是解决这类问题的巧妙策略。但是,您也可以探索最近的方法,包括拓扑数据分析,以查看特征/个体的集群。