Classificazione con dati ad alto contenuto di grassi


15

Devo addestrare un classificatore lineare sul mio laptop con centinaia di migliaia di punti dati e circa diecimila funzionalità. Quali sono le mie opzioni? Qual è lo stato dell'arte per questo tipo di problema?

Sembra che la discesa stocastica a gradiente sia una direzione promettente, e il mio senso è che questo è lo stato dell'arte:

"Pegasos: Primal stimato sub-GrAdient SOlver per SVM" Shai Shalev-Shwartz, Yoram Singer, Nathan Srebro, Andrew Cotter. "Programmazione matematica, Serie B, 127 (1): 3-30, anno: 2007."

È questo il consenso? Dovrei guardare in un'altra direzione?


1
hai considerato di utilizzare alcuni metodi di riduzione della dimensione? migliaia di funzionalità richiedono una riduzione dimensionale vedi: en.wikipedia.org/wiki/Dimension_reduction
Dov

Questa domanda potrebbe essere migliorata con lo sforzo di ricerca. Hai qualche tecnica in mente?
Tamzin Blake,

@Thom Blake: ho modificato un po 'la domanda, con i miei pensieri.
carlosdc,

Senza saperne di più sui dati, qualsiasi risposta sarebbe disinformata. È scarso? continuo? discreto? caratteristiche / oggetti ridondanti? quante lezioni? Ad esempio, il PCA sui dati sparsi a volte può essere dannoso.
cyborg

2
alto = molti punti? grasso = molte caratteristiche? questa terminologia standard viene usata da qualche parte, usata negli arbitri da qualche parte?

Risposte:


6

Penso che dovresti esaminare i metodi di apprendimento online . Il perceptron e il perceptron del kernel sono estremamente facili da programmare e funzionano molto bene nella pratica, e ci sono molti altri metodi online. Si noti che qualsiasi metodo di apprendimento online può essere convertito in un algoritmo di apprendimento batch, nel qual caso assomigliano molto ai metodi di discesa gradiente stocastica.

Se stai usando Matlab c'è un toolbox davvero carino chiamato DOGMA di Francesco Orabona, che contiene una serie di algoritmi di apprendimento online e puoi valutarne alcuni diversi metodi. L'ho usato in alcune delle mie ricerche e l'ho trovato molto utile (nota che per quanto mi ricordo si aspetta i dati come [caratteristiche x esempi], quindi potresti doverli trasporre).

Come altri hanno già detto, potresti voler provare la riduzione della dimensionalità. La PCA potrebbe non essere una buona opzione qui, poiché devi calcolare la matrice di covarianza che sarà molto costosa. Potresti provare a guardare Proiezioni casuali . La teoria è dura, ma il principio è molto semplice. Si basa sul Lemma Johnson-Lindenstrauss se sei interessato, ma l'idea di base è che se proietti in modo casuale su uno spazio dimensionale inferiore, allora distanze tra i punti vengono conservate fino ad alcuni ϵ . Se stai usando un kernel RBF, allora 2 distanze sono tutto ciò che ti interessa!2ϵ2


7

Innanzitutto, vorrei chiederti come fai a sapere che il classificatore lineare è la scelta migliore? Intuitivamente per uno spazio così ampio (R ^ 10000) è possibile che qualche altro classificatore non lineare sia una scelta migliore.

Ti suggerisco di provare diversi classificatori diversi e osservare gli errori di previsione (proverei diversi modelli di classificazione regolarizzati).

Se si esaurisce la memoria, ridurre la dimensione utilizzando PCA


2
Grazie. Stavo pensando di più su come gestire la portata del problema. Volevo iniziare facendo linearmente, perché è più semplice. Penso che tu suggerisca un metodo basato sul kernel. Vorrei solo sottolineare che se ho 750000 punti dati la matrice del kernel avrà dimensioni 540 GB. Quindi la risposta non può essere: collegalo a LIBSVM / SVMLight / etc ottieni una buona C e gamma e vedi cosa ottieni.
carlosdc,

2
(-1) la risposta è a) in parte così generica, potrebbe essere applicata a qualsiasi domanda di classificazione b) non è spiegato perché si raccomanda l'APC (rispetto a qualsiasi altra tecnica di riduzione dimensionale).
Steffen,


1

Come ha suggerito jb, penso che sia meglio usare un metodo di "riduzione dimensionale". Principle Component Analysis (PCA) è una scelta popolare. Inoltre puoi provare anche tecniche di apprendimento delle funzionalità senza supervisione. Per ulteriori informazioni sull'apprendimento delle funzionalità senza supervisione, consultare http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial


1
PCA non PAC;) ( 15 caratteri )
neurone
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.