Formula di inerzia a grappolo in scikit learn


9

Vorrei codificare un cluster di kmean in Python usando Panda e Scikit Learn. Per selezionare il buon k, vorrei codificare la statistica del gap da Tibshirani e al 2001 ( pdf ).

Vorrei sapere se potevo usare il risultato di inerzia di scikit e adattare la formula statistica del gap senza dover ricodificare il calcolo di tutte le distanze.

Qualcuno conosce la formula di inerzia utilizzata in scikit / conosce un modo semplice per ricodificare la statistica del gap usando funzioni di distanza di alto livello?


Penso che questa domanda abbia un contenuto statistico sufficiente per essere in argomento per CV, ma nota che richiede anche una programmazione abbastanza sofisticata e conoscenza di Python. Potrebbe essere difficile ottenere una buona risposta. Potresti voler chiedere / essere disposto a accontentarti anche di pseudocodice , e / o potresti dover dividere questa domanda in 2 parti, 1 qui sugli aspetti statistici e 1 parte su Stack Overflow sugli aspetti di programmazione di Python. (O forse no, non lo so per certo, ma voglio solo darti un giusto avvertimento; vedremo come va.)
gung - Reinstalla Monica

1
Questa domanda ha bisogno di definire il termine "inerzia". Sembra coniato al suo interno python.
ttnphns,

Risposte:


6

Immagino di aver trovato la mia risposta per il raggruppamento dei kmean:

Osservando il codice sorgente di git, ho scoperto che per scikit learn l'inerzia viene calcolata come la somma della distanza quadrata per ciascun punto rispetto al centroide più vicino, ovvero al cluster assegnato. Quindi dove è il centroide del cluster assegnato e è la distanza al quadrato. I=i(d(i,cr))crd

Ora la formula della statistica gap comprende dove è la somma delle distanze al quadrato tra tutti i punti nel cluster .

Wk=r=1k1(2nr)Dr
Drr

Introducendo , nella formula della distanza quadrata ( essendo il centroide delle coordinate del cluster ), ho un termine che corrisponde all'inerzia (come in scikit) + un termine che scompare se ogni è il baricentro di ciascun cluster (che dovrebbe essere in kmean). Quindi immagino che sia in realtà scikit Inertia.+cccrcWk

Ho ancora due domande:

  1. Pensi che il mio calcolo sia corretto? (Ad esempio, non so se valga per il clustering gerarchico.)
  2. Se ho ragione sopra, ho codificato la statistica gap (come differenza di inerzia del log tra stima e clustering) e funziona male soprattutto nel set di dati dell'iride, qualcuno l'ha provato?

2
È meglio non porre domande nelle risposte. Se questa non è davvero la risposta alla tua domanda, ma solo una soluzione parziale per chiarire la vera domanda, sarebbe meglio modificare la tua domanda e incollare queste informazioni.
gung - Reinstate Monica

1
@Scratch hai mai avuto un'implementazione Python della statistica gap per lavorare sul set di dati Iris? Sto lottando con lo stesso problema.
Zelazny7,

Sì, ne ho codificato uno qualche mese fa. Come posso inviarlo?
Gratta il

1
La formula non dovrebbe essere questa ?
Wk=r=1kDr(2nr)
Biswanath,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.