2012-04-24 9 views
6

Ho bisogno di addestrare un modello di regressione su una vasta serie di esercizi , con la possibilità di incorporare funzionalità arbitrarie. Quali algoritmi di apprendimento dovrei prendere in considerazione e perché?Quali algoritmi di apprendimento dovrei prendere in considerazione per addestrare un modello di regressione log-lineare?

un breve riassunto del problema:

  • circa 5 milioni di esempi di addestramento
  • Aggiunta di esempi di addestramento ad un tasso del 2-4 milioni all'anno
  • esempi di formazione attualmente contengono 10 Caratteristiche ciascuno
  • Caratteristiche approssimatamente 400k popolate (di uno spazio molto più grande di funzionalità totale)
  • Funzioni aggiuntive aggiunte nel tempo
  • Riqualificazione o adattare il modello (almeno) al giorno per incorporare nuovi esempi
  • criteri di ottimizzazione: minimo quadrato errore percentuale
  • uscita: un unico numero a valori reali

ho una certa esperienza di formazione log- modelli lineari su problemi di classificazione di dimensioni simili (usando SVM, Perceptrons medi e votati, ecc.) La possibilità di aggiungere funzionalità arbitrarie è importante, ma in questo caso anche il tempo di addestramento è prezioso.

Ad esempio, il mio unico esperimento finora con SVMLight ha richiesto diverse settimane per convergere su un sottoinsieme di questi dati. Potremmo parallelizzare attraverso una macchina multicore o (eventualmente) un cluster, ma abbiamo bisogno di formare modelli in pochi minuti. La formazione online sarebbe ancora meglio.

Ho addestrato un modello Perceptron medio con successo (e rapidamente). Tuttavia, per quanto ne so, l'AP non viene normalmente applicato alla regressione. L'AP offre garanzie di convergenza per un modello di regressione? C'è un'altra ragione formale per cui non dovrebbe essere applicabile? O è una corrispondenza ragionevole per le mie esigenze?

Quali altre opzioni devo ricercare? Un SVM probabilmente offrirebbe un'accuratezza superiore, ma il tempo di addestramento quadratico non è accettabile. Se gli algoritmi SVM a tempo lineare sono accessibili, potrebbe funzionare bene.

potenziali vantaggi:

  • formazione online
  • implementazione open-source disponibili (idealmente in Java). Se necessario, possiamo implementare la nostra implementazione, ma se possibile eviterò ciò.

Grazie per il vostro input.

+0

Per la classificazione, ho avuto molto successo con SVM a discesa con gradiente stocastico (http://leon.bottou.org/projects/sgd#) - si potrebbe voler considerare l'adattamento per la regressione. – etarion

risposta

7

Questo è il classico problema con SVM su larga scala. Un modello SVM dovrebbe essere riqualificato se vengono aggiunte nuove funzionalità e se vengono aggiunti nuovi dati se non si utilizza un svm online. Alcune opzioni:

opzioni pratiche (off the shelf):

LIBLINEAR - Se si può fare lineare SVM ci sono alcuni algoritmi che sfruttano il kernel lineare per fornire meglio i tempi di formazione quadratica.Controlla LIBLINEAR che proviene dallo stesso gruppo di ricerca di libsvm. Hanno appena aggiunto la regressione nella versione 1.91 rilasciata ieri. http://www.csie.ntu.edu.tw/~cjlin/liblinear/

Oracle ODM - Oracle ha SVM disponibile nel proprio pacchetto ODM. Prendono un approccio pratico per fornire fondamentalmente SVM 'abbastanza buono' senza pagare il costo computazionale per trovare una soluzione veramente ottimale. Usano alcune tecniche di campionamento e di selezione del modello - è possibile trovare informazioni riguardo qui: http://www.oracle.com/technetwork/database/options/advanced-analytics/odm/overview/support-vector-machines-paper-1205-129825.pdf

SHOGUN - Lo SHOGUN Machine Learning Toolbox è stato progettato per l'apprendimento su larga scala, si interfacciano con una serie di implementazioni SVM così come altri metodi. Non ho mai usato, ma forse vale la pena dare un'occhiata: http://www.shogun-toolbox.org

Kernel-machines.org ha una lista di pacchetti software: la ricerca http://www.kernel-machines.org/software

Altro SVM

Se sei cercando di farcela da soli, ci sono un certo numero di tecniche per provare a scalare SVM fino a dataset di grandi dimensioni che sono stati pubblicati in documenti di ricerca, ma il codice non è necessariamente disponibile, utilizzabile o mantenuto come negli esempi precedenti. Reclamano buoni risultati, ma ognuno ha il suo insieme di inconvenienti. Molti coinvolgono facendo un certo livello di selezione dei dati. Ad esempio, diversi documenti di ricerca utilizzano algoritmi di clustering del tempo lineare per raggruppare i dati e formare modelli SVM successivi basati sui cluster, al fine di creare il modello senza utilizzare tutti i dati. Le macchine Core Vector rivendicano un tempo di allenamento lineare, ma ci sono alcune critiche sul fatto che la loro accuratezza sia così alta come affermano. Numerosi documenti utilizzano algoritmi euristici diversi per tentare di selezionare i candidati vettore di supporto più probabili. Molti di questi sono per la classificazione, ma potrebbero probabilmente essere adattati alla regressione. Se desideri maggiori informazioni su alcune di queste ricerche posso aggiungere alcuni riferimenti.

strumenti per esplorare gli algoritmi

si sono probabilmente già familiarità con questi, ma ho pensato di gettarlo nel qui solo nel caso in cui:

Ci sono altri algoritmi che hanno un buon runtime su set di dati di grandi dimensioni, ma se funzionano bene è difficile da dire, dipende dalla composizione dei dati. Dal momento che il tempo di esecuzione è importante, vorrei iniziare con i modelli più semplici e lavorare fino al più complesso. ANN, regressione dell'albero decisionale, metodi bayesiani, regressione lineare ponderata localmente o un approccio ibrido come alberi modello, che è un albero decisionale i cui nodi foglia sono modelli lineari, possono essere eseguiti più rapidamente di SVM su insiemi di dati di grandi dimensioni e possono produrre buoni risultati.

WEKA - Weka è un ottimo strumento per esplorare le opzioni. Vorrei usare WEKA per provare sottoinsiemi dei tuoi dati in diversi algoritmi. Il codice sorgente è aperto e in java se hai scelto qualcosa puoi adattarlo alle tue esigenze. http://www.cs.waikato.ac.nz/ml/weka/

R - Il linguaggio di programmazione R implementa anche molti algoritmi ed è simile alla programmazione in Matlab. http://www.r-project.org/

Non consiglierei di utilizzare WEKA o R non un set di dati su larga scala, ma sono strumenti utili per cercare di restringere quali algoritmi potrebbero funzionare bene per voi.

+0

Grazie per la modifica vitalik :) – karenu

+0

Grazie per la risposta dettagliata. Lo voterei più volte se potessi. ;-) Penso di aver guardato LibLinear qualche tempo fa quando ho lavorato su un problema correlato, ma l'ho passato a causa del tempo di allenamento. Non mi rendevo conto che ora supportava l'allenamento lineare. Sembra che potrebbe essere un'ottima opzione. – AaronD

+0

Mi spiace di non aver detto che era un tempo lineare, solo meglio del quadratico. Usa il kernel lineare. Fornisce una soluzione precisa per l'eps nelle iterazioni O (log (1/eps)) a un costo di iterazioni O (ln) dove l è il numero di punti di allenamento e n è il numero medio di elementi diversi da zero per istanza. Quindi più i tuoi dati sono radi, più ti avvicini al tempo lineare. – karenu

Problemi correlati