想到的第一篇论文是: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