सुविधा-वनों में सुविधा आयातों का उपयोग करते हुए सुविधा चयन


12

मैंने स्किकिट-लर्न के साथ यादृच्छिक जंगलों में फ़ीचर आयात की साजिश रची है । यादृच्छिक जंगलों का उपयोग करके भविष्यवाणी में सुधार करने के लिए, मैं सुविधाओं को हटाने के लिए भूखंड की जानकारी का उपयोग कैसे कर सकता हूं? यानी प्लॉट की जानकारी के आधार पर यह पता कैसे लगाया जाए कि कोई सुविधा बेकार है या रैंडम फॉरेस्ट के प्रदर्शन में कमी है? प्लॉट विशेषता पर आधारित है feature_importances_और मैं क्लासिफायर का उपयोग करता हूं sklearn.ensemble.RandomForestClassifier

मुझे पता है कि फीचर चयन के लिए अन्य तकनीक मौजूद हैं , लेकिन इस प्रश्न में मैं इस बात पर ध्यान देना चाहता हूं कि फीचर का उपयोग कैसे करें feature_importances_


ऐसे फीचर महत्व वाले भूखंडों के उदाहरण:

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

जवाबों:


14

आप बस feature_importances_उच्चतम महत्व स्कोर के साथ सुविधाओं का चयन करने के लिए विशेषता का उपयोग कर सकते हैं । इसलिए उदाहरण के लिए आप महत्व के अनुसार K सर्वोत्तम विशेषताओं का चयन करने के लिए निम्नलिखित फ़ंक्शन का उपयोग कर सकते हैं।

def selectKImportance(model, X, k=5):
     return X[:,model.feature_importances_.argsort()[::-1][:k]]

या यदि आप एक पाइपलाइन का उपयोग कर रहे हैं तो निम्न वर्ग

class ImportanceSelect(BaseEstimator, TransformerMixin):
    def __init__(self, model, n=1):
         self.model = model
         self.n = n
    def fit(self, *args, **kwargs):
         self.model.fit(*args, **kwargs)
         return self
    def transform(self, X):
         return X[:,self.model.feature_importances_.argsort()[::-1][:self.n]]

उदाहरण के लिए:

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> iris = load_iris()
>>> X = iris.data
>>> y = iris.target
>>> 
>>> model = RandomForestClassifier()
>>> model.fit(X,y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
>>> 
>>> newX = selectKImportance(model,X,2)
>>> newX.shape
(150, 2)
>>> X.shape
(150, 4)

और स्पष्ट रूप से यदि आप "टॉप के फीचर्स" की तुलना में कुछ अन्य मानदंडों के आधार पर चयन करना चाहते थे, तो आप केवल तदनुसार कार्यों को समायोजित कर सकते हैं।


धन्यवाद डेविड। ऊपर की दहलीज का चयन करने के बारे में कोई जानकारी जो सुविधाओं के लिए उपयोगी है? (कम से कम उपयोगी सुविधा को हटाने से अलग रखा जाए, फिर से आरएफ
चलाएं

1
अधिकांश स्वचालित सुविधा चयन के साथ, मैं कहूंगा कि अधिकांश लोग एक ट्यूनिंग ग्रिड का उपयोग करते हैं। लेकिन (और इंजीनियरिंग) सुविधाओं का चयन करते समय डोमेन विशेषज्ञता का उपयोग करना संभवतः सबसे मूल्यवान है - लेकिन वास्तव में स्वचालित नहीं है।
डेविड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.