如何进行集群以确保每个集群不止一个类?

数据挖掘 Python 聚类 k-均值 无监督学习
2021-09-17 00:27:58

我有一个包含 4 个类的数据集,我正在尝试使用一个集成模型,其中每个基本分类器都使用一部分数据进行训练。为了沿着分类器分布数据,我使用了 KMeans 算法。问题在于,在某些情况下,一个集群只有一个类,并且适合该数据的分类器在预测中表现不佳。除此之外,每个集群只有一个类使我无法使用某些结构(例如逻辑回归、SVM 等)。

我想知道是否有任何聚类技术可以保持数据的公平分布,考虑到每个集群不止一个类。我知道聚类是无监督学习并且不考虑每个样本的类别,但我没有任何其他想法,而不是使用另一种技术而不是 KMeans。

谢谢

1个回答

这是一个非常奇怪的设计:

  • 目标是训练一个集成分类模型。一般来说,没有充分的理由只使用数据的子集来训练单个学习器,更不用说使用数据的严格划分了。为了使最终模型更稳定,用不同的子集训练不同的学习器可能是有意义的,但至少应该使用替换进行采样,即允许一个实例用于多个学习器。强制每个实例只在一个学习器中使用很可能会使大多数或所有个体学习器非常弱,进而使最终模型肯定不如使用所有数据的简单分类器好。
  • 使用聚类来准备子集更加陌生,我想不出任何理由:不仅可以预期某些聚类会对应于特定的类,这实际上是一件好事:这意味着数据包含一些对应的模式或多或少地上课。如果没有这样的模式,分类问题将无法解决。将集群用作个体学习者的训练子集会适得其反,因为人们希望这些模型能够区分类别。所以他们需要几个类别的例子,最好不要一个完全有偏见的样本,否则他们不能正确地完成他们的工作。如果您真的想使用数据子集,则应简单地随机选择子集,而不是通过聚类获得。
  • 如果您真的想使用聚类,则每个实例的结果聚类都可以用作分类阶段的特征。不是作为获取数据子集的一种方式。

没有聚类方法可以让您基于类指定约束,因为这根本不是聚类算法的逻辑。您可以使用分层抽样,即按类随机选取实例,以确保每个子集在类之间包含相同的分布。