Quale classificatore di apprendimento automatico scegliere, in generale? [chiuso]


207

Supponiamo che sto lavorando su un problema di classificazione. (Il rilevamento delle frodi e lo spam nei commenti sono due problemi a cui sto lavorando in questo momento, ma sono curioso di qualsiasi compito di classificazione in generale.)

Come faccio a sapere quale classificatore dovrei usare?

  1. Albero decisionale
  2. SVM
  3. bayesiano
  4. Rete neurale
  5. K-vicini più vicini
  6. Q-learning
  7. Algoritmo genetico
  8. Processi decisionali di Markov
  9. Reti neurali convoluzionali
  10. Regressione lineare o regressione logistica
  11. Potenziare, insaccare, confondere
  12. Arrampicata casuale o ricottura simulata
  13. ...

In quali casi una di queste è la prima scelta "naturale", e quali sono i principi per sceglierla?

Esempi del tipo di risposte che sto cercando (dall'Introduzione al libro di reperimento delle informazioni di Manning et al. ):

un. Se i tuoi dati sono etichettati, ma hai solo un importo limitato, dovresti utilizzare un classificatore con distorsione elevata (ad esempio, Naive Bayes) .

Immagino che ciò sia dovuto al fatto che un classificatore con distorsione maggiore avrà una varianza inferiore, il che è positivo a causa della piccola quantità di dati.

b. Se hai un sacco di dati, il classificatore non ha molta importanza, quindi probabilmente dovresti semplicemente scegliere un classificatore con una buona scalabilità.

  1. Quali sono le altre linee guida? Anche risposte come "se dovresti spiegare il tuo modello a un dirigente, allora forse dovresti usare un albero decisionale, poiché le regole decisionali sono abbastanza trasparenti" sono buone. Mi preoccupo meno dei problemi di implementazione / libreria, però.

  2. Inoltre, per una domanda un po 'separata, oltre ai classificatori bayesiani standard, esistono metodi "standard all'avanguardia" per il rilevamento dello spam nei commenti (al contrario dello spam via e-mail)?


7
In risposta al tuo "miglior posto per porre questa domanda", potresti anche provare stats.stackexchange.com
jxramos

Risposte:


94

inserisci qui la descrizione dell'immagine

Prima di tutto, devi identificare il tuo problema. Dipende dal tipo di dati che hai e dall'attività desiderata.

Se sei Predicting Category:

  • Hai Labeled Data
    • Devi seguire Classification Approache i suoi algoritmi
  • Non hai Labeled Data
    • Devi andare per Clustering Approach

Se sei Predicting Quantity:

  • Devi andare per Regression Approach

Altrimenti

  • Puoi andare per Dimensionality Reduction Approach

Esistono algoritmi diversi all'interno di ciascun approccio sopra menzionato. La scelta di un particolare algoritmo dipende dalla dimensione del set di dati.

Fonte: http://scikit-learn.org/stable/tutorial/machine_learning_map/


60

Selezione del modello mediante validazione incrociata può essere ciò di cui hai bisogno.

Convalida incrociata

Quello che fai è semplicemente dividere il tuo set di dati in k sottoinsiemi (pieghe) non sovrapposti, formare un modello usando le pieghe k-1 e prevederne le prestazioni usando la piega che hai lasciato fuori. Questo lo fai per ogni possibile combinazione di pieghe (prima lascia la prima piega, poi la seconda, ..., poi kth, e allenati con le pieghe rimanenti). Al termine, si stima la prestazione media di tutte le pieghe (forse anche la varianza / deviazione standard della prestazione).

Come scegliere il parametro k dipende dal tempo che hai. I valori usuali per k sono 3, 5, 10 o anche N, dove N è la dimensione dei tuoi dati (che è la stessa della validazione incrociata lasciata in sospeso ). Preferisco 5 o 10.

Selezione del modello

Supponiamo che tu abbia 5 metodi (ANN, SVM, KNN, ecc.) E 10 combinazioni di parametri per ciascun metodo (a seconda del metodo). Devi semplicemente eseguire la validazione incrociata per ogni combinazione di metodo e parametro (5 * 10 = 50) e selezionare il modello, il metodo e i parametri migliori. Quindi ti alleni nuovamente con il metodo e i parametri migliori su tutti i tuoi dati e hai il tuo modello finale.

Ci sono alcune altre cose da dire. Se, ad esempio, usi molti metodi e combinazioni di parametri per ognuno, è molto probabile che ti alleni. In casi come questi, è necessario utilizzare la convalida incrociata nidificata .

Convalida incrociata nidificata

Nella convalida incrociata nidificata , si esegue la convalida incrociata sull'algoritmo di selezione del modello.

Ancora una volta, hai prima diviso i tuoi dati in k pieghe. Dopo ogni passaggio, scegli k-1 come dati di allenamento e quello rimanente come dati di test. Quindi esegui la selezione del modello (la procedura che ho spiegato sopra) per ogni possibile combinazione di quelle k pieghe. Al termine, avrai k modelli, uno per ogni combinazione di pieghe. Successivamente, si testa ciascun modello con i dati di test rimanenti e si sceglie quello migliore. Ancora una volta, dopo avere l'ultimo modello, ne alleni uno nuovo con lo stesso metodo e parametri su tutti i dati che hai. Questo è il tuo modello finale.

Naturalmente, ci sono molte varianti di questi metodi e altre cose che non ho menzionato. Se hai bisogno di maggiori informazioni su questi cerca alcune pubblicazioni su questi argomenti.


5
Sì, conosco la convalida incrociata - mi chiedevo di più sulle ragioni a priori per selezionare un determinato classificatore (e quindi potevo usare la convalida incrociata per mettere a punto alcuni parametri o selezionare tra un set più piccolo di classificatori). Grazie comunque!
LM.

45

Il libro " OpenCV " ha ben due pagine su questo nelle pagine 462-463 . La ricerca nell'anteprima di Amazon della parola "discriminante" (probabilmente anche google books) ti permetterà di vedere le pagine in questione. Queste due pagine sono la gemma più grande che ho trovato in questo libro.

In breve:

  • Potenziamento : spesso efficace quando è disponibile una grande quantità di dati di allenamento .

  • Alberi casuali - spesso molto efficaci e possono anche eseguire la regressione .

  • K-vicini più vicini - cosa più semplice che puoi fare, spesso efficace ma lenta e richiede molta memoria .

  • Reti neurali : lente da addestrare ma molto veloci da eseguire , prestazioni ancora ottimali per il riconoscimento delle lettere .

  • SVM - Tra i migliori con dati limitati , ma perdendo contro il potenziamento o alberi casuali solo quando sono disponibili set di dati di grandi dimensioni .


39

Le cose che potresti prendere in considerazione nella scelta dell'algoritmo da utilizzare includono:

  1. Devi allenarti in modo incrementale (anziché in batch)?

    Se devi aggiornare frequentemente il tuo classificatore con nuovi dati (o hai tonnellate di dati), probabilmente vorrai usare Bayesian. Le reti neurali e SVM devono lavorare sui dati di allenamento in una volta sola.

  2. I tuoi dati sono composti da solo da categorici , solo numerici o entrambi ?

    Penso che Bayesian funzioni meglio con i dati categorici / binomiali. Gli alberi decisionali non possono prevedere valori numerici.

  3. Tu o il tuo pubblico dovete capire come funziona il classificatore?

    Usa gli alberi bayesiani o decisionali, poiché questi possono essere facilmente spiegati alla maggior parte delle persone. Le reti neurali e SVM sono "scatole nere", nel senso che non puoi davvero vedere come stanno classificando i dati.

  4. Quanto velocità di classificazione hai bisogno?

    Le SVM sono veloci quando si tratta di classificare poiché devono solo determinare da che parte della "linea" si trovano i tuoi dati. Gli alberi decisionali possono essere lenti soprattutto quando sono complessi (ad esempio molti rami).

  5. Complessità .

    Reti neurali e SVM possono gestire classifiche non lineari complesse.


2
Questo capitolo libro può fornire ulteriori informazioni sulla complessità nlp.stanford.edu/IR-book/html/htmledition/...
supermus

31

Come afferma spesso il prof Andrew Ng: inizia sempre implementando un algoritmo approssimativo e sporco, quindi perfezionalo iterativamente .

Per la classificazione, Naive Bayes è un buon inizio, in quanto ha buone prestazioni, è altamente scalabile e può adattarsi a quasi ogni tipo di compito di classificazione. Anche 1NN (K-vicini più vicini con solo 1 vicino) è un algoritmo di adattamento senza problemi (perché i dati saranno il modello e quindi non devi preoccuparti dell'adattamento dimensionale del tuo confine di decisione), l'unico il problema è il costo di calcolo (quadratico perché è necessario calcolare la matrice della distanza, quindi potrebbe non essere adatto per dati ad alta dimensione).

Un altro buon algoritmo di avviamento è il Random Forests (composto da alberi decisionali), altamente scalabile per qualsiasi numero di dimensioni e con prestazioni generalmente accettabili. Poi infine, ci sono algoritmi genetici , che si adattano egregiamente bene a qualsiasi dimensione e qualsiasi dato con una minima conoscenza dei dati stessi, con l'implementazione più minima e più semplice è l' algoritmo genetico microbico (solo una riga di codice C! Di Inman Harvey in 1996), e uno dei più complessi è CMA-ES e MOGA / e-MOEA.

E ricorda che, spesso, non puoi davvero sapere cosa funzionerà meglio sui tuoi dati prima di provare gli algoritmi per davvero.

Come nota a margine, se vuoi un framework teorico per testare le tue ipotesi e algoritmi sulle prestazioni teoriche per un dato problema, puoi usare il framework di apprendimento PAC (probabilmente approssimativamente corretto) (attenzione: è molto astratto e complesso!), Ma per Riassumendo, l'essenza dell'apprendimento PAC dice che dovresti usare l'algoritmo meno complesso, ma abbastanza complesso (la complessità è la massima dimensionalità che l'algo può adattarsi) che può adattarsi ai tuoi dati. In altre parole, usa il rasoio di Occam.


11

Sam Roweis diceva che prima di ogni altra cosa dovresti provare l'ingenua Bayes, la regressione logistica, il vicino più vicino k e il discriminante lineare di Fisher.


8

La mia opinione è che esegui sempre prima i classificatori di base per avere un'idea dei tuoi dati. Più spesso (almeno nella mia esperienza) sono stati abbastanza bravi.

Quindi, se hai dati supervisionati, addestra un classificatore Naive Bayes. Se disponi di dati non controllati, puoi provare il clustering k-means.

Un'altra risorsa è uno dei video delle lezioni della serie di video Stanford Machine Learning , che ho visto qualche tempo fa. Nel video 4 o 5, penso, il docente discute alcune convenzioni generalmente accettate durante l'addestramento di classificatori, vantaggi / compromessi, ecc.


1
Il teorema "No Free Lunch" afferma che non esiste un modello che funzioni meglio per ogni problema. Le ipotesi di un modello eccezionale per un problema potrebbero non valere per un altro problema, quindi è comune nell'apprendimento automatico provare più modelli e trovarne uno che funzioni meglio per un problema specifico.
msarafzadeh,

5

Si dovrebbe sempre tenere conto dell'inferenza rispetto alla previsione compromesso tra .

Se vuoi capire la complessa relazione che si sta verificando nei tuoi dati, dovresti scegliere un algoritmo di inferenza (ad esempio regressione lineare o lazo). D'altra parte, se sei interessato solo al risultato, puoi scegliere algoritmi di alta dimensione e più complessi (ma meno interpretabili), come le reti neurali.


3

La selezione dell'algoritmo dipende dallo scenario e dal tipo e dimensione del set di dati. Ci sono molti altri fattori.

Questo è un breve cheat sheet per l'apprendimento automatico di base.

Qui puoi convalidare il tuo scenario con un semplice cheat sheet


-2

Prima di tutto, dipende dal tipo di problema che stai affrontando sia che si tratti di classificazione o regressione. Quindi scegli il tuo modello con saggezza. Dipende da un modello particolare un modello specifico supera gli altri modelli. Supponiamo che tu stia lavorando su wine_dataset dalla libreria sklearn e prima hai provato ad addestrare i dati con kernel svm con linear e ottieni una sorta di accuratezza e poi pensi che non sia soddisfacente, quindi hai provato ad addestrare i tuoi dati con DecisionTreeClassifier () e poi hai provato con RandomForestClassifier (). Dopodiché, qualsiasi accuratezza sarà migliore o puoi dire che si adatta ai tuoi dati, puoi concludere che. C'è così piccola differenza sintattica che troverai mentre continui a cambiare modello per i test. Quindi tutto bene e capire bene il problema.


1
La domanda di OP (poster originali) era: come faccio a sapere quale classificatore dovrei usare? Il che conclude che stanno cercando un algoritmo di classificazione . Si prega di leggere veramente la domanda prima di rispondere.
Vetrivel PS
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.