有哪些包实现了半监督(约束)聚类?

时间:2014-01-21 12:37:38

标签: cluster-analysis k-means pybrain dbscan

我想在半监督(约束)聚类上进行一些实验,特别是作为实例级成对约束(Must-Link或Can not-Link约束)提供的背景知识。我想知道是否有任何好的开源软件包实现半监督聚类?我试着看看PyBrain,mlpy,scikit和orange,我找不到任何受约束的聚类算法。特别是,我对受约束的K-Means或基于约束密度的聚类算法(如C-DBSCAN)感兴趣。 Matlab,Python,Java或C ++中的包将是首选,但不必限于这些语言。

6 个答案:

答案 0 :(得分:5)

python包scikit-learn现在有 Ward层次聚类(自0.15起)和凝聚聚类(自0.14以来)支持connectivity constraints的算法

此外,我确实有一个真实世界的应用程序,即从单元格位置识别轨道,其中每个轨道只能包含每个时间点的一个位置。

答案 1 :(得分:2)

也许有点晚了,但看看以下内容。

  1. 实现PKM,MKM和PKMKM的Weka(在java中)的扩展

    http://www.cs.ucdavis.edu/~davidson/constrained-clustering/

  2. 在Matlab中使用EM和约束的高斯混合模型

    http://www.scharp.org/thertz/code.html

  3. 我希望这会有所帮助。

答案 2 :(得分:2)

R包conclust实现了许多算法:

  

这个包中有4个主要功能:ckmeans(),lcvqe(),mpckm()和ccls()。它们采用未标记的数据集和两个必须链接列表,并且不能将约束作为输入,并将聚类作为输出。

python中还有COP-KMeans的实现。

答案 3 :(得分:0)

完整披露。我是k-means-constrained的作者。

Here is a Python implementation的K-Means集群,您可以在其中指定最小和最大集群大小。它使用与scikit-learn相同的API,因此非常易于使用。它还基于快速的C ++软件包,因此具有良好的性能。

您可以点安装它:

pip install k-means-constrained

示例用法:

>>> from k_means_constrained import KMeansConstrained
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
>>>                [4, 2], [4, 4], [4, 0]])
>>> clf = KMeansConstrained(
>>>     n_clusters=2,
>>>     size_min=2,
>>>     size_max=5,
>>>     random_state=0
>>> )
>>> clf.fit(X)
array([0, 0, 0, 1, 1, 1], dtype=int32)
>>> clf.cluster_centers_
array([[ 1.,  2.],
       [ 4.,  2.]])
>>> clf.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)

答案 4 :(得分:0)

查看此python软件包active-semi-supervised-clustering

Github https://github.com/datamole-ai/active-semi-supervised-clustering

答案 5 :(得分:0)

Github Semisupervised具有与Sklearn API类似的用法。

pip install semisupervised

第1步。未标记的样品应标记为-1。

步骤2。 model.fit(X,y)

第3步。 model.predict(X_test)

示例:

from semisupervised.TSVM import S3VM
model = S3VM()
model.fit(np.vstack((label_X_train, unlabel_X_train)), np.append(label_y_train, unlabel_y))
# predict
predict = model.predict(X_test)
acc = metrics.accuracy_score(y_test, predict)
# metric
print("accuracy", acc)