Как преобразовать дендрограмму в объект дерева в Python? - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь использовать модуль scipy.hierarchy.cluster для иерархической кластеризации некоторого текста.Я сделал следующее:

l = linkage(model.wv.syn0, method='complete', metric='cosine')

den = dendrogram(
l,
leaf_rotation=0.,  
leaf_font_size=16.,  
orientation='left',
leaf_label_func=lambda v: str(model.wv.index2word[v])

Функция дендрограммы возвращает dict, содержащий представление дерева, где:

den['ivl'] - список меток, соответствующих листьям:

['politics', 'protest', 'characterfirstvo', 'machine', 'writing', 'learning', 'healthcare', 'climate', 'of', 'rights', 'activism', 'resistance', 'apk', 'week', 'challenge', 'water', 'obamacare', 'colorado', 'change', 'voiceovers', '52', 'acting', 'android']

den['leaves'] - это список позиций каждого листа при обходе листьев слева направо:
[0, 18, 5, 6, 2, 7, 12, 16, 21, 20, 22, 3, 10, 14, 15, 19, 11, 1, 17, 4, 13, 8, 9]

Я знаю, что у Сципи to_tree() Метод преобразует иерархическую кластеризацию, представленную матрицей связи, в объект дерева, возвращая ссылку на корневой узел (объект ClusterNode) - но я не уверен, насколько этот корневой узел соответствует моим листьям / меткам.Например, идентификаторы, возвращаемые методом get_id() в этом случае: root = 44, left = 41, right = 43:

rootnode, nodelist = to_tree(l, rd=True)
rootID = rootnode.get_id()
leftID = rootnode.get_left().get_id()
rightID = rootnode.get_right().get_id()

Мой вопрос, по сути, заключается в том, как я могу пройти по этому дереву и получить соответствующую позицию в den['leaves'] иметка в den['ivl'] для каждого ClusterNode?

Заранее благодарен за любую помощь!

Для справки, это матрица связи l:

[[20.         22.          0.72081252  2.        ]
[12.         16.          0.78620636  2.        ]
[ 3.         10.          0.79635815  2.        ]
[ 0.         18.          0.80193474  2.        ]
[15.         19.          0.82297097  2.        ]
[ 2.          7.          0.84152483  2.        ]
[ 1.         17.          0.84453892  2.        ]
[ 4.         13.          0.86098654  2.        ]
[ 8.          9.          0.88163748  2.        ]
[14.         27.          0.91252009  3.        ]
[11.         29.          0.92034739  3.        ]
[21.         23.          0.92406542  3.        ]
[ 5.          6.          0.93213108  2.        ]
[25.         32.          0.98555722  5.        ]
[26.         35.          0.99214198  4.        ]
[30.         31.          1.05624908  4.        ]
[24.         34.          1.0606247   5.        ]
[28.         39.          1.06322889  7.        ]
[37.         40.          1.1455562  11.        ]
[33.         38.          1.15171714  7.        ]
[36.         42.          1.17330334 12.        ]
[41.         43.          1.25056073 23.        ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...