Selezione delle funzionalità utilizzando le importazioni delle funzionalità in foreste casuali con scikit-learn


12

Ho tracciato l'importanza delle funzionalità in foreste casuali con scikit-learn . Al fine di migliorare la previsione utilizzando foreste casuali, come posso utilizzare le informazioni sulla trama per rimuovere le funzionalità? Vale a dire come individuare se una funzione è inutile o, se non peggio, diminuisce le prestazioni delle foreste casuali, in base alle informazioni sulla trama? La trama si basa sull'attributo feature_importances_e io uso il classificatore sklearn.ensemble.RandomForestClassifier.

Sono consapevole che esistono altre tecniche per la selezione delle funzionalità , ma in questa domanda voglio concentrarmi su come utilizzare le funzionalità feature_importances_.


Esempi di tali grafici di importanza delle funzioni:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Risposte:


14

È possibile semplicemente utilizzare l' feature_importances_attributo per selezionare le funzionalità con il punteggio di massima importanza. Ad esempio, è possibile utilizzare la seguente funzione per selezionare le migliori caratteristiche K in base all'importanza.

def selectKImportance(model, X, k=5):
     return X[:,model.feature_importances_.argsort()[::-1][:k]]

O se stai usando una pipeline la seguente classe

class ImportanceSelect(BaseEstimator, TransformerMixin):
    def __init__(self, model, n=1):
         self.model = model
         self.n = n
    def fit(self, *args, **kwargs):
         self.model.fit(*args, **kwargs)
         return self
    def transform(self, X):
         return X[:,self.model.feature_importances_.argsort()[::-1][:self.n]]

Quindi per esempio:

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> iris = load_iris()
>>> X = iris.data
>>> y = iris.target
>>> 
>>> model = RandomForestClassifier()
>>> model.fit(X,y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
>>> 
>>> newX = selectKImportance(model,X,2)
>>> newX.shape
(150, 2)
>>> X.shape
(150, 4)

E chiaramente se si desidera selezionare in base ad altri criteri oltre alle "funzionalità k principali", è possibile regolare le funzioni di conseguenza.


Grazie David. Qualche idea su come scegliere la soglia al di sopra delle quali funzionalità sono utili? (a parte rimuovere la funzionalità meno utile, eseguire nuovamente la RF e vedere come influisce sulle prestazioni di previsione)
Franck Dernoncourt

1
Come per la maggior parte delle funzioni automatizzate, direi che molte persone usano una griglia di ottimizzazione. Ma utilizzare l'esperienza del dominio quando si selezionano (e progettano) le funzionalità è probabilmente la più preziosa, ma non è davvero automatizzabile.
David,
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.