Несколько вопросов о stackoverflow упоминают эту проблему, но я не нашел конкретного решения.
У меня есть квадратная матрица, которая состоит из сходств косинусов (значения от 0 до 1), например:
| A | B | C | D
A | 1.0 | 0.1 | 0.6 | 0.4
B | 0.1 | 1.0 | 0.1 | 0.2
C | 0.6 | 0.1 | 1.0 | 0.7
D | 0.4 | 0.2 | 0.7 | 1.0
Квадратная матрица может быть любого размера. Я хочу получить кластеры (я не знаю, сколько), которые максимизируют значения между элементами в кластере. То есть для приведенного выше примера я должен получить два кластера:
- В
- A, C, D
Причина в том, что C и D имеют самое высокое значение между ними, а A и C также имеют самое высокое значение между ними.
Элемент может находиться только в одном кластере.
Напомним, что это не важно для этой проблемы, но точность очень важна. Допустимо выводить три кластера: 1) B, 2) A, 3) C, D. Но не приемлемо выводить какое-либо решение, где B находится в кластере с другим элементом.
Я думаю, что диагональ (1.0) меня сбивает с толку. У моих данных, как минимум, есть как минимум один кластер из 2+ элементов, и я хочу найти как можно больше кластеров, не жертвуя точностью.
Мне нужно реализовать это на Python.