【问题标题】:Clustering on large, mixed type data对大型混合类型数据进行聚类
【发布时间】:2020-11-05 01:55:22
【问题描述】:

我正在处理尺寸为 400 万 x 70 的数据框。除了偶尔的缺失值之外,大多数列是数字的,有些是分类的。必须在所有数据点上运行聚类,我们希望生成大约 400,000 个聚类(因此不能对数据集进行二次抽样)。

我已经研究过将 Gower 的距离度量用于混合类型数据,但这会产生一个维度为 400 万 x 400 万的相异矩阵,因为它有 10^13 个元素,所以使用它是不可行的。因此,该方法需要完全避免相异矩阵。

理想情况下,我们会使用凝聚聚类方法,因为我们需要大量的聚类。

什么是解决这个问题的合适方法?我正在努力寻找满足所有这些要求的方法,我意识到这是一个很大的问题。

B 计划是使用简单的基于规则的分组方法,仅基于分类变量,只挑选几个变量进行聚类,否则我们将遭受维度灾难。

【问题讨论】:

    标签: python r bigdata cluster-analysis mixed


    【解决方案1】:

    第一步是以某种方式将这些分类值转换为数字,第二步是将现在所有数字属性置于相同的范围内。

    聚类的计算成本很高,因此您可以尝试第三步,用 PCA 的前 10 个组件(或者许多组件的特征值 > 1)表示此数据以减少列。

    对于聚类步骤,您可以选择算法。我认为分层的东西会对你有所帮助,因为即使你期望有大量的集群,直观的感觉是这些集群将属于更大的集群,这些集群一直有意义,一直到少数“父级” “簇。一个流行的选择可能是 HDBSCAN,但我更喜欢尝试 OPTICS。免费 ELKI 中的实现似乎是最快的(它需要一些混乱才能弄清楚),因为它在 java 中运行。 ELKI 的输出有点奇怪,它为每个集群输出一个文件,所以不幸的是,你必须使用 python 循环遍历文件并创建最终映射。但是,如果您正在构建自动化管道,这一切都可以从 python 中执行(包括执行 ELKI 命令)。

    【讨论】:

    • 感谢您的建议。少数这些分类变量需要超过 30 个值,因此一次性编码在这里似乎不合理。我可以(并且已经)将变量进一步分箱以减少它们可以采用的值的数量,但是当 OHE 时,生成的矩阵大约有 200 列。也许可以使用 GLRM 代替 PCA?理想情况下,我只会使用带有 OPTICS 的 Gower 距离度量,从而解决 OHE 问题。也许我需要在数据集的维度上做出妥协,然后使用 OPTICS 或 CLARA 之类的东西。
    • @M.Capewell 我可能会对数字做 PCA,然后对分类做一些不同的事情。我听说过python中的MCA,但没用过。
    • 有趣,在此之前从未听说过 MCA。我会试一试,看看结果如何——显然有一些方法可以尝试。干杯!
    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2015-05-09
    • 2020-02-09
    • 2011-07-25
    • 2012-10-06
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多