是否有用于无监督聚类的类似决策树的算法?

机器算法验证 r 机器学习 聚类 大车
2022-02-03 15:10:10

我有一个数据集,包含 5 个特征:A、B、C、D、E。它们都是数值。我想做的不是进行基于密度的聚类,而是以类似决策树的方式对数据进行聚类。

我的意思是这样的方法:

该算法可以根据特征C将数据分成X个初始簇,即X个簇可能有小C、中C、大C和非常大的C值等。接下来,在每个X簇节点下,算法进一步划分根据特征 A 将数据放入 Y 个集群中。算法继续进行,直到所有特征都被使用。

我上面描述的算法就像一个决策树算法。但我需要它来进行无监督聚类,而不是监督分类。

我的问题如下:

  1. 这样的算法是否已经存在?这种算法的正确名称是什么
  2. 是否有实现这种算法的 R/python 包/库?
4个回答

您可能需要考虑以下方法:

  • 使用任何适合您的数据的聚类算法
  • 假设生成的集群是类
  • 在集群上训练决策树

这将允许您尝试不同的聚类算法,但您将获得每个算法的决策树近似值。

想到的第一篇论文是:Clustering Via Decision Tree Construction https://pdfs.semanticscholar.org/8996/148e8f0b34308e2d22f78ff89bf1f038d1d6.pdf

正如另一个提到的,“分层”(自上而下)和“分层聚集”(自下而上)都是使用树进行聚类而设计的众所周知的技术。Scipy 有这个。

如果您因为我不知道任何库而对自定义代码感到满意,那么我可以推荐两种技术。请注意,由于它们所依赖的机制,这些在技术上并不是集群。你可以称之为伪聚类。

1)监督:这有点类似于论文(值得一读)。建立一个单一的决策树模型来学习一些目标(你决定什么是有意义的)。目标可以是随机生成的列(需要重复和评估最佳迭代,见下文)。将树的每个完整路径定义为“簇”,因为从该系列分支中落下的点在技术上与目标相似。这仅在某些问题上效果很好,但在大规模上很有效。你最终得到了 K 个集群(见下文)。

2)半监督(有点无监督,但机械监督),使用#1:您可以尝试构建树以预测列的保留模式。即如果架构是[A,B,C],构建3个模型[A,B] -> C, [A,C] -> B, [B,C]->A。你会得到 KN 集群(见下文)。N = len(模式)。如果其中一些特征不有趣或太不平衡(在类别的情况下),请不要将它们用作目标。

摘要:该模型将根据信息或纯度按顺序选择特征,并且集群将仅基于少数特征而不是全部。这些集群中没有距离的概念,但您当然可以根据中心设计一个。

优点:易于理解和解释,快速训练和推理,在少数强大的特征下效果很好,适用于类别。当您的特征本质上是异构的并且您有许多特征时,您不必花费太多时间来决定在距离函数中使用哪个。

缺点:不标准,必须写,幼稚的偏见,与目标的共线性会导致不好的结果,拥有 1000 个同样重要的特征将无法正常工作(这里有欧几里得距离的 KMeans 更好)。

你得到了多少个集群?你必须,绝对必须限制 DT 模型不要增长太多。例如,设置每个叶的最小样本、最大叶节点(首选)或最大深度。(可选)设置纯度或熵约束。您必须检查这给了您多少集群,并评估此方法是否比真正的集群更好。

这些技术和参数是否适合您?哪个最好?要找出答案,您需要进行集群评估:Performance metrics to evaluate unsupervised learning

您正在寻找的是一种分裂聚类算法。

最常见的算法是凝聚的,它以自下而上的方式对数据进行聚类——每个观察都从它自己的聚类开始,然后聚类合并。分裂聚类是自上而下的——观察从一个逐渐分裂的聚类开始。

看起来像决策树的愿望限制了选择,因为大多数算法都在完整数据空间内的距离上运行,而不是一次拆分一个变量。

DIANA 是我所知道的唯一分裂聚类算法,我认为它的结构类似于决策树。如果那里没有其他人,我会感到惊讶。

如果您将拆分规则修改为不考虑定义的因变量而是使用集群优度度量的度量,则可以使用标准决策树算法。

要考虑的一个想法是假设您有 k 个特征和 n 个点。您可以使用 (k-1) 个特征和 1 个特征作为因变量来构建随机树。Y. 您可以选择一个高度 h,之后您将在根中拥有数据点。您可以选择不同的树进行投票。只是一个想法。