Domanda

Sto utilizzando OpenCV esempio letter_recog.cpp di sperimentare sugli alberi casuali e altri classificatori. Questo esempio ha implementazioni di sei classificatori - alberi casuali, aumentando, MLP, kNN, Naive Bayes e SVM. UCI set di dati di riconoscimento di lettere con 20000 casi e 16 funzioni è usato, che ho diviso a metà per la formazione e la sperimentazione. Ho esperienza con SVM così ho subito messo il suo errore di riconoscimento al 3,3%. Dopo alcuni esperimenti quello che ho ottenuto è stato:

UCI lettera di riconoscimento:

  • RTrees - 5,3%
  • Boost - 13%
  • MLP - 7,9%
  • kNN (k = 3) - 6,5%
  • Bayes - 11,5%
  • SVM - 3,3%

parametri utilizzati:

  • RTrees - max_num_of_trees_in_the_forrest = 200, max_depth = 20, min_sample_count = 1

  • Boost - boost_type = REAL, weak_count = 200, weight_trim_rate = 0,95, max_depth = 7

  • MLP - method = BACKPROP, param = 0,001, max_iter = 300 (valori di default - troppo rallentare per esperimento)

  • kNN (k = 3) - k = 3

  • Bayes - nessun

  • SVM - kernel RBF, C = 10, gamma = 0.01

Dopo che ho usato stessi parametri e testato su cifre e MNIST set di dati estraendo gradiente offre prima (formato vettoriale 200 elementi):

Digits:

  • RTrees - 5,1%
  • Boost - 23,4%
  • MLP - 4,3%
  • kNN (k = 3) - 7,3%
  • Bayes - 17,7%
  • SVM - 4,2%

MNIST:

  • RTrees - 1,4%
  • Boost - dalla memoria
  • MLP - 1,0%
  • kNN (k = 3) - 1,2%
  • Bayes - 34.33%
  • SVM - 0,6%

Sono nuovo a tutti i classificatori ad eccezione di SVM e kNN, per questi due posso dire che i risultati sembrano bene. Che dire di altri? Mi aspettavo di più da alberi casuali, sulla MNIST kNN dà una maggiore precisione, tutte le idee su come ottenere più in alto? Boost e Bayes dare molto bassa precisione. Alla fine mi piacerebbe utilizzare questi classificatori per fare un sistema di classificazione multipla. Qualche consiglio?

È stato utile?

Soluzione

Dimensionalità Riduzione

Un'altra procedura importante è quello di confrontare i tassi di errore in materia di formazione e di prova set di dati per vedere se si sta sovradattamento (a causa della "maledizione della dimensionalità"). Per esempio, se il tasso di errore sul set di dati di test è molto più grande l'errore sul set di dati di formazione, questo sarebbe un indicatore.
In questo caso, si potrebbe provare dimensionalità tecniche di riduzione, come PCA o LDA.

Se siete interessati, ho scritto su PCA, LDA e alcune altre tecniche qui: http://sebastianraschka.com/index .html # machine_learning e nel mio GitHub repo qui: https://github.com/rasbt/pattern_classification

Croce convalida

Inoltre si consiglia di dare un'occhiata a tecniche di cross-validazione al fine di valutare le prestazioni dei vostri classificatori in modo più obiettivo

Altri suggerimenti

mi aspettavo di più da alberi casuali :

  • Con foreste casuali, tipicamente per N dispone, sqrt (N) caratteristiche vengono utilizzati per la costruzione ogni albero di decisione. Dal momento che nel vostro caso N = 20, si potrebbe provare a impostare max_depth (il numero di sub-caratteristiche per costruire ogni albero decisionale) a 5.

  • Invece di alberi decisionali, i modelli lineari sono stati proposti e valutati come stimatori di base nelle foreste casuali, in particolare la regressione logistica multinomiale e Naive Bayes. Questo potrebbe migliorare la vostra precisione.

Il MNIST kNN dà una maggiore precisione, tutte le idee su come ottenere più in alto?

  • Prova con un valore più alto di K (diciamo 5 o 7). Un valore più alto di K darebbe la prova più favorevole circa l'etichetta di classe di un punto.
  • È possibile eseguire PCA o Lineare Analisi Discriminante di Fisher prima di eseguire k-nearest neighbor. Con questo si potrebbe sbarazzarsi di funzioni correlate, mentre calcolando le distanze tra i punti, e quindi i vostri vicini k sarebbe più robusto.
  • Prova valori K diversi per i diversi punti basato su varianza nelle distanze tra i vicini K.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top