Sono disponibili librerie per metodi simili a CART che utilizzano predittori e risposte sparse?


11

Sto lavorando con alcuni grandi set di dati usando il pacchetto gbm in R. Sia la mia matrice predittore che il mio vettore di risposta sono piuttosto scarsi (cioè la maggior parte delle voci sono zero). Speravo di costruire alberi decisionali usando un algoritmo che sfrutti questa scarsità, come è stato fatto qui ). In quel documento, come nella mia situazione, la maggior parte degli articoli ha solo alcune delle molte funzionalità possibili, quindi sono stati in grado di evitare molti calcoli sprecati supponendo che ai loro articoli mancasse una determinata funzionalità a meno che i dati non dicessero esplicitamente diversamente. La mia speranza è che potrei ottenere una velocità simile usando questo tipo di algoritmo (e quindi avvolgendolo attorno ad un algoritmo di potenziamento per migliorare la mia precisione predittiva).

Dato che non sembravano pubblicare il loro codice, mi chiedevo se ci fossero pacchetti o librerie open-source (in qualsiasi lingua) ottimizzati per questo caso. Idealmente, vorrei qualcosa che potesse prendere una matrice sparsa direttamente dal Matrixpacchetto di R , ma prenderò quello che posso ottenere.

Mi sono guardato intorno e sembra che questo genere di cose dovrebbe essere là fuori:

  • I chimici sembrano imbattersi molto in questo problema (il documento che ho collegato sopra riguardava l'apprendimento di trovare nuovi composti farmacologici), ma le implementazioni che ho potuto trovare erano di proprietà o altamente specializzate per l'analisi chimica. È possibile però che uno di essi possa essere riutilizzato.

  • Anche la classificazione dei documenti sembra essere un'area in cui è utile l'apprendimento da spazi di funzioni sparse (la maggior parte dei documenti non contiene la maggior parte delle parole). Ad esempio, c'è un riferimento obliquo a un'implementazione sparsa di C4.5 (un algoritmo simile a CART) in questo documento , ma nessun codice.

  • Secondo la mailing list , WEKA può accettare dati scarsi, ma a differenza del metodo nel documento che ho linkato sopra, WEKA non è ottimizzata per trarne vantaggio in termini di sprecare cicli di CPU.

Grazie in anticipo!


2
Non R, ma Python scikits.learn ha un supporto crescente per le matrici sparse.
chl

@ ch1 grazie. Sembra che non abbiano ancora aggiunto i metodi dell'albero. Qualcuno sta lavorando a un'implementazione , ma non sono sicuro che sarà in grado di utilizzare dati sparsi. Terrò sicuramente in mente i metodi sparsi di SVM, però!
David J. Harris,

Quando dici "CART-like" vuoi specificamente alberi decisionali o qualsiasi tipo di modello predittivo?
Michael McGowan,

@Michael - Vorrei alberi, dato che li darò in pasto a una procedura di potenziamento e hanno una varianza elevata.
David J. Harris,

2
Non conosco i modelli di un albero, ma glmneted e1071::svmentrambi supportano Matrixoggetti sparsi . GAMbooste GLMboost(dal pacchetto GAMboost) può anche.
Zach,

Risposte:


2

Mi piacerebbe vedere un punto di riferimento della loro scarsa implementazione rispetto alle moderne implementazioni CART utilizzate in RF. Quel documento è piuttosto vecchio in termini di progressi in questo settore e sarei sorpreso se fornisse comunque una notevole accelerazione.

Parte del motivo è che l'uso di un algoritmo di ordinamento intelligente come Quicksort nella ricerca suddivisa può fornire prestazioni quasi O (n) per funzionalità quasi costanti (comprese quelle sparse). Le implementazioni veloci tracciano anche quando una funzione è diventata costante all'interno di un ramo di un albero e non dovrebbe più essere esaminata. Le rappresentazioni di funzionalità dense forniscono ricerche rapide in un modo compatibile con la cache della CPU, quindi avrai bisogno di una rappresentazione sparsa davvero intelligente per vincere nei cicli della CPU.

Questo è discusso qui , qui , qui .

In realtà ho implementato una rappresentazione sparsa dei dati dei dati ad un certo punto nel mio pacchetto RF CloudForest, ma l'ho trovato più lento di una rappresentazione densa dei dati e li ho abbandonati sebbene fornisse alcuni vantaggi di memoria.

La mia raccomandazione sarebbe quella di provare Scikit Learn o Cloudforest per potenziare le cose e vedere se è abbastanza veloce. Entrambi possono essere estesi con criteri di potenziamento personalizzati se si desidera fare qualcosa di non standard. (In realtà ho scritto cloudforest originariamente per lavorare con grandi set di dati genetici altamente dimensionali che sono molto simili a quello che stai descrivendo).


1

Probabilmente c'è una piccola possibilità per qualsiasi codice che ne trarrebbe vantaggio - dovresti piuttosto scrivere qualcosa da solo.
Tuttavia, l'altra opzione è trasformare i dati per ridurre le dimensioni dei dati rimuovendo le informazioni ridondanti. È difficile dire come senza le informazioni sui tuoi dati, ma forse puoi unire alcune funzionalità che sai non si sovrappongono, parti di PCA o cambiare la rappresentazione di alcuni descrittori? Inoltre, se dici che anche la tua risposta è scarsa, forse è ragionevole sottocampionare gli oggetti con 0 in risposta?


Grazie per la risposta. Il downsampling sembra un'idea interessante. Attualmente sto valutando alcuni aspetti dei dati per altri motivi, ma potrebbe essere una buona idea. Ma perché dici che è improbabile che esista un codice per questo? Ho collegato a un documento di 12 anni fa che sembra aver affrontato lo stesso problema.
David J. Harris,

@David In breve, ritengo che non abbia senso: si tratta di un problema di "domanda sbagliata". La scarsità mostra che i dati sono in forma estremamente non ottimale e un approccio molto più efficace è quello di provare a convertirli. La carta che hai collegato è un altro problema.

Temo di non capire cosa stai dicendo. La conversione della forma dei dati è esattamente ciò che voglio fare e, per quanto ne so, è esattamente ciò che fa questo documento. Non volevano elencare tutte le caratteristiche che mancavano ad ogni sostanza chimica, solo quelle che aveva. Ciò ha avuto un senso nella loro situazione perché la maggior parte delle sostanze chimiche manca di molte caratteristiche, proprio come nel mio caso. Quindi hanno convertito le loro caratteristiche in una matrice sparsa e quindi il loro algoritmo di partizionamento ricorsivo su quella matrice sparsa direttamente. Sto cercando modi open source per fare la stessa cosa con i miei dati. Cosa mi sto perdendo? Grazie
David J. Harris,

@David, penso che il punto di mbq sia che una grande codifica 1-of-n (es. Identificativo del sito web / cliente ecc.) O un elenco di sostanze chimiche presenti) è spesso una pessima rappresentazione per l'apprendimento. Stai meglio cambiando a "funzionalità", ad esempio per un sito Web potrebbe essere la categorizzazione: negozio / notizie / blog sport / tecnologia ecc.
seanv507

1

Hai guardato il caretpacchetto in R? Fornisce un'interfaccia che semplifica l'uso di una varietà di modelli, inclusi alcuni per il partizionamento ricorsivo come rpart, ctreee ctree2.


Ho familiarità con quei pacchetti / funzioni, e nessuno di loro lavora su dati sparsi per quanto ne so.
David J. Harris,

1
il supporto del cursore per gli Matrixoggetti sarebbe meraviglioso, ma al momento non esiste. Tutto viene costretto a un data.frame.
Zach,

Potresti provare a inviare un'email allo sviluppatore e chiederglielo. Gli ho mandato un'e
paul
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.