2015-03-19 16 views
8

Próbuję użyć scikit uczyć się w Pythonie, aby zrobić kilka różnych problemów klasyfikatora (RF, GBM, itp.). Oprócz budowania modeli i prognozowania, chciałbym zobaczyć różne znaczenie. Wiem, że istnieje sposób, aby uzyskać importancesPython - Scikit znaleźć zmienne znaczenie zmiennych jakościowych

importances = clf.feature_importances_ 
print(importances) 

ale jak mogę dostać coś bardziej wyrafinowane, że ma znaczenie połączonego z nazwą zmiennej (tj summary(gbm) w R lub varImp(randomForest) w R), zwłaszcza jeśli jest to zmienna kategoryczny z wieloma poziomami?

+0

[Ten przykład przedstawia znaczenie funkcji] (http://scikit-learn.org/0.13/auto_examples/ensemble/plot_forest_importances.html#example-ensemble-plot-forest-importances-py). Czy możesz wyjaśnić, co chcesz ("bardziej wyrafinowane") - może to, co nie jest pokazane w tym przykładzie? – AGS

Odpowiedz

3

Zmienne znaczenie (lub ważność funkcji) jest obliczane dla wszystkich funkcji, do których model jest dopasowany. Ten kod pseudo daje wyobrażenie o tym, jak nazwy zmiennych i wagi mogą być związane z:

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) 

Zobaczysz, że długości dwóch list drukowane są takie same - można zasadniczo map list razem lub manipuluj nimi, jak chcesz. Jeśli chcesz pokazać zmienną wagę ładnie w działce, można użyć to:

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() 

Jeśli nie chcesz korzystać z tej metody (co oznacza, że ​​wszystkie kolumny są sylwetkę, a nie tylko kilka wybranych jako ustawiona w zmiennej cols), następnie można uzyskać nazwy kolumn/funkcji/zmiennych danych za pomocą train.columns.values (a następnie zmapować tę listę razem z listą o zmiennej ważności lub manipulować w inny sposób).

Powiązane problemy