首页 > 解决方案 > 在 sklearn 或其他聚类库中进行聚类时,有没有办法强制将一组点分配给同一类?

问题描述

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

预先指定一些点的聚类

标签: pythonscikit-learncluster-analysis

解决方案


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

  1. Must Link - 两个节点必须属于同一个集群
  2. 无法链接- 两个节点不能属于同一个集群

COP-KMeans 算法有一个实现,它提供了这样的 API:

import numpy
from copkmeans.cop_kmeans import cop_kmeans
input_matrix = numpy.random.rand(100, 500)
must_link = [(0, 10), (0, 20), (0, 30)]
cannot_link = [(1, 10), (2, 10), (3, 10)]
clusters, centers = cop_kmeans(dataset=input_matrix, k=5, ml=must_link,cl=cannot_link)

推荐阅读