我想对半监督(约束)聚类进行一些实验,特别是作为实例级成对约束(必须链接或不能链接约束)提供的背景知识。我想知道是否有任何实现半监督聚类的优秀开源包?我尝试查看 PyBrain、mlpy、scikit 和 orange,但找不到任何受约束的聚类算法。特别是,我对约束 K-Means 或基于约束密度的聚类算法(如 C-DBSCAN)感兴趣。Matlab、Python、Java 或 C++ 中的包将是首选,但不必限于这些语言。
6 回答
python 包scikit-learn现在具有支持连接性约束的Ward 层次聚类(自 0.15 起)和凝聚聚类(自 0.14 起)的算法。
此外,我确实有一个真实世界的应用程序,即从单元位置识别轨迹,其中每个轨迹只能包含每个时间点的一个位置。
R 包结论实现了许多算法:
该包中有 4 个主要函数:ckmeans()、lcvqe()、mpckm() 和 ccls()。他们将一个未标记的数据集和两个必须链接和不能链接约束列表作为输入,并生成一个聚类作为输出。
在 python 中还有一个COP-KMeans的实现。
也许有点晚了,但请看以下内容。
实现 PKM、MKM 和 PKMKM 的 Weka 扩展(在 java 中)
Matlab中使用EM和约束的高斯混合模型
我希望这个对你有用。
全面披露。我是 k-means-constrained 的作者。
这是 K-Means 聚类的 Python 实现,您可以在其中指定最小和最大聚类大小。它使用与 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)
Github 半监督具有类似 Sklearn API 的用法。
pip install semisupervised
步骤 1. 未标记的样本应标记为 -1。
第2步。模型.fit(X,y)
第三步。模型.预测(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)
看看这个 python 包active-semi-supervised-clustering
Github https://github.com/datamole-ai/active-semi-supervised-clustering