Как настроить / выбрать параметр предпочтения AffinityPropagation? - PullRequest
2 голосов
/ 24 сентября 2019

У меня есть большой словарь "парных матриц подобия", который будет выглядеть следующим образом:

similarity['group1']:

array([[1.        , 0.        , 0.        , 0.        , 0.        ],
       [0.        , 1.        , 0.09      , 0.09      , 0.        ],
       [0.        , 0.09      , 1.        , 0.94535157, 0.        ],
       [0.        , 0.09      , 0.94535157, 1.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 1.        ]])

Короче говоря, каждый элемент предыдущей матрицы являетсявероятность того, что record_i и record_j похожи (значения 0 и 1 включительно), 1 точно одинаковы, а 0 совершенно разные.

Затем я подаю каждую матрицу подобия в AffinityPropagation алгоритм для группировки / кластеризации похожих записей:

sim = similarities['group1']

clusterer = AffinityPropagation(affinity='precomputed', 
                                damping=0.5, 
                                max_iter=25000, 
                                convergence_iter=2500, 
                                preference=????)) # ISSUE here

affinity = clusterer.fit(sim)

cluster_centers_indices = affinity.cluster_centers_indices_
labels = affinity.labels_

Однако, поскольку я запускаю вышеизложенное на множественных матрицах подобия, мне нужно иметь обобщенный параметр preference, который яне могу настроиться.

В документации сказано, что по умолчанию она установлена ​​как медиана матрицы подобия, однако я получаю много ложных срабатываний с этой настройкой, иногда среднее значение иногда дает слишком многокластеры и т.д ...


Например: при игре с параметром предпочтения я получаю результаты из матрицы подобия

  • preference = default # which is the median (value 0.2) of the similarity matrix:( неверные результаты, мы видим, что запись 18 не должна быть там, потому что сходство с другими записями очень низкое):

     # Indexes of the elements in Cluster n°5: [15, 18, 22, 27]
    
     {'15_18': 0.08,
     '15_22': 0.964546229533378,
     '15_27': 0.6909703138051403,
     '18_22': 0.12,    # Not Ok, the similarity is too low
     '18_27': 0.19,    # Not Ok, the similarity is too low
     '22_27': 0.6909703138051403}
    
  • preference = 0.2 in fact from 0.11 to 0.26: ( правильно результаты, поскольку записи похожи):

     # Indexes of the elements in Cluster n°5: [15, 22, 27]
    
     {'15_22': 0.964546229533378,
     '15_27': 0.6909703138051403,
     '22_27': 0.6909703138051403}
    

Мой вопрос : Как следуетЯ выбрал этот preference параметр таким образом, чтобы обобщить

...