【问题标题】:AgglomerativeClustering scikit learn connectivityAgglomerativeClustering scikit 学习连接性
【发布时间】:2016-01-20 12:36:16
【问题描述】:
I have a matrix x=  
[[0,1,1,1,0,0,0,0],
[1,0,1,1,0,0,0,0],
[1,1,0,1,0,0,0,0],
[1,1,1,0,0,0,0,0],
[0,0,0,0,0,1,1,1],
[0,0,0,0,1,0,1,1],
[0,0,0,0,1,1,0,1],
[0,0,0,0,1,1,1,0],]

在调用 AgglomerativeClustering 之后,我期望将数据分为 2 个集群 (0-3) 和 (4-7) 即 labels_=[0,0,0,0, 1,1,1,1] 但设置标签列表为 [0, 0, 0, 1, 0, 0, 0, 1]

我的代码如下s=AgglomerativeClustering(affinity='precomputed',n_clusters=2,linkage='complete) s.fit(x)

代码是否包含任何错误?为什么聚类不符合预期

【问题讨论】:

  • 是样本矩阵还是连通矩阵?如果您删除亲和力参数,您将获得预期的结果。

标签: scikit-learn hierarchical-clustering unsupervised-learning


【解决方案1】:

在我看来,在玩了几个例子之后,AgglomerativeClustering 将“亲和”矩阵解释为距离矩阵,尽管我无法在任何地方找到它。这意味着你的 0 和 1 应该交换。

此外,它似乎只考虑矩阵的上三角部分(其他一切都是多余的)。

我相信将x定义为:

x=  
[[0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],]

会给你预期的结果。

【讨论】:

    【解决方案2】:

    错误在于您指定连接矩阵的方式。根据您的描述,我假设您的矩阵表示点之间的联系,其中 [0/1] 表示 [无链接/链接]。但是,该算法将此视为成对距离的矩阵,这就是您得到意外结果的原因。

    您可以通过简单的变换将亲和矩阵转换为一种距离矩阵;例如

    >>> x = np.array(x)
    >>> s.fit(np.exp(-x))
    >>> s.labels_
    array([1, 1, 1, 1, 0, 0, 0, 0])
    

    最好对用于生成此亲和矩阵的数据使用实际距离度量。

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 2016-12-20
      • 2021-12-30
      • 2015-12-22
      • 2016-07-16
      • 1970-01-01
      • 2018-05-28
      • 2015-08-05
      • 1970-01-01
      相关资源
      最近更新 更多