2015-03-19 25 views
8

Sto provando a usare scikit learn in python per fare un paio di problemi di classificatore (RF, GBM, ecc.). Oltre a costruire modelli e fare previsioni, mi piacerebbe vedere l'importanza variabile. So che c'è un modo per ottenere le importanzePython - Scikit trova variabile importanza per le variabili categoriali

importances = clf.feature_importances_ 
print(importances) 

ma come faccio ad avere qualcosa di più raffinato che ha l'importanza collegato al nome della variabile (cioè summary(gbm) in R o varImp(randomForest) in R), soprattutto se si tratta di una variabile categoriale con più livelli?

+0

[Questo esempio illustra l'importanza della funzione] (http://scikit-learn.org/0.13/auto_examples/ensemble/plot_forest_importances.html#example-ensemble-plot-forest-importances-py). Potresti rendere più chiaro ciò che vuoi ("più raffinato") - forse cosa non viene mostrato in questo esempio? – AGS

risposta

3

L'importanza variabile (o l'importanza della funzione) viene calcolata per tutte le funzioni a cui si sta adattando il modello. Questo codice pseudo vi dà un'idea di nomi come variabili e importanza può essere correlato:

import pandas as pd 

train = pd.read_csv("train.csv") 
cols = ['hour', 'season', 'holiday', 'workingday', 'weather', 'temp', 'windspeed'] 
clf = YourClassifiers() 
clf.fit(train[cols], train.targets) # targets/labels 

print len(clf.feature_importances_) 
print len(cols) 

Vedrete che le lunghezze delle due liste in fase di stampa sono gli stessi - si può essenzialmente mappare le liste insieme o manipolarli come desideri. Se desideri mostrare variabile importanza bene in una trama, è possibile utilizzare questo:

import numpy as np 
import matplotlib.pyplot as plt 

plt.figure(figsize=(6 * 1.618, 6)) 
index = np.arange(len(cols)) 
bar_width = 0.35 
plt.bar(index, clf.feature_importances_, color='black', alpha=0.5) 
plt.xlabel('features') 
plt.ylabel('importance') 
plt.title('Feature importance') 
plt.xticks(index + bar_width, cols) 
plt.tight_layout() 
plt.show() 

Se non si desidera utilizzare questo metodo (il che significa che si intende installare tutte le colonne, non appena selezionato pochi come impostato nella variabile cols), quindi è possibile ottenere i nomi colonna/funzione/variabile dei dati con train.columns.values (quindi mappare questo elenco insieme all'elenco di importanza variabile o modificarlo in altro modo).