Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于大型混合类型数据的聚类_Python_R_Bigdata_Cluster Analysis_Mixed - Fatal编程技术网

Python 基于大型混合类型数据的聚类

Python 基于大型混合类型数据的聚类,python,r,bigdata,cluster-analysis,mixed,Python,R,Bigdata,Cluster Analysis,Mixed,我正在处理一个维度为400万x 70的数据帧。除了偶尔缺少的值之外,大多数列都是数字的,有些是分类的。在所有数据点上运行聚类非常重要,我们希望生成大约400000个聚类(因此,对数据集进行二次采样不是一个选项) 我曾研究过对混合类型数据使用Gower的距离度量,但这会产生一个维度为400万x 400万的相异矩阵,这是不可行的,因为它有10^13个元素。因此,该方法需要完全避免相异矩阵 理想情况下,我们会使用凝聚聚类方法,因为我们需要大量的聚类 解决这个问题的合适方法是什么?我正在努力寻找一种满足

我正在处理一个维度为400万x 70的数据帧。除了偶尔缺少的值之外,大多数列都是数字的,有些是分类的。在所有数据点上运行聚类非常重要,我们希望生成大约400000个聚类(因此,对数据集进行二次采样不是一个选项)

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

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

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


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

第一步将以某种方式将这些分类值转化为数字,第二步是把现在所有的数值属性放在同一个尺度上

聚类在计算上是昂贵的,因此您可以尝试第三步,通过PCA的前10个组件(或许多组件的特征值大于1)来表示此数据,以减少列数


对于集群步骤,您可以选择算法。我认为一些层次化的东西会对你有所帮助,因为即使你期望有大量的集群,但直观地说,这些集群将属于更大的集群,而这些集群一直到少数“父”集群都是有意义的。一个流行的选择可能是HDBSCAN,但我倾向于尝试光学。freeelki中的实现似乎是最快的(需要花点时间才能弄清楚),因为它是在java中运行的。ELKI的输出有点奇怪,它为每个集群输出一个文件,因此很遗憾,您必须使用python循环文件并创建最终映射。但是,如果您正在构建一个自动化管道,那么所有这些都可以通过python实现(包括执行ELKI命令)。

谢谢您的建议。这些分类变量中有一小部分包含30个以上的值,因此一个热编码在这里似乎不太可能。我可以(并且已经)进一步组合变量,以减少它们可以接受的值的数量,但是当OHE被分解时,得到的矩阵有大约200列。也许可以用GLRMs代替PCA?理想情况下,我会使用光学的高尔距离度量,从而绕过OHE问题。也许我需要在数据集的维度上妥协,然后使用光学或类似CLARA的东西。@M.Capewell我可能会对数字进行PCA,然后对分类进行不同的操作。我听说过python中的MCA,但没有使用过。有趣的是,在此之前从未听说过MCA。我会试一试,看看它是如何公平的-显然有一些途径可以尝试。干杯