2015-03-19 6 views
8

मैं कुछ अलग वर्गीकृत समस्याओं (आरएफ, जीबीएम, आदि) करने के लिए पाइथन में विज्ञान सीखने का प्रयास कर रहा हूं। मॉडल बनाने और भविष्यवाणियों के निर्माण के अलावा, मैं चर महत्वपूर्ण महत्व देखना चाहता हूं। मैं जानता हूँ कि वहाँ एक रास्ता importancesपायथन - शाकिट को वर्गीकृत चर के लिए परिवर्तनीय महत्व मिलता है

importances = clf.feature_importances_ 
print(importances) 

लेकिन पाने के लिए है कि कैसे मैं कुछ अधिक परिष्कृत महत्व चर नाम (यानी आर में summary(gbm) या आर में varImp(randomForest)) से जुड़े है कि मिलता है, खासकर अगर यह एक स्पष्ट चर है कई स्तरों के साथ?

+0

[इस उदाहरण भूखंडों सुविधा महत्व] (http://scikit-learn.org/0.13/auto_examples/ensemble/plot_forest_importances.html#example-ensemble-plot-forest-importances-py)। क्या आप इसे और अधिक स्पष्ट कर सकते हैं कि आप क्या चाहते हैं ("अधिक परिष्कृत") - शायद इस उदाहरण में क्या नहीं दिखाया गया है? – AGS

उत्तर

3

परिवर्तनीय महत्व (या विशेषता महत्व) की गणना उन सभी सुविधाओं के लिए की जाती है जिन्हें आप अपना मॉडल फिट कर रहे हैं। इस छद्म कोड है आप कैसे चर नाम और महत्व की एक विचार देता है संबंधित हो सकता है:

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) 

आपको लगता है कि दो सूचियों मुद्रित किया जा रहा की लंबाई समान हैं देखेंगे - आप अनिवार्य रूप से सूचियों को एक साथ मैप कर सकते हैं या उन्हें कैसे कुशल बनाना चाहते हैं। यदि आप एक साजिश में अच्छी तरह से चर महत्व दिखाना चाहते हैं, तो आप इस इस्तेमाल कर सकते हैं:

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

आप इस विधि (जिसका अर्थ है कि आप सभी स्तंभों फिटिंग कर रहे हैं का उपयोग नहीं करना चाहते हैं, नहीं बस के रूप में कुछ चुने हुए cols चर में सेट करें), तो आप train.columns.values के साथ अपने डेटा के कॉलम/फीचर/वेरिएबल नाम प्राप्त कर सकते हैं (और फिर इस सूची को परिवर्तनीय महत्व सूची के साथ एक साथ मैप करें या किसी अन्य तरीके से हेरफेर करें)।

संबंधित मुद्दे