La mappatura tra due serie di risultati è facile da calcolare, poiché le informazioni ottenute in un test possono essere rappresentate come una serie di tre tuple: il primo componente è un punto (multidimensionale), il secondo è un'etichetta (arbitraria) del cluster fornito dall'algoritmo e il terzo è un'etichetta (arbitraria) del cluster fornita da un algoritmo di riferimento. Costruisci per kKKtabella di classificazione per le coppie di etichette: se i risultati concordano, sarà un multiplo di una matrice di permutazione. Cioè, ogni riga e ogni colonna devono avere esattamente una cella diversa da zero. È un semplice controllo da programmare. È anche semplice tenere traccia delle piccole deviazioni da questo ideale indietro ai singoli punti di dati in modo da poter vedere esattamente come le due risposte differiscono se differiscono affatto. Non mi preoccuperei di calcolare le misure statistiche di accordo: o c'è un accordo perfetto (fino alla permutazione) o no, e in quest'ultimo caso è necessario rintracciare tutti i punti di disaccordo per capire come si verificano. I risultati o sono d'accordo o no; qualsiasi disaccordo, anche a un solo punto, deve essere verificato.
È possibile che si desideri utilizzare diversi tipi di set di dati per i test: (1) set di dati pubblicati con risultati k-mean pubblicati; (2) set di dati sintetici con evidenti cluster forti; (3) set di dati sintetici senza cluster evidenti. (1) è una buona disciplina da utilizzare ogni volta che scrivi un programma di matematica o statistica. (2) è facile da eseguire in molti modi, ad esempio generando alcuni punti casuali che fungono da centri di cluster e quindi generando nuvole di punti spostando casualmente i centri del cluster in quantità relativamente piccole. (3) fornisce alcuni controlli casuali che potrebbero scoprire comportamenti imprevisti; ancora una volta, questa è una buona disciplina di prova generale.
Inoltre, prendi in considerazione la creazione di set di dati che stressano l'algoritmo mentendo solo sui confini tra soluzioni estreme. Ciò richiederà creatività e una profonda comprensione del tuo algoritmo (che presumibilmente hai!). Un esempio vorrei controllare in ogni caso sarebbe insiemi di vettori di forma dove v è un vettore senza componenti di zero e i assume valori sequenziali interi 0 , 1 , 2 , ... , n - 1 . Vorrei anche controllare l'algoritmo su insiemi di vettori che formano poligoni equilateri. In entrambe le situazioni, i casi in cui n non lo èio vvio0 , 1 , 2 , … , n - 1nun multiplo di è particolarmente interessante, incluso dove n è minore di k . Ciò che è comune a queste situazioni è che (a) usano tutte le dimensioni del problema, ma (b) le soluzioni corrette sono geometricamente ovvie, e (c) ci sono molteplici soluzioni corrette.KnK
d≥ 2uv2 dXzXz
w = z -( z ⋅ x ) x .
ywXyXydncos( 2 πk / n ) x + sin( 2 πk / n ) yK0n - 1