Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 在sklearn或其他集群库中进行集群时,是否有方法强制将一组点分配给同一个类?_Python_Scikit Learn_Cluster Analysis - Fatal编程技术网

Python 在sklearn或其他集群库中进行集群时,是否有方法强制将一组点分配给同一个类?

Python 在sklearn或其他集群库中进行集群时,是否有方法强制将一组点分配给同一个类?,python,scikit-learn,cluster-analysis,Python,Scikit Learn,Cluster Analysis,我想使用sklearn的一种聚类算法,但有一个限制,即某些点集必须属于同一类。例如,给定下面的一组点,我想强制所有红点属于同一类,所有蓝点属于同一类。我也希望它,使红色和蓝色的点可以属于同一类。如果这在sklearn中不可能实现,我也愿意使用其他库 对于任何库来说,一个可行的解决方案是为蓝色簇定义一个“超级点”,为红色簇定义另一个“超级点” 因此,只需将蓝色超点定义为每个蓝色点的平均值/中值,同样地,红色超点也是如此。然后在这两个超级点加上剩余的点上运行聚类其名称为“,”,这是一系列半监督聚类方

我想使用sklearn的一种聚类算法,但有一个限制,即某些点集必须属于同一类。例如,给定下面的一组点,我想强制所有红点属于同一类,所有蓝点属于同一类。我也希望它,使红色和蓝色的点可以属于同一类。如果这在sklearn中不可能实现,我也愿意使用其他库


对于任何库来说,一个可行的解决方案是为蓝色簇定义一个“超级点”,为红色簇定义另一个“超级点”

因此,只需将蓝色超点定义为每个蓝色点的平均值/中值,同样地,红色超点也是如此。然后在这两个超级点加上剩余的点上运行聚类

其名称为“,”,这是一系列半监督聚类方法,用户还可以提供以下约束:

  • 必须链接-两个节点必须属于同一群集
  • 无法链接-两个节点不能属于同一群集
  • 有一个的实现,它提供了如下API:

    导入numpy
    从copkmeans.cop_kmeans导入cop_kmeans
    输入矩阵=numpy.random.rand(100500)
    必须链接=[(0,10)、(0,20)、(0,30)]
    无法链接=[(1,10)、(2,10)、(3,10)]
    集群,中心=cop\U kmeans(数据集=输入矩阵,k=5,ml=必须链接,cl=不能链接)
    
    也许这是我使用的图像中的一个缺陷,但我不一定知道红点和蓝点彼此靠近。如果它们分散在整个空间,我想这可能会有奇怪的含义。“不过我喜欢这个主意。”索耶·韦登说,这是一个很好的观点。因此,最好使用中位数,或者您可以将每个坐标上的值存储到少量的存储桶中,然后使用模式。但不管怎样,任何算法都必须将所有点视为一个点,因为它们都被分配到同一个组。您是否知道一种不需要预定义数量的聚类的约束聚类算法?是的,但它们稍微复杂一些。“约束Dirichlet混合模型”(例如,在Pyro:)或“变分惩罚概率聚类”是需要研究的两种情况。如果混合组分(簇)的数量未知,则可将参数与贝叶斯推理相结合。但我不知道这两种技术有什么现成的实现。