Come eseguire la riduzione della dimensionalità in R


28

Ho una matrice in cui a (i, j) mi dice quante volte individuo ho visto la pagina j. Ci sono 27K individui e 95K pagine. Vorrei avere una manciata di "dimensioni" o "aspetti" nello spazio delle pagine che corrisponderebbero a gruppi di pagine che vengono spesso visualizzate insieme. Il mio obiettivo finale è quindi poter calcolare la frequenza con cui un individuo ha visualizzato pagine che rientrano nella dimensione 1, dimensione 2, ecc.

Ho letto la documentazione R sull'analisi dei componenti principali e la decomposizione a valore singolo e ho eseguito questi comandi, ma non sono sicuro di come procedere.

Come posso usare la riduzione della dimensionalità per fare questo? O è davvero un problema di clustering e dovrei invece esaminare gli algoritmi di clustering?

Mille grazie per qualsiasi approfondimento ~ l

Risposte:


10

Supponiamo che mat_pages [] contenga pagine nelle colonne (che si desidera raggruppare) e singoli individui nelle righe. È possibile raggruppare le pagine in base ai singoli dati in Rby usando il comando seguente:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

La matrice dei carichi è la matrice degli autovettori della decomposizione SVD dei dati. Forniscono il peso relativo di ciascuna PAGINA nel calcolo dei punteggi. I caricamenti con valori assoluti più grandi hanno maggiore influenza nel determinare il punteggio del componente principale corrispondente.

Tuttavia, dovrei anche sottolineare la breve venuta dell'utilizzo di PCA per raggruppare le pagine. La ragione di ciò è che i caricamenti danno pesi maggiori alle PAGINE con una variazione maggiore, indipendentemente dal fatto che questa variazione sia effettivamente dovuta al contenuto della PAGINA o ad altri motivi (può essere una variazione tecnica o individuale). I caricamenti non riflettono necessariamente le vere differenze tra i gruppi, che (forse) il tuo interesse principale. MA, questo raggruppamento riflette veramente le differenze nel gruppo supponendo che tutte le pagine abbiano la stessa varianza (non so se questo è un presupposto valido).

Se si dispone di potenti funzionalità informatiche (che possono essere possibili date le dimensioni dei dati), l'utilizzo di modelli gerarchici potrebbe essere una buona idea. In R, può essere fatto usando il pacchetto lme4.


Cosa fare dopo aver ottenuto i punteggi?

Questo è un suggerimento approssimativo e l'analisi dipende molto dall'aspetto dei dati. Inoltre, immagino che questo processo sarebbe altamente impossibile per raggruppare i dati di grandezza che hai.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

Spero che questo possa darti un quadro di come sono raggruppati i dati.

Attenzione: questo non è ciò che consiglierei.


La mia raccomandazione:

Problemi come questi sorgono frequentemente nella genomica. Nel tuo caso le pagine corrispondono ai geni e gli individui corrispondono ai pazienti (in pratica gli individui hanno lo stesso significato che nella genomica)

Si desidera raggruppare le pagine in base ai dati.

Puoi usare molti pacchetti di clustering in R e sono stati indicati in altre risposte. Un problema fondamentale con i pacchetti è come hclust è come determinare il numero di cluster. Alcuni dei miei preferiti sono:

  • pvclust (Fornisce cluster e fornisce anche un valore p per ciascun cluster. Utilizzando il valore p è possibile determinare i cluster statisticamente significativi. Problema : richiede molta potenza computazionale e non sono sicuro che funzionerà con i dati dei dimensione)
  • hopach (ti dà il numero stimato di cluster e i cluster)
  • ci sono altri pacchetti disponibili in Bioconductor, si prega di controllare nella vista delle attività.

Puoi anche usare gli algoritmi di clustering come k-mean ecc. Sono sicuro di aver visto un thread in questo forum sul clustering. Le risposte sono state molto dettagliate. Tal Galili mi ha chiesto se ricordo bene.


@suncoolsu: molte grazie! Ho appena seguito il tuo consiglio e ho eseguito prcomp. Ho anche memorizzato la matrice dei caricamenti che ha prodotto. Ma come posso usare questa matrice per raggruppare le pagine?
laramichaels,

Ciao Laramichaels, per favore trova la mia risposta qui sotto.
suncoolsu,

@suncoolsu: ho a che fare con un problema simile, ma voglio "raggruppare" gli individui che hanno le stesse "dinamiche" (in realtà ho un numero enorme di timeseries per regioni e voglio modellarli). Stavo pensando di usare pam con la distanza di correlazione (1-rho). È un modo consigliato? Potresti suggerire alcuni percorsi da esplorare?
teucer,

@Musa .. Puoi essere un po 'più chiaro. Non credo di capire le "dinamiche" menzionate da te. Sicuramente pam è OK per il clustering. Ma puoi anche provare i pacchetti R pvclust e hopach come menzionato da me. Inoltre, le SOM (mappe auto-organizzate) sono un modo diverso di guardare al raggruppamento. Per ulteriori dettagli, consultare il libro Ripley and Venable (2002) - MASS. Il libro offre un trattamento approfondito del raggruppamento.
suncoolsu,

@suncoolsu: mi dispiace per la scarsa formulazione! Ho 200 timeseries che voglio modellare (cioè simulare). Penso di poter raggruppare più volte "simili" (cioè avere lo stesso comportamento nel tempo: l'approccio diretto è quello di usare la correlazione) più volte e simulare solo le più serie ...
teucer

4

È certamente un problema di clustering. Dai un'occhiata clusteral pacchetto Rs per avere una panoramica delle opzioni dell'algoritmo ( pame agnessono le migliori opzioni per iniziare; rappresentano due flussi principali nel clustering: centroidi e gerarchici ).
Il problema principale nell'uso del clustering sui dati è definire una buona misura di somiglianza tra le pagine; semplice è usare la distanza di Manhattan; un po 'più complesso per contare il numero di spettatori comuni e normalizzarlo con, diciamo, la media del numero di spettatori della prima e della seconda pagina - questo dovrebbe mettere a tacere gli effetti di popolarità.

EDIT: Ok, ora ho visto la dimensione dei dati ... probabilmente farà esplodere R, poiché ha bisogno di un triangolo di per memorizzare le distanze. Dai un'occhiata a questo rapporto per possibili soluzioni.(number of pages)×(number of pages)


Ho votato a favore della tua risposta. Tuttavia, potresti fornire i nuovi collegamenti per il rapporto nell'ultima frase. Quello vecchio è morto.
discipulus,

1
Temo che sia perduto per sempre ... Generalmente si trattava di implementazioni di metodi di clustering che non costruiscono esplicitamente matrice di somiglianza tra loro ma investigano oggetti su richiesta.

1

La riduzione dimensionale sta fondamentalmente applicando l'algoritmo di clustering agli attributi (colonne). A causa della dimensionalità abbastanza ampia del set di dati, è possibile provare a utilizzare SOM (mappa autoorganizzante / rete Kohonen) per creare una mappa per individui o pagine. Puoi quindi vedere se i modelli sono significativi (interpretabili).


1

Se fai PCA, il mio consiglio sarebbe di selezionare brevemente altri componenti oltre ai primi due. Una volta che hai l' prcompoggetto pc(vedi il post di suncoolsu), puoi plot(pc)vedere la quantità di varianza attribuita ai diversi componenti principali. È inoltre possibile visualizzare facilmente diversi (di solito tre o quattro) di loro con pairs(pc$x[,1:3])o, usando lattice, splom(pc$x[,1:3]).

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.