Quale algoritmo dovrei usare per raggruppare un enorme set di dati binari in poche categorie?


11

Ho una grande matrice (650K righe * 62 colonne) di dati binari (solo voci 0-1). La matrice è prevalentemente sparsa: circa l'8% è riempito.

Vorrei raggrupparlo in 5 gruppi - diciamo chiamato da 1 a 5. Ho provato il clustering gerarchico e non sono stato in grado di gestire le dimensioni. Ho anche usato l'algoritmo di clustering dei k-media basato sulla distanza di hamming, considerando i vettori di bit 650K di lunghezza 62. Non ho ottenuto risultati adeguati con nessuno di questi.

Per favore aiuto.


Non posso commentare b / c del mio 1 rappresentante quindi ho dovuto digitare questo come una risposta. Potresti esaminare la somiglianza di Jaccard. Penso che Python Scipy ne abbia implementazioni. Jaccard ...
gobrewers14

C'è qualche motivo per presumere che i dati rientrino naturalmente in cinque gruppi, almeno in una certa misura? Sei davvero interessato al raggruppamento di righe o sei anche interessato alle relazioni tra i 62 tratti codificati nei vettori di bit? Se quest'ultimo, quindi altre tecniche sono più adatte.
Micans,

Risposte:


4

Stai facendo la domanda sbagliata.

Invece di chiedere "quale algoritmo", dovresti chiedere "cos'è una categoria / cluster significativi nella tua applicazione".

Non mi sorprende che gli algoritmi sopra non abbiano funzionato: sono progettati per casi d'uso molto diversi. k-mean non funziona con altre distanze arbitrarie. Non usarlo con la distanza di Hamming. C'è un motivo per cui si chiama K- mezzi , ha senso solo per l'uso quando la media aritmetica è significativa (che non è per dati binari).

Potresti voler provare invece k-mode, IIRC questa è una variante che in realtà è pensata per essere utilizzata con dati categoriali, e i dati binari sono in qualche modo categorici (ma la scarsità potrebbe comunque ucciderti).

Ma prima di tutto, hai rimosso duplicati per semplificare i tuoi dati e rimosso colonne uniche / vuote, ad esempio?

Forse APRIORI o approcci simili sono anche più significativi per il tuo problema.

Ad ogni modo, prima cerca di capire cosa ti serve, quindi quale algoritmo può risolvere questa sfida. Lavora basato sui dati , non provando algoritmi casuali.


Puoi spiegare perché "Non usare con la distanza di Hamming"? Potrebbe avere senso, dopo tutto è disponibile in Matlab. Non mi dispiace aprire una nuova domanda, se ha senso.
Dror Atariah,

A causa della media. La media aritmetica non ha senso con la distanza di martellamento o i dati binari. Utilizzare invece la modalità o il medoid .
Ha QUIT - Anony-Mousse il

Giusto per essere sicuro di aver capito bene: matlab usa la media aritmetica quando aggiorna i centroidi quando usa i mezzi k insieme alla metrica hamming. È giusto? Qual è il modo giusto di utilizzare questa metrica in matlab?
Dror Atariah,

k- mean si chiama k- significa perché usa la media. Altrimenti, si chiama k-medoidi, k-mode, ecc. La media è buona per L2 - somma delle deviazioni al quadrato.
Ha QUIT - Anony-Mousse il

Così, usi MATLAB K- mezzi insieme alla hamming metrica; questo non ha molto senso.
Dror Atariah,

3

Forse sono un po 'in ritardo con la risposta, ma probabilmente sarebbe utile per qualche corpo in futuro.

La teoria della risonanza adattiva è un buon algoritmo per i problemi di classificazione binaria. Verifica di ART 1. Ulteriori informazioni sono disponibili nel libro gratuito Neural Network Design nel capitolo 19.

Questa rete combina una grande idea biologica e una buona implementazione matematica. Anche questo algoritmo è facile da implementare e, in questo libro, puoi anche trovare istruzioni dettagliate su come costruire questo classificatore.


2

Un algoritmo classico per il clustering di dati binari è il modello di miscela di Bernoulli. Il modello può essere adattato utilizzando i metodi bayesiani e può essere adattato anche utilizzando EM (Expectation Maximization). Puoi trovare codice Python di esempio in tutto il GitHub mentre il primo è più potente ma anche più difficile. Ho un'implementazione C # del modello su GitHub (usa Infer.NET che ha una licenza restrittiva!).

Il modello è abbastanza semplice. Prima di tutto campionare il cluster a cui appartiene un punto dati. Quindi campiona indipendentemente da tutti i Bernoullis che hai dimensioni nel tuo set di dati. Si noti che ciò implica l'indipendenza condizionale dei valori binari dati dal cluster!

Nell'impostazione bayesiana, le precedenti assegnazioni di cluster in eccesso sono una distribuzione di Dirichlet. Questo è il posto dove mettere i priori se credi che alcuni ammassi siano più grandi di altri. Per ogni cluster è necessario specificare una distribuzione Beta precedente per ogni distribuzione di Bernoulli. Tipicamente questo precedente è Beta (1,1) o uniforme. Infine, non dimenticare di inizializzare in modo casuale le assegnazioni dei cluster quando vengono forniti i dati. Ciò interromperà la simmetria e il campionatore non si bloccherà.

Esistono diverse funzioni interessanti del modello BMM nell'impostazione bayesiana:

  1. Clustering online (i dati possono arrivare come stream)

  2. Il modello può essere utilizzato per inferire le dimensioni mancanti

Il primo è molto utile quando il set di dati è molto grande e non si adatta alla RAM di una macchina. Il secondo può essere utilizzato in tutti i tipi di attività di imputazione dei dati mancanti, ad es. imputazione della metà mancante dell'immagine binaria MNIST.

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.