【问题标题】:What are some packages that implement semi-supervised (constrained) clustering?有哪些实现半监督(约束)聚类的包?
【发布时间】:2014-02-11 01:28:00
【问题描述】:

我想对半监督(约束)聚类进行一些实验,特别是在以实例级成对约束(必须链接或不能链接约束)形式提供背景知识的情况下。我想知道是否有任何实现半监督聚类的优秀开源包?我尝试查看 PyBrain、mlpy、scikit 和 orange,但找不到任何受约束的聚类算法。特别是,我对约束 K-Means 或基于约束密度的聚类算法(如 C-DBSCAN)感兴趣。 首选 Matlab、Python、Java 或 C++ 中的包,但不必限于这些语言。

【问题讨论】:

  • 你可能想看看 ELKI。它有大量的聚类算法,但我不记得在那里看到过约束聚类。你有这方面的非合成数据集吗?我总觉得这是一个纯学术的东西。 C-DBSCAN 可能很容易在 ELKI“GeneralizedDBSCAN”之上实现。
  • 我将研究 ELKI 代码,但乍一看表明我必须在“GeneralizedDBSCAN”类之上构建 C-DBSCAN。你是对的,我没有任何非合成数据集。这纯粹是出于学术兴趣。 :)
  • 即使是出于学术兴趣,也应该适用于真实数据。已经有太多的算法只适用于合成高斯分布,可能是因为这就是作者曾经研究过的所有......

标签: cluster-analysis k-means pybrain dbscan


【解决方案1】:

python 包scikit-learn 现在具有支持connectivity constraintsWard 层次聚类(自0.15 起)和凝聚聚类(自0.14 起)算法。

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

【讨论】:

    【解决方案2】:

    R 包conclust 实现了多种算法:

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

    在 python 中还有一个COP-KMeans 的实现。

    【讨论】:

      【解决方案3】:

      可能有点晚了,但请看以下内容。

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

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

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

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

      我希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        全面披露。我是 k-means-constrained 的作者。

        Here is a Python implementation 的 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)
        

        【讨论】:

          【解决方案5】:

          Github Semisupervised 的用法与 Sklearn API 类似。

          pip install semisupervised
          

          Step 1. 未标记的样本应标记为-1。

          步骤 2。模型.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)
          

          【讨论】:

          • 如何将其扩展到图像分类的多类问题?
          【解决方案6】:

          看看这个python包active-semi-supervised-clustering

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

          【讨论】:

            猜你喜欢
            • 2019-05-09
            • 2014-12-05
            • 2016-08-08
            • 2016-09-17
            • 2019-04-09
            • 2020-07-21
            • 2017-05-01
            • 2012-04-25
            • 1970-01-01
            相关资源
            最近更新 更多