Solo per aggiungere a carlosdc 's buona risposta.
Alcune delle caratteristiche che regolano vowpal wabbit parte, e permettono di scalare a tera-feature (10) data-formati sono:
Il peso vettore linea: vowpal wabbit mantiene una memoria weight-vector che è essenzialmente il vettore di pesi per il modello che sta costruendo. Questo è ciò che chiami "lo stato" nella tua domanda.
dimensione dei dati illimitata: La dimensione del peso-vettore è proporzionale al numero di caratteristiche (variabili di ingresso indipendenti), non il numero di esempi (istanze). Questo è ciò che rende wabbit vowpal, a differenza di molti altri studenti (non in linea), scala nello spazio. Dal momento che non ha bisogno di caricare tutti i dati in memoria come fa un tipico studente batch, può ancora imparare da insiemi di dati troppo grandi per adattarsi alla memoria.
modalità Cluster: vowpal wabbit supporti esecuzione su più host in un cluster, imponendo una struttura grafico albero binario sui nodi e con la riduzione all-reduce
da foglie di radice.
Hash trucco: vowpal wabbit impiega ciò che è chiamato il hashing trick. Tutti i nomi delle funzioni vengono convertiti in hash in un numero intero utilizzando murmurhash-32
. Ciò presenta diversi vantaggi: è molto semplice ed efficiente in termini di tempo non dover gestire la gestione e le collisioni della tabella hash, consentendo al tempo stesso alle funzionalità di scontrarsi.Risulta (in pratica) che un piccolo numero di collisioni di caratteristiche in un set di allenamento con migliaia di caratteristiche distinte è simile all'aggiunta di un termine di regolarizzazione implicito. Questo in modo intuitivo, spesso migliora la precisione del modello piuttosto che diminuirlo. È anche agnostico alla sparsità (o densità) dello spazio delle feature. Infine, consente ai nomi delle funzioni di input di essere stringhe arbitrarie a differenza della maggior parte degli studenti convenzionali che richiedono che i nomi delle caratteristiche/ID siano sia a) numerici che b) unici.
parallelismo: vowpal wabbit sfrutta CPU multi-core eseguendo l'analisi e l'apprendimento in due thread separati, aggiungendo ulteriore alla sua velocità. Questo è ciò che rende vw
in grado di apprendere velocemente quanto legge i dati. Risulta che gli algoritmi più supportati in vw
, in modo intuitivo, sono strozzati dalla velocità IO, piuttosto che dalla velocità di apprendimento.
checkpoint e di apprendimento incrementale: vowpal wabbit consente di salvare il vostro modello su disco mentre si impara, e poi per caricare il modello e continuare ad imparare dove si era interrotto con l'opzione --save_resume
.
stima dell'errore Test-simile: La perdita media calcolata vowpal wabbit "come va" è sempre invisibile (fuori dal campione) dei dati (*). Ciò elimina la necessità di preoccuparsi di ritardi pre-pianificati o di convalida incrociata. Il tasso di errore che vedi durante l'allenamento è 'test-like'.
Beyond modelli lineari: vowpal Wabbit supporta diversi algoritmi, tra matrice fattorizzazione (approssimativamente sparse matrice SVD), allocazione di dirichlet latente (LDA), e altro ancora. Supporta anche la generazione al volo di interazioni a termine (bi-lineare, quadratica, cubica e feed-forward sigmoide neurale-rete con numero di unità specificato dall'utente), classificazione multi-classe (oltre alla regressione di base e binario classificazione), e altro ancora.
Ci sono tutorial e molti esempi in the official vw wiki su github.
(*) Un'eccezione è se si utilizzano più passaggi con l'opzione --passes N
.
Dipende da cosa si intende per * "[più alto] dimensione dati di input totali nel tempo" *. Se utilizzi funzionalità categoriali, se "più dati" implicano "più livelli nelle categorie" e, soprattutto, se attivi le interazioni di ordine superiore, ottieni collisioni hash che influiscono sull'accuratezza, quindi sì, alla fine dovrai aumentare "- b 'hash bitdepth, e quindi il tuo requisito di memoria per l'hash della funzione. Tuttavia il vettore di peso (che è tenuto in memoria) è ancora piccolo. – smci