分为两组之一(不学习)

时间:2014-06-12 09:32:53

标签: python machine-learning cluster-analysis

我正在处理一个问题,我想自动将一个集合划分为两个子集,知道集合A中的几乎所有对象在所有维度中都具有比集合B中的对象更大的值。 / p>

我知道我可以使用机器学习,但我需要它完全自动化,因为在问题的各种实例中,集合A和集合B的对象将具有不同的值(因此问题实例2的集合B中的值可能是大于问题实例1的集合A中的值!)。

enter image description here

我想解决方案可能就像找到对象一样,这两个对象的最佳代表(周围物体的密度最高)。 找到N组最佳代表对我来说就足够了。

有谁知道问题的名称和/或可以为此提出实施建议? (Python更可取。)

干杯!

2 个答案:

答案 0 :(得分:4)

您可以尝试一些属于无监督机器学习的聚类方法。结果取决于您的数据以及它们的分布情况。根据你的图片,我认为K-means算法可以工作。有一个用于机器学习scikit-learn的python库,它已包含k-means实现:http://scikit-learn.org/stable/modules/clustering.html#k-means

答案 1 :(得分:1)

如果您的数据与您解释的一样简单,那么有一些相当明显的方法。

  1. 中心和点数:

    使数据集居中,并为每个对象计算有多少值为正值。如果更多的值为正值而不是负值,则可能是红色等级。

  2. 长度直方图:

    计算每个向量的总和。制作值的直方图。在最大间隙处分裂,长于阈值的向量在一组中,其他在下组中。

    我已经向demonstrate this approach提供了一个ipython笔记本。

  3. enter image description here