Alcune domande su StackOverflow menzionano questo problema, ma non ho trovato una soluzione concreta.Matrice di similarità coseno di cluster
devo una matrice quadrata che consiste di somiglianze coseno (valori tra 0 e 1), per esempio:
| 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
La matrice quadrata può essere di qualsiasi dimensione. Voglio ottenere cluster (non so quanti) che massimizzano i valori tra gli elementi nel cluster. Cioè per l'esempio precedente devo ottenere due gruppi:
- B
- A, C, D
Il motivo è perché C & D hanno il più alto valore tra di loro, e A & C anche avere il valore più alto tra di loro.
Un articolo può trovarsi in un solo cluster.
Il richiamo non è importante per questo problema, ma la precisione è molto importante. È accettabile produrre tre cluster: 1) B, 2) A, 3) C, D. Ma non è accettabile produrre alcuna soluzione in cui B si trova in un cluster con un altro elemento.
Penso che la diagonale (1.0) mi confonda. I miei dati sono garantiti per avere almeno un cluster di 2+ elementi, e voglio trovare il maggior numero possibile di cluster senza sacrificare la precisione.
Dovrò implementarlo in Python.
Hai provato clustering gerarchico? Questo suona esattamente quello che stai tentando, il raggruppamento gerarchico agglomerativo. –