Cluster Big Data in R ed il campionamento è rilevante?


13

Sono nuovo nella scienza dei dati e ho un problema a trovare i cluster in un set di dati con 200.000 righe e 50 colonne in R.

Dato che i dati hanno sia variabili numeriche che nominali, metodi come K-significa che usa la misura della distanza euclidea non sembra una scelta appropriata. Quindi mi rivolgo a PAM, agnes e hclust che accetta una matrice di distanza come input.

Il metodo daisy può funzionare su dati di tipo misto ma la matrice della distanza è troppo grande: 200.000 volte 200.000 è molto più grande di 2 ^ 31-1 (il limite di lunghezza del vettore prima di R 3.0.0).

La nuova R 3.0.0 rilasciata ieri supporta vettori lunghi con una lunghezza superiore a 2 ^ 31-1. Ma una doppia matrice di 200.000 per 200.000 richiede una RAM continua superiore a 16 Gb, cosa impossibile sulla mia macchina.

Ho letto del calcolo parallelo e del pacchetto bigmemory e non sono sicuro che possano essere d'aiuto: se sto usando Daisy, genererà una grande matrice che non può comunque adattarsi alla memoria.

Ho anche letto del post sul campionamento: il campionamento è rilevante ai tempi dei "big data"?

Quindi, nel mio caso, è rilevante utilizzare il campionamento sul set di dati, il cluster sul campione e quindi inferire la struttura dell'intero set di dati?

Potete per favore darmi qualche suggerimento? Grazie!

Informazioni sulla mia macchina:

R versione 3.0.0 (2013-04-03)

Piattaforma: x86_64-w64-mingw32 / x64 (64-bit)

Sistema operativo: Windows 7 a 64 bit

RAM: 16,0 GB


L'unico metodo di clustering che conosco per i big data (ad esempio milioni di casi) e che può accettare variabili nominali insieme a quelli numerici è il cluster TwoStep trovato in SPSS.
ttnphns,

Risposte:


4

O(n3)O(n2)

La stessa PAM non dovrebbe richiedere una matrice di distanza completa, ma è noto che l'algoritmo si ridimensiona male, perché deve quindi (ri) calcolare tutte le distanze a coppie all'interno di ciascun cluster su ciascuna iterazione per trovare gli elementi più centrali. Questo è molto meno se hai un gran numero di cluster, ma comunque piuttosto costoso!

O(nlogn)

Tuttavia, per la maggior parte di questi algoritmi, devi prima assicurarti che la tua funzione di distanza sia davvero buona; quindi è necessario considerare i modi per accelerare le query utilizzando gli indici appropriati.

Si noti inoltre che in molti casi - e questo potrebbe valere per PAM - è possibile eseguire prima l'algoritmo su un campione , quindi perfezionarlo solo sul set di dati completo. Se il tuo campione è rappresentativo, algoritmi come k-mean e PAM dovrebbero fornire essenzialmente lo stesso risultato del set di dati completo.


Non aiuteremo l'OP qui, ma nel caso in cui arrivi qualcun altro che abbia numeri di campione "intermedi": c'è anche un fastcluster per R (vedi math.stanford.edu/~muellner/fastcluster.html ).
cbeleites supporta Monica il

Ciao Anony-Mousse, potresti indicarmi alcuni degli algoritmi che utilizzano l'accelerazione della struttura dell'indice? Molte grazie!

Ad esempio, DBSCAN può essere accelerato bene con indici che supportano le query dell'intervallo epsilon. Probabilmente significa anche raggruppare i turni. OPTICS, che può anche essere accelerato in questo modo, può essere visto come una versione più avanzata del clustering di collegamenti (si potrebbe chiamarlo "clustering di collegamenti di densità gerarchica")
Has QUIT - Anony-Mousse

2

prova la funzione CLARA dal pacchetto cluster in R. Implementa un algoritmo simile a pam sottocampionando i tuoi dati (assicurati di fornire dimensioni di sottocampioni che abbiano senso per i tuoi dati perché le impostazioni predefinite sono volutamente troppo piccole). Funziona particolarmente bene se i medi nei tuoi dati possono essere rappresentati da un piccolo campione dei dati totali (cioè - ci sono relativamente meno cluster nel set di dati). In questo modo è possibile raggruppare in modo efficiente con un piccolo campione casuale e aggiungere punti alla soluzione di cluster pre-calcolata.

http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/CLARA


ciao zzk, grazie per la risposta. Ho già letto di Clara ma sembra che fornisca solo metriche euclidee e manhattan. Il problema principale è che il mio set di dati ha sia variabili numeriche che nominali. Pertanto, l'utilizzo di nessuna metrica per la misurazione della distanza non è appropriato.

ah sì, questo è attualmente un limite anche per me. Credo che il metodo in realtà possa essere fatto su qualsiasi distanza arbitraria, ma non mi sono ancora preso la briga di consultare il codice sorgente per vedere se può essere cambiato.
zzk,

0

Puoi anche applicare analisi di corrispondenza multiple sulle tue variabili qualitative ed effettuare trasformazioni in una variabile numerica.


2
Sembra una buona idea, ma potrebbe essere un po 'scarna. Puoi approfondire un po 'questo per spiegare di cosa si tratta e perché ciò sarebbe d'aiuto?
gung - Ripristina Monica
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.