有哪些实现半监督(受限)聚类的软件包?

10

我想对半监督(受限)聚类进行一些实验,特别是提供实例级别的成对约束(必须连接或不能连接约束)作为背景知识。我想知道是否有任何良好的开源软件包来实现半监督聚类?我尝试查看了PyBrain、mlpy、scikit和orange等工具,但没有发现任何受限制的聚类算法。尤其是我对受约束的K-Means或受约束的基于密度的聚类算法(如C-DBSCAN)感兴趣。偏好使用Matlab、Python、Java或C++中的软件包,但不限于这些语言。


您可能想看看ELKI。它具有大量聚类算法,但我不记得在其中看到过约束聚类。这方面是否有非合成数据集?我总是有这种纯学术的印象。C-DBSCAN可能很容易在ELKI的“GeneralizedDBSCAN”上实现。 - Has QUIT--Anony-Mousse
我会研究ELKI代码,但初步看来,我需要在“GeneralizedDBSCAN”类的基础上构建C-DBSCAN。而且你说得对,我没有任何非合成数据集可用。这纯粹是出于学术兴趣。 :) - user1271286
2
即使是出于学术兴趣,也应该适用于真实数据。已经有太多算法仅适用于人工合成的高斯分布,这可能是因为作者们只研究过这种情况…… - Has QUIT--Anony-Mousse
6个回答

5
Python包scikit-learn现在支持Ward层次聚类算法(自0.15版本)和凝聚聚类算法(自0.14版本),同时支持连接约束
此外,我有一个真实的应用场景,即从细胞位置中识别轨迹,在每个时间点上,每个轨迹只能包含一个位置。

4

R软件包 conclust 实现了许多算法:

该包中有4个主要函数:ckmeans()、lcvqe()、mpckm() 和 ccls()。它们接受无标签数据集和两个必需链接和不能链接的约束条件列表作为输入,并将聚类作为输出。

还有一个Python实现的COP-KMeans


2

2

充分披露。我是k-means-constrained的作者。

这里有一个Python实现的K-Means聚类,您可以指定最小和最大的簇大小。它使用与scikit-learn相同的API,因此非常容易使用。它还基于快速的C++包,因此具有良好的性能。

你可以通过pip安装它:

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)

1

Github半监督学习与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)

我该如何将这个扩展为一个多类问题,用于图像分类? - Ranji Raj

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接