2014-06-17 13 views
8

मैं बहुत यकीन है कि यह पहले कहा गया है, लेकिन मैं एक जवाबsklearn रसद प्रतिगमन - महत्वपूर्ण सुविधाओं

रसद प्रतिगमन अजगर पर sklearn का उपयोग कर चल रहा है, मैं करने के लिए मेरी डाटासेट बदल पा रहा हूँ खोजने में असमर्थ हूँ ट्रांसफॉर्म विधि

classf = linear_model.LogisticRegression() 
func = classf.fit(Xtrain, ytrain) 
reduced_train = func.transform(Xtrain) 

का उपयोग करके इसकी सबसे महत्वपूर्ण विशेषताएं यह बता सकती हैं कि कौन सी विशेषताओं को सबसे महत्वपूर्ण बताया गया है? अधिक आम तौर पर मैं डेटासेट में प्रत्येक सुविधा के पी-वैल्यू की गणना कैसे कर सकता हूं?

उत्तर

1

आप फिट मॉडल के coef_ गुणांक में गुणांक देख सकते हैं ताकि यह देखने के लिए कि कौन सी सुविधाएं सबसे महत्वपूर्ण हैं। (LogisticRegression के लिए, सभी transform कर रहे हैं यह देख रहा है कि कौन से गुणांक पूर्ण मूल्य में उच्चतम हैं।)

अधिकांश विज्ञान-सीखने वाले मॉडल पी-मानों की गणना करने का कोई तरीका प्रदान नहीं करते हैं। व्यापक रूप से बोलते हुए, इन मॉडलों को वास्तव में आउटपुट की भविष्यवाणी करने के लिए डिज़ाइन किया गया है, भविष्यवाणी के बारे में समझने के लिए निरीक्षण नहीं किया जाना चाहिए। यदि आप पी-मूल्यों में रूचि रखते हैं तो आप statsmodels पर एक नज़र डाल सकते हैं, हालांकि यह sklearn की तुलना में कुछ हद तक कम परिपक्व है।

+2

यह मेरी समझ है कि coefs_ आकार सुविधा के महत्व के लिए एक उपाय नहीं है। क्या आप elobarate मैं संख्याओं को कैसे देखना चाहिए? धन्यवाद – mel

+0

@mel: स्रोत कोड को देखते हुए, मैं देख सकता हूं कि 'LogisticRegression.transform' वास्तव में सुविधा महत्व का मूल्यांकन करने के लिए' coef_' का उपयोग कर रहा है। यह सिर्फ उच्चतम मूल्य वाले गुणांक को अधिक महत्वपूर्ण मानता है। प्रासंगिक कोड [यहां] है (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/feature_selection/from_model.py)। यदि आप "महत्व" की कुछ अन्य परिभाषा चाहते हैं तो आपको यह बताने की आवश्यकता होगी कि वह क्या है। – BrenBarn

+3

वास्तव में, 'np.abs (coef_)' विशेषता महत्व को मापने का एक भयानक प्रयास है - एक ऐसी अवधारणा जो वास्तव में एक बहुविकल्पीय सेटिंग में अधिक समझ में नहीं आती है (यानी वेरिएबल्स भविष्यवाणी करने के लिए संयुक्त रूप से कार्य करते हैं) जब तक आपका मॉडल नहीं करता परिवर्तनीय चयन, उदाहरण के लिए sparsity के माध्यम से। यदि मॉडल दुर्लभता को बढ़ावा देता है, तो आप उन चरों को त्याग सकते हैं जिनके वजन शून्य हैं, लेकिन यह तकनीकी रूप से आप वास्तव में कर सकते हैं यदि आप कठोर होना चाहते हैं।कुछ अन्य मॉडल 'feature_importance' का पर्दाफाश करते हैं, और मॉडल के आधार पर यह एक कम या कम अविवाहित उपाय है कि यह सुविधा कितनी अच्छी तरह से बताती है कि – eickenberg

3

LogisticRegression.transformthreshold मान लेता है जो निर्धारित करता है कि कौन सी विशेषताएं रखना है।

थ्रेसहोल्ड: सीधे docstring से स्ट्रिंग, नाव या कोई नहीं, वैकल्पिक (डिफ़ॉल्ट = कोई नहीं) सीमा मूल्य सुविधा के चयन के लिए उपयोग करने के लिए। विशेषताएं जिनके महत्व अधिक या बराबर रखा जाता है जबकि अन्य छोड़ दिए जाते हैं। यदि "औसत" (resp। "मतलब") है, तो थ्रेसहोल्ड मान फीचर आयात के औसत (resp। माध्य) है। एक स्केलिंग कारक (उदाहरण के लिए, "1.25 * माध्य") का भी उपयोग किया जा सकता है। यदि कोई नहीं और उपलब्ध है, तो ऑब्जेक्ट विशेषता threshold का उपयोग किया जाता है। अन्यथा, "माध्य" डिफ़ॉल्ट रूप से उपयोग किया जाता है।

एलआर आकलनकर्ता पर कोई वस्तु विशेषता threshold, इसलिए केवल मतलब की तुलना में अधिक निरपेक्ष मूल्य (वर्गों के ऊपर संक्षेप के बाद) के साथ उन लोगों सुविधाएं डिफ़ॉल्ट रूप से रखा जाता है नहीं है।

1

ऊपर दी गई टिप्पणियों में सुझाव दिया गया है कि आप अपने फिट से पहले अपने डेटा को स्केल कर सकते हैं (और चाहिए) इस प्रकार गुणांक तुलनात्मक बना सकते हैं। नीचे यह दिखाने के लिए एक छोटा कोड है कि यह कैसे काम करेगा। मैं तुलना के लिए this प्रारूप का पालन करता हूं।

import numpy as np  
from sklearn.linear_model import LogisticRegression 
from sklearn.preprocessing import StandardScaler 
import pandas as pd 
import matplotlib.pyplot as plt 

x1 = np.random.randn(100) 
x2 = np.random.randn(100) 
x3 = np.random.randn(100) 

#Make difference in feature dependance 
y = (3 + x1 + 2*x2 + 5*x3 + 0.2*np.random.randn()) > 0 

X = pd.DataFrame({'x1':x1,'x2':x2,'x3':x3}) 

#Scale your data 
scaler = StandardScaler() 
scaler.fit(X) 
X_scaled = pd.DataFrame(scaler.transform(X),columns = X.columns) 

clf = LogisticRegression(random_state = 0) 
clf.fit(X_scaled, y) 

feature_importance = abs(clf.coef_[0]) 
feature_importance = 100.0 * (feature_importance/feature_importance.max()) 
sorted_idx = np.argsort(feature_importance) 
pos = np.arange(sorted_idx.shape[0]) + .5 

featfig = plt.figure() 
featax = featfig.add_subplot(1, 1, 1) 
featax.barh(pos, feature_importance[sorted_idx], align='center') 
featax.set_yticks(pos) 
featax.set_yticklabels(np.array(X.columns)[sorted_idx], fontsize=8) 
featax.set_xlabel('Relative Feature Importance') 

plt.tight_layout() 
plt.show() 
+0

ब्रेवटी के लिए आप 'मानक स्केलर' के बजाय 'स्केल' का भी उपयोग कर सकते हैं: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html – istewart

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