【问题标题】:Clusterisation with an Affinity matrix using Affinity propagation in scikit-learn在 scikit-learn 中使用 Affinity 传播与 Affinity 矩阵进行聚类
【发布时间】:2018-02-23 23:28:49
【问题描述】:

我尝试使用预先计算的亲和力矩阵进行聚类,但即使对于简单的情况也不起作用。我尝试了不同的转储参数和对角线的不同值,但没有成功。

下面是例子。

affinities = 
    [[ 0. -1. -2. -6. -7.]
     [-1.  0. -1. -7. -8.]
     [-2. -1.  0. -8. -9.]
     [-6. -7. -8.  0. -1.]
     [-7. -8. -9. -1.  0.]]

我尝试使用 sklearn Affinity Propagation 模块的 fit(..) 方法对矩阵进行聚类:

import sklearn.cluster
clusterer = sklearn.cluster.AffinityPropagation(affinity='precomputed', damping=0.9, verbose=True)
result = clusterer.fit(affinities)

from pprint import pprint
pprint(vars(result))

但是没有找到簇(请注意结果显然应该是[0,0,0,1,1]):

Converged after 23 iterations.
{'affinity': 'precomputed',
 'affinity_matrix_': array([[ 0., -1., -2., -6., -7.],
       [-1.,  0., -1., -7., -8.],
       [-2., -1.,  0., -8., -9.],
       [-6., -7., -8.,  0., -1.],
       [-7., -8., -9., -1.,  0.]]),
 'cluster_centers_indices_': array([0]),
 'convergence_iter': 15,
 'copy': True,
 'damping': 0.9,
 'labels_': array([0, 0, 0, 0, 0]),
 'max_iter': 200,
 'n_iter_': 24,
 'preference': None,
 'verbose': True}

【问题讨论】:

  • 亲和的负值是一个不寻常的选择,有时会导致问题。
  • 那么亲和矩阵的优选形式是什么? sklearn 的官方文档不包含此类信息。
  • 通常它是一个程度 >= 相关对象的程度,例如正边的权重。

标签: python scikit-learn cluster-analysis


【解决方案1】:

使用参数damping (0.5) 的默认值应该可以解决问题:

Converged after 59 iterations.
{'affinity': 'precomputed',
 'affinity_matrix_': array([[ 0., -1., -2., -6., -7.],
       [-1.,  0., -1., -7., -8.],
       [-2., -1.,  0., -8., -9.],
       [-6., -7., -8.,  0., -1.],
       [-7., -8., -9., -1.,  0.]]),
 'cluster_centers_indices_': array([1, 3]),
 'convergence_iter': 15,
 'copy': True,
 'damping': 0.5,
 'labels_': array([0, 0, 0, 1, 1]),
 'max_iter': 200,
 'n_iter_': 60,
 'preference': None,
 'verbose': True}

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 2018-04-19
    • 2017-08-06
    • 2018-05-22
    • 2016-03-17
    • 1970-01-01
    • 2015-09-28
    • 2012-12-30
    • 2022-01-20
    相关资源
    最近更新 更多