对大型混合类型数据进行聚类
Clustering on large, mixed type data
我正在处理尺寸为 400 万 x 70 的数据框。大多数列是数字的,有些是分类的,除了偶尔缺失的值。聚类对所有数据点 运行 至关重要,我们希望产生大约 400,000 个聚类(因此不能对数据集进行二次抽样)。
我研究过使用 Gower 的距离度量来处理混合类型数据,但这会产生一个 400 万 x 400 万维的相异矩阵,因为它有 10^13 个元素,所以无法使用。因此,该方法需要完全避免相异矩阵。
理想情况下,我们会使用凝聚聚类方法,因为我们需要大量的聚类。
解决这个问题的合适方法是什么?我正在努力寻找满足所有这些要求的方法,我意识到这是一个很大的问题。
B 计划是使用一种简单的基于规则的分组方法,仅基于分类变量,仅精选几个变量进行聚类,否则我们将遭受维数灾难。
第一步是以某种方式将这些分类值转换为数字,第二步是将现在所有的数字属性置于相同的范围内。
聚类的计算成本很高,因此您可以尝试第三步,用 PCA 的前 10 个组件(或者许多组件的特征值 > 1)来表示此数据以减少列数。
对于聚类步骤,您可以选择算法。我认为分层的东西会对你有所帮助,因为即使你期望有大量的集群,直觉上这些集群会属于更大的集群,这些集群一直有意义,直到少数“父级” “集群。一个流行的选择可能是 HDBSCAN,但我倾向于尝试 OPTICS。免费 ELKI 中的实现似乎是最快的(需要花一些时间才能搞清楚),因为它在 java 中运行。 ELKI 的输出有点奇怪,它为每个簇输出一个文件,因此您必须使用 python 循环遍历文件并创建最终映射,不幸的是。但是,如果您正在构建自动化管道,那么从 python 开始这一切都是可行的(包括执行 ELKI 命令)。
我正在处理尺寸为 400 万 x 70 的数据框。大多数列是数字的,有些是分类的,除了偶尔缺失的值。聚类对所有数据点 运行 至关重要,我们希望产生大约 400,000 个聚类(因此不能对数据集进行二次抽样)。
我研究过使用 Gower 的距离度量来处理混合类型数据,但这会产生一个 400 万 x 400 万维的相异矩阵,因为它有 10^13 个元素,所以无法使用。因此,该方法需要完全避免相异矩阵。
理想情况下,我们会使用凝聚聚类方法,因为我们需要大量的聚类。
解决这个问题的合适方法是什么?我正在努力寻找满足所有这些要求的方法,我意识到这是一个很大的问题。
B 计划是使用一种简单的基于规则的分组方法,仅基于分类变量,仅精选几个变量进行聚类,否则我们将遭受维数灾难。
第一步是以某种方式将这些分类值转换为数字,第二步是将现在所有的数字属性置于相同的范围内。
聚类的计算成本很高,因此您可以尝试第三步,用 PCA 的前 10 个组件(或者许多组件的特征值 > 1)来表示此数据以减少列数。
对于聚类步骤,您可以选择算法。我认为分层的东西会对你有所帮助,因为即使你期望有大量的集群,直觉上这些集群会属于更大的集群,这些集群一直有意义,直到少数“父级” “集群。一个流行的选择可能是 HDBSCAN,但我倾向于尝试 OPTICS。免费 ELKI 中的实现似乎是最快的(需要花一些时间才能搞清楚),因为它在 java 中运行。 ELKI 的输出有点奇怪,它为每个簇输出一个文件,因此您必须使用 python 循环遍历文件并创建最终映射,不幸的是。但是,如果您正在构建自动化管道,那么从 python 开始这一切都是可行的(包括执行 ELKI 命令)。