我想在半监督(约束)聚类上进行一些实验,特别是作为实例级成对约束(Must-Link或Can not-Link约束)提供的背景知识。我想知道是否有任何好的开源软件包实现半监督聚类?我试着看看PyBrain,mlpy,scikit和orange,我找不到任何受约束的聚类算法。特别是,我对受约束的K-Means或基于约束密度的聚类算法(如C-DBSCAN)感兴趣。 Matlab,Python,Java或C ++中的包将是首选,但不必限于这些语言。
答案 0 :(得分:5)
python包scikit-learn现在有 Ward层次聚类(自0.15起)和凝聚聚类(自0.14以来)支持connectivity constraints的算法
此外,我确实有一个真实世界的应用程序,即从单元格位置识别轨道,其中每个轨道只能包含每个时间点的一个位置。
答案 1 :(得分:2)
也许有点晚了,但看看以下内容。
实现PKM,MKM和PKMKM的Weka(在java中)的扩展
在Matlab中使用EM和约束的高斯混合模型
我希望这会有所帮助。
答案 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)