L'aumento del numero di funzioni comporta una riduzione della precisione ma un aumento del prec / richiamo


15

Sono nuovo di Machine Learning. Al momento sto usando un classificatore Naive Bayes (NB) per classificare piccoli testi in 3 classi come positivi, negativi o neutri, usando NLTK e python.

Dopo aver condotto alcuni test, con un set di dati composto da 300.000 istanze (16.924 positivi 7.477 negativi e 275.599 neutri) ho scoperto che quando aumento il numero di funzioni, l'accuratezza diminuisce ma la precisione / richiamo per le classi positive e negative aumenta. è un comportamento normale per un classificatore NB? Possiamo dire che sarebbe meglio usare più funzionalità?

Alcuni dati:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Grazie in anticipo...

Modifica 26/11/2011

Ho testato 3 diverse strategie di selezione delle funzionalità (MAXFREQ, FREQENT, MAXINFOGAIN) con il classificatore Naive Bayes. I primi qui sono la precisione e le misure F1 per classe:

inserisci qui la descrizione dell'immagine

Quindi ho tracciato l'errore del treno e l'errore di test con un set di addestramento incrementale, quando utilizzo MAXINFOGAIN con le prime 100 e le prime 1000 funzionalità:

inserisci qui la descrizione dell'immagine

Quindi, mi sembra che sebbene la massima precisione sia stata raggiunta con FREQENT, il miglior classificatore è quello che utilizza MAXINFOGAIN, giusto ? Quando si utilizzano le prime 100 funzioni, abbiamo una distorsione (l'errore del test è vicino all'errore del treno) e l'aggiunta di ulteriori esempi di allenamento non sarà di aiuto. Per migliorare ciò avremo bisogno di più funzionalità. Con 1000 funzioni, la distorsione si riduce ma l'errore aumenta ... Va bene? Devo aggiungere altre funzionalità? Non so davvero come interpretare questo ...

Grazie ancora...


1
Dipende da cosa intendi con "miglior classificatore", se il tuo compito è costruire un classificatore con una buona precisione complessiva, sceglierei FREQENT. D'altra parte, se, come nella maggior parte dei compiti di classificazione delle classi rare, vuoi classificare meglio la classe rara (che potrebbe essere la classe "negativa" o "positiva") sceglierei MAXINFOGAIN. Penso che la tua interpretazione delle curve di apprendimento sia corretta: con 100 caratteristiche hai dei pregiudizi e puoi aggiungerli, con 1000 hai varianze e puoi rimuoverle. Forse puoi provare un compromesso tra 100 e 1000 funzionalità per ottenere risultati migliori.
Simone,

Grazie per il tuo aiuto, Simone! Ho capito tutto tranne l'ultima parte ... Potresti dirmi come vedi l'alta varianza con le funzionalità 1000? Poiché la differenza tra il test e gli errori del treno non sembra essere così tanto, mi sembra ancora una distorsione ...
kanzen_master,

Ho inserito alcuni esempi nella mia risposta. Quando le curve non sono così vicine, il problema viene classificato come con varianza elevata . Nel tuo caso, forse te l'ho detto che perché con meno funzioni ottieni prestazioni migliori, e quindi con 1000 caratteristiche è probabile che sia un problema di alta varianza. Anziché tracciare i risultati degli algoritmi di selezione delle funzionalità con le misure calcolate sul set di allenamento, prova a dividere i dati in allenamento (2/3 di essi) e validazione, quindi esegui la selezione delle funzioni sul set di addestramento e valutali sul set di test . Dovresti trovare un massimo nel mezzo della trama.
Simone,

Grazie per la risposta Il terzo esempio del tuo post aggiornato (buon risultato, treno, curve di errore del test non sono né troppo vicine né troppo lontane) sembra la curva di apprendimento che ho tracciato usando 1000 funzioni, quindi ho pensato che usare circa 1000 funzioni sarebbe un "buon risultato". Tuttavia, in questo caso l'errore è maggiore, il che non va bene. Ma, guardando solo la distanza tra le curve, non riesco a vedere una varianza elevata con 1000 funzioni ... (A proposito, sto già suddividendo i dati in 2/3 come set di allenamento, 1/3 come set di test, funzione di esecuzione selezione sul set di allenamento e valutazione sul set di test ...)
kanzen_master

1
OK. Sono abbastanza nuovo nell'apprendere le curve e i tuoi esempi sono stati davvero interessanti e mi hanno fatto approfondire. Quindi, grazie D T. Sì, in entrambi i casi potrebbe esserci un pregiudizio. Secondo me, hai un set di dati molto distorto e piuttosto che testare la precisione è importante dare un'occhiata alla misura F. Dando un'occhiata alle tue trame, sembra che più funzioni hai, migliore è; infatti, la misura F migliora. Ho sentito che nella classificazione del testo, se le caratteristiche sono la frequenza delle parole nel testo, è comune utilizzare molte funzioni; tra l'altro non ci sono abituato e non posso dirti di più.
Simone,

Risposte:


18

Precisione vs misura F.

Prima di tutto, quando usi una metrica dovresti sapere come giocarla. La precisione misura il rapporto tra istanze correttamente classificate in tutte le classi. Ciò significa che se una classe si verifica più spesso di un'altra, l'accuratezza risultante è chiaramente dominata dall'accuratezza della classe dominante. Nel tuo caso, se si costruisce un modello M che prevede semplicemente "neutro" per ogni istanza, l'accuratezza risultante sarà

un'cc=neutrun'l(neutrun'l+poSiotiove+negun'tiove)=0,9188

Bene, ma inutile.

Quindi l'aggiunta di funzionalità ha chiaramente migliorato la potenza di NB nel differenziare le classi, ma predicendo "positivo" e "negativo" si classificano erroneamente i neutri e quindi la precisione diminuisce (approssimativamente). Questo comportamento è indipendente da NB.

Più o meno funzionalità?

In generale non è meglio usare più funzioni, ma usare le giuste funzionalità. Più funzioni è meglio nella misura in cui un algoritmo di selezione delle caratteristiche ha più scelte per trovare il sottoinsieme ottimale (suggerisco di esplorare: selezione delle caratteristiche di crossvalidated ). Quando si tratta di NB, un approccio rapido e solido (ma meno che ottimale) è quello di utilizzare InformationGain (Ratio) per ordinare le caratteristiche in ordine decrescente e selezionare il k superiore.

Ancora una volta, questo consiglio (tranne InformationGain) è indipendente dall'algoritmo di classificazione.

MODIFICA 27.11.11

C'è stata molta confusione riguardo alla distorsione e alla varianza nel selezionare il numero corretto di funzioni. Consiglio quindi di leggere le prime pagine di questo tutorial: compromesso di bias-varianza . L'essenza chiave è:

  • High Bias significa che il modello è meno che ottimale, ovvero che l'errore di test è elevato (insufficiente, come dice Simone)
  • Alta varianza significa che il modello è molto sensibile al campione usato per costruire il modello . Ciò significa che l'errore dipende in larga misura dal set di allenamento utilizzato e quindi la varianza dell'errore (valutata su diverse pieghe di crossvalidation) sarà estremamente diversa. (overfitting)

Le curve di apprendimento tracciate indicano effettivamente il Bias, poiché l'errore è tracciato. Tuttavia, ciò che non è possibile visualizzare è la varianza, poiché l'intervallo di confidenza dell'errore non viene tracciato affatto.

Esempio: eseguendo una Crossvalidation 3 volte 6 volte (sì, si consiglia la ripetizione con partizionamento dati diverso, Kohavi suggerisce 6 ripetizioni), si ottengono 18 valori. Ora mi aspetto che ...

  • Con un numero limitato di funzioni, l'errore medio (bias) sarà inferiore, tuttavia, la varianza dell'errore (dei 18 valori) sarà maggiore.
  • con un numero elevato di funzioni, l'errore medio (bias) sarà maggiore, ma la varianza dell'errore (dei 18 valori) sarà inferiore.

Questo comportamento dell'errore / bias è esattamente quello che vediamo nei tuoi grafici. Non possiamo fare una dichiarazione sulla varianza. Il fatto che le curve siano vicine tra loro può essere un'indicazione che il set di test è abbastanza grande da mostrare le stesse caratteristiche del set di allenamento e quindi che l'errore misurato può essere affidabile, ma questo è (almeno per quanto ho capito esso) non è sufficiente per fare una dichiarazione sulla varianza (dell'errore!).

Quando si aggiungono sempre più esempi di addestramento (mantenendo fisse le dimensioni del set di test), mi aspetto che la varianza di entrambi gli approcci (piccolo e elevato numero di funzioni) diminuisca.

Oh, e non dimenticare di calcolare l'infogain per la selezione delle funzioni usando solo i dati nel campione di addestramento! Si è tentati di utilizzare i dati completi per la selezione delle funzionalità e quindi eseguire il partizionamento dei dati e applicare la convalida incrociata, ma ciò comporterà un overfitting. Non so cosa hai fatto, questo è solo un avvertimento che non dovresti mai dimenticare.


1
Grazie mille per la risposta, spiegazione molto chiara. Sto usando il massimo guadagno di informazioni come strategia di selezione delle mie funzioni e test usando la validazione incrociata 5 volte. Immagino che per sapere quali funzioni k principali dovrei prendere ho bisogno di testare iterativamente l'algoritmo aumentando il numero di funzioni ogni volta e prendendo k che dà il punteggio f_score più alto. Tuttavia, immagino che "top k" probabilmente cambierà in base al set di dati ... giusto?
kanzen_master,

1
Corretta. Ma se il nuovo set di dati è simile al vecchio (stesse funzionalità con le stesse distribuzioni) k rimane lo stesso. Puoi aggiungere un algoritmo genetico per cercare più rapidamente lo spazio di possibili soluzioni o (ancora meglio) utilizzare un algoritmo genetico per trovare il sottoinsieme di funzionalità ottimali indipendentemente da InformationGain ... così tanti modi per andare.
Steffen,

1
Secondo le lezioni di Stanford, se vedi allenamenti ben separati e curve di test che variano il numero di esempi di allenamento, in realtà significa che c'è una varianza. Naturalmente un approccio migliore sarebbe stimare gli intervalli di confidenza.
Simone,

1
@DT 1. Non conosco la lezione, quindi non posso collegare la spiegazione di Andrewg alla mia, scusa. 2. No. Numero limitato di funzioni => overfitting => bassa propensione, alta varianza. Elevato numero di funzioni => underfitting => bias elevato, bassa varianza. Consiglio davvero di tracciare la varianza dell'errore delle pieghe del cv per un diverso numero di funzioni ed esempi di addestramento.
Steffen,

2
1. steffen, la lezione è disponibile qui: ml-class.org/course/video/preview_list (Parte X, Sezione "Curve di apprendimento") 2. Vedo. Stavo pensando che quando molte funzioni apprese durante l'allenamento => il modello diventa complesso e si adatta al set di addestramento => Varianza ...
kanzen_master

5

Per sapere se è utile utilizzare più funzioni, vorrei tracciare le curve di apprendimento. Penso che questo sia chiaramente spiegato nella decima unità del corso di Machine Learning di Stanford, chiamato "Consiglia per l'applicazione dell'apprendimento automatico", che puoi trovare qui: http://www.ml-class.org/course/video/preview_list .

Tracciando le curve di apprendimento puoi capire se il tuo problema è il bias elevato o l'alta varianza. Fintanto che aumenti il ​​numero di esempi di allenamento, dovresti tracciare l' errore di allenamento e l' errore di test (es. Precisione 1), quest'ultimo è l'errore del tuo classificatore stimato su un set di dati diverso. Se queste curve sono vicine l'una all'altra, si ha un problema di polarizzazione elevato e probabilmente sarebbe utile inserire più funzioni. D'altra parte, se le curve sono abbastanza separate se si aumenta il numero di esempi di allenamento, si ha un problema di varianza elevata. In questo caso, è necessario ridurre il numero di funzioni in uso.

modificare

Ho intenzione di aggiungere alcuni esempi di curve di apprendimento. Queste sono curve di apprendimento ottenute con una regressione logistica regolarizzata. Trame diverse sono correlate a diverseλ

λ una varianza elevata .

Alta varianza

λ un bias elevato .

Distorsione elevata

λ=1

Buon risultato


Grande! Grazie mille! Poiché entrambe le risposte sono state davvero utili, ma non posso contrassegnarle entrambe come risposte, contrassegnerò la prima come risposta. Ma questo è sicuramente il modo migliore per verificare, penso.
kanzen_master,

A proposito, sto cercando di tracciare la curva di apprendimento di un classificatore che utilizza le prime 100 funzionalità con il punteggio di Guadagno massimo di informazioni. Aumentando le dimensioni del set di dati di allenamento, voglio tracciare l'errore di allenamento e l'errore di test. Quali dovrebbero essere le dimensioni del set di dati del treno iniziale (da aumentare gradualmente) e del set di dati del test (statico per tutti i test)? Grazie ancora ...
kanzen_master il

2
Dividi il tuo set di dati in un set di allenamento e un set di test. Inizia da pochissimi record di allenamento e poi continua ad aggiungere record. Per ogni iterazione, calcolare l'errore del set di addestramento con i record utilizzati per addestrare il classificatore, quindi calcolare l'errore del set di test sempre con tutti i record di test. So che questo è un metodo standard utilizzato nella pratica comune. Sarebbe interessante vedere i tuoi risultati! Saluti, Simone.
Simone,

1
Simone, ho aggiornato il primo post con alcuni risultati di accuratezza, misure f1 e curve di apprendimento, e la mia interpretazione in fondo, potresti per favore controllarlo? Grazie ...
kanzen_master il
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.