2015-03-19 10 views
8

Ich versuche scikit lernen in Python zu verwenden, um ein paar verschiedene Klassifikator Probleme (RF, GBM, etc) zu tun. Neben dem Erstellen von Modellen und Vorhersagen möchte ich eine variable Bedeutung sehen. Ich weiß, dass es eine Möglichkeit ist, die WichtigkeitenPython - Scikit Variable Bedeutung für kategoriale Variablen finden

importances = clf.feature_importances_ 
print(importances) 

zu bekommen, aber wie bekomme ich etwas mehr verfeinert, dass die Bedeutung an den Variablennamen (dh summary(gbm) in R oder varImp(randomForest) in R) verbunden ist, besonders wenn es sich um eine kategorische Variable ist mit mehreren Ebenen?

+0

[In diesem Beispiel wird Feature-Wichtigkeit grafisch dargestellt] (http://scikit-learn.org/0.13/auto_examples/ensemble/plot_forest_importances.html#example-ensemble-plot-forest-importancen-py). Könnten Sie deutlicher machen, was Sie wollen ("raffinierter") - vielleicht, was in diesem Beispiel nicht gezeigt wird? – AGS

Antwort

3

Die variable Wichtigkeit (oder Feature-Wichtigkeit) wird für alle Features berechnet, denen Sie Ihr Modell anpassen. Dieser Pseudo-Code gibt Ihnen eine Vorstellung davon, wie Variablennamen und Bedeutung in Beziehung gesetzt werden können:

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) 

Sie werden sehen, dass die Längen der beiden Listen gedruckt werden die gleichen sind - Sie im Wesentlichen die Listen Karte können zusammen oder manipuliere sie wie du willst. Wenn Sie Variable Bedeutung in einem Grundstück schön zeigen möchten, können Sie diese verwenden:

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

Wenn Sie wollen, diese Methode nicht verwenden (was bedeutet, dass Sie alle Spalten sind passend, nicht nur wenige ausgewählt als in cols Variable gesetzt, dann könnten Sie die Spalte/Feature/Variablen Namen Ihrer Daten mit train.columns.values (und dann diese Liste zusammen mit Variable Wichtigkeitsliste zuordnen oder auf andere Weise manipulieren).

Verwandte Themen