2014-09-29 12 views
9

Capisco che random_state sia utilizzato in vari algoritmi di sklearn per rompere il legame tra diversi predittori (alberi) con lo stesso valore metrico (ad esempio, per esempio in GradientBoosting). Ma la documentazione non chiarisce o dettagli su questo. Mi piaceScelta di random_state per gli algoritmi di sklearn

1) dove altro sono usati questi semi per la generazione di numeri casuali? Per esempio, per RandomForestClassifier, il numero casuale può essere usato per trovare un insieme di caratteristiche casuali per costruire un predittore. Gli algoritmi che usano il sottocampionamento, possono usare numeri casuali per ottenere diversi sottocampioni. Può/Lo stesso seme (random_state) ha un ruolo in più generazioni di numeri casuali?

Quello che mi preoccupa principalmente è

2) quanto di vasta portata è l'effetto di questa variabile random_state. ? Il valore può fare una grande differenza nella previsione (classificazione o regressione). In caso affermativo, che tipo di serie di dati dovrei avere di più? O è più sulla stabilità che sulla qualità dei risultati?

3) Se può fare una grande differenza, il modo migliore per scegliere lo stato random_? È difficile da fare su GridSearch, senza un'intuizione. Specialmente se il set di dati è tale che un CV può richiedere un'ora.

4) Se il motivo è quello di avere solo costante risultato/valutazione dei miei modelli e punteggi di validazione trasversali attraverso percorsi ripetuti, ce l'ha lo stesso effetto se ho impostato random.seed(X) prima di usare qualsiasi degli algoritmi (e utilizzare random_state come Nessuna).

5) Dire che sto usando un valore random_state su un classificatore GradientBoosted, e sono cross convalidato per trovare la bontà del mio modello (punteggio sul set di convalida ogni volta). Una volta soddisfatto, formerò il mio modello sull'intero set di allenamento prima di applicarlo sul set di test. Ora, il set completo di allenamento ha più istanze rispetto ai set di allenamento più piccoli nella convalida incrociata. Pertanto, il valore random_state può ora comportare un comportamento completamente diverso (scelta di caratteristiche e singoli predittori) rispetto a ciò che stava accadendo all'interno del ciclo cv. Allo stesso modo, cose come min samples leaf etc possono anche risultare in un modello inferiore ora che le impostazioni sono w.r.t il numero di istanze in CV mentre il numero effettivo di istanze è più. È una comprensione corretta? Qual è l'approccio da salvaguardare contro questo?

risposta

3

Sì, la scelta dei semi casuali avrà un impatto sui risultati della previsione e, come indicato nella quarta domanda, l'impatto non è realmente prevedibile.

Il modo comune di difendersi da previsioni che sono buone o cattive solo per caso è di addestrare diversi modelli (basati su diversi stati casuali) e di fare una media delle loro previsioni in modo significativo. Allo stesso modo, è possibile vedere la convalida incrociata come un modo per stimare le prestazioni "vere" di un modello calcolando la media delle prestazioni su più suddivisioni di dati di allenamento/test.

+0

Grazie per la risposta Tobias. Ascoltiamo altre persone/esperti e poi risponderò. – Run2

0

1) dove altro sono utilizzati questi semi per la generazione di numeri casuali? Dire per RandomForestClassifier, il numero casuale può essere usato per trovare un insieme di caratteristiche casuali per costruire un predittore. Gli algoritmi che usano il sottocampionamento, possono usare numeri casuali per ottenere diversi sottocampioni. Can/È lo stesso seme (random_state) che ha un ruolo in più generazioni di numeri casuali?

random_stateis used wherever randomness is needed:

Se il codice si basa su un generatore di numeri casuali, non dovrebbe mai utilizzare le funzioni come numpy.random.random o numpy.random.normal. Questo approccio può portare a problemi di ripetibilità nei test unitari. Invece, dovrebbe essere utilizzato un oggetto numpy.random.RandomState, che è generato da un argomento random_state passato alla classe o alla funzione.

2) come vasta portata è l'effetto di questa variabile random_state. ? Il valore può fare una grande differenza nella previsione (classificazione o regressione). In caso affermativo, che tipo di serie di dati dovrei avere di più? O è più sulla stabilità che sulla qualità dei risultati?

I buoni problemi non devono dipendere troppo dal random_state.

3) Se può fare una grande differenza, il modo migliore per scegliere lo stato random_? È difficile da fare su GridSearch, senza un'intuizione. Specialmente se il set di dati è tale che un CV può richiedere un'ora.

Non scegliere. Cerca invece di ottimizzare gli altri aspetti della classificazione per ottenere buoni risultati, indipendentemente dallo random_state.

4) Se il motivo è quello di avere solo costante risultato/valutazione dei miei modelli e punteggi di validazione trasversali attraverso percorsi ripetuti, ce l'ha lo stesso effetto se ho impostato random.seed (X) prima di usare qualsiasi gli algoritmi (e usa random_state come None).

A partire da Should I use `random.seed` or `numpy.random.seed` to control random number generation in `scikit-learn`?, random.seed(X) non viene utilizzato da sklearn. Se è necessario controllare questo, è possibile impostare np.random.seed() invece.

5) Dire che sto usando un valore random_state su un GradientBoosted classificatore, e sto croce Convalida per trovare la bontà del mio modello (scoring sulla convalida set ogni volta). Una volta soddisfatto, formerò il mio modello sull'intero set di allenamento prima di applicarlo sul set di test. Ora, il set completo di allenamento ha più istanze rispetto ai set di allenamento più piccoli nella convalida incrociata. Quindi il valore random_state può ora comportare un comportamento completamente diverso (scelta di caratteristiche e singoli predittori) rispetto a ciò che stava accadendo all'interno del ciclo cv. Allo stesso modo, cose come min samples leaf etc possono anche risultare in un modello inferiore ora che le impostazioni sono w.r.t il numero di istanze in CV mentre il numero effettivo di istanze è più. È una comprensione corretta? Qual è l'approccio da salvaguardare contro questo?

How can I know training data is enough for machine learning Le risposte per lo più indicano che più dati sono i migliori.

Se si esegue molto la selezione del modello, può essere utile anche il Sacred. Tra le altre cose, è sets e può log il seme casuale per ogni valutazione, es.:

>>./experiment.py with seed=123 
Problemi correlati