स्किकिट-रैंडम फॉरेस्ट के साथ फ़ीचर महत्व बहुत उच्च मानक विचलन दर्शाता है


13

मैं scikit- रैंडम फॉरेस्ट क्लासिफायरियर का उपयोग कर रहा हूं और मैं इस उदाहरण में फीचर महत्व को प्लॉट करना चाहता हूं ।

हालांकि मेरा परिणाम पूरी तरह से अलग है, इस मायने में कि फीचर महत्व मानक विचलन लगभग हमेशा फीचर महत्व से बड़ा है (संलग्न छवि देखें)।

महत्त्व

क्या इस तरह का व्यवहार करना संभव है, या क्या मैं इसे साजिश करते समय कुछ गलतियां कर रहा हूं?

मेरा कोड निम्नलिखित है:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier()
clf.fit(predictors.values, outcome.values.ravel())

importance = clf.feature_importances_
importance = pd.DataFrame(importance, index=predictors.columns, 
                          columns=["Importance"])

importance["Std"] = np.std([tree.feature_importances_
                            for tree in clf.estimators_], axis=0)

x = range(importance.shape[0])
y = importance.ix[:, 0]
yerr = importance.ix[:, 1]

plt.bar(x, y, yerr=yerr, align="center")

plt.show()

IIUC, predictorsवह देता है numpy arrayजिसे आप किसी pandas Dataframeवस्तु से संदर्भित कर रहे हैं यह कॉलम है जो गलत है क्योंकि numpy arraysइसमें विशेषता नहीं है columns
निकिल मेवली

क्षमा करें, यह कोड पर एक टाइपो था। भविष्यवक्ता और परिणाम pandas DataFrameआकार के साथ दो हैं m x nऔर m x 1। यह अब स्पष्ट होना चाहिए।
gc5

2
मैं कुछ समय पहले भी इसी निष्कर्ष पर आया हूं। क्या यह हो सकता है कि यह इस तथ्य के कारण है कि कई विशेषताएं महत्वपूर्ण हैं, लेकिन चूंकि निर्णय पेड़ में विशेषताएं उच्च या निम्न हो सकती हैं (जैसे कि विभाजन करते समय एक यादृच्छिक सबसेट की पेशकश की जाती है), उनका महत्व पेड़ से अत्यधिक भिन्न होता है पेड़, जिसके परिणामस्वरूप उच्च मानक विचलन होता है।
आर्ची

महान पोस्ट, जैसा कि आप चित्र में देख सकते हैं, मैं एक समरूप अंक में चला गया हूं। एक पैकेज है, tsfreshजिसने मुझे प्रासंगिक सुविधाओं की पहचान करने में मदद की है और मेरी सुविधाओं को 600+ से लगभग 400 तक काट दिया है ! [मेरी शीर्ष 35 सुविधाएँ ] ( i.stack.imgur.com/0MROZ.png ) इसके साथ भी एल्गोरिथ्म अच्छा प्रदर्शन कर रहा है। मेरे लिए। मेरे पास एक द्विआधारी वर्गीकरण, सफलता / विफलता है। मुझे वस्तुतः कोई झूठी सफलता नहीं मिलती है, लेकिन मुझे सफलता का प्रतिशत काफी याद आता है। उपरोक्त सभी अनुमान उचित प्रतीत होते हैं। यह एक बड़ा प्रशिक्षण और परीक्षण सेट होने की आवश्यकता हो सकती है। मेरे पास कम है
सुपरहीरो

जवाबों:


3

आप यादृच्छिक संख्या में पेड़ों की डिफ़ॉल्ट संख्या के साथ उपयोग कर रहे हैं, जो कि 10 है। लगभग 30 विशेषताओं के लिए यह बहुत कम है। इसलिए मानक विचलन बड़ा है। कम से कम 100 या यहां तक ​​कि 1000 पेड़ों की कोशिश करें

clf = RandomForestClassifier(n_estimators=1000)

अधिक परिष्कृत विश्लेषण के लिए आप यह भी जांच सकते हैं कि आपकी सुविधाओं के बीच संबंध कितना बड़ा है।


क्षमा करें लाननोक, पेड़ों की संख्या डिफ़ॉल्ट एक नहीं है। मैंने एक उदाहरण कोड डाला (और यह सभी मापदंडों के लिए सच है, उदाहरण के लिए min_samples_split) क्योंकि मैं उस डेटा का खुलासा नहीं कर सकता जो मैं काम कर रहा हूं। हालाँकि, क्या यह पेड़ों की संख्या, अन्य मापदंडों के कारण है, या मैं यहाँ कुछ गलतियाँ कर रहा हूँ?
gc5

2

आपका परिणाम उतना अजीब नहीं है। जैसा कि लानेंक बताता है, आपको पहले चरण में वृक्षों की संख्या बढ़ानी चाहिए ताकि यह सुनिश्चित हो सके कि आपको सुविधा आयात के विषय में 'सांख्यिकीय' परिणाम प्राप्त हो।

हालांकि, Genuer एट अल द्वारा इस पत्र के रूप में । (2010) दिखाता है, आप सुविधाओं को खत्म करने के लिए वास्तव में मानक विचलन का उपयोग कर सकते हैं। उद्धरण के लिए: " हम देख सकते हैं कि असली चर मानक विचलन शोर चर एक की तुलना में बड़ा है, जो शून्य के करीब है। "


सुविधाओं को खत्म करने के लिए इस उदाहरण में मानक विचलन का उपयोग करना सभी सुविधाओं को समाप्त कर देगा । xD
जॉर्ज लेइताओ

हाहा, मुझे पूरा यकीन नहीं है, मुझे लगता है कि आप बहुत दूर सही तरीके से सुविधाओं को छोड़ सकते हैं? किसी भी तरह, मुख्य बिंदु मैं बनाने की कोशिश कर रहा हूं कि उच्च मानक विचलन अजीब नहीं हैं, और यह कि आप वास्तव में सुविधाओं को खत्म करने के लिए अपनी रणनीति में उनका उपयोग कर सकते हैं।
आर्ची

1

कोशिश करो clf = RandomForestClassifier(max_features=None)max_featuresकरने के लिए डिफ़ॉल्ट परम 'auto'जो के बराबर है sqrt(n_features)max_featuresके रूप में वर्णित किया गया है "सर्वोत्तम विभाजन की तलाश में विचार करने के लिए सुविधाओं की संख्या।" केवल निर्णय पेड़ में किसी भी बिंदु पर कम संख्या में सुविधाओं को देखने का मतलब है कि एक विशेषता का महत्व कई पेड़ों में व्यापक रूप से भिन्न हो सकता है। तो, एक यादृच्छिक सबसेट को मत देखो, बस पेड़ के हर स्तर पर सभी सुविधाओं को देखो।


1
ध्यान दें, यह सादे बैग वाले पेड़ों के बराबर है। यादृच्छिक जंगलों में "यादृच्छिक" का अर्थ है आमतौर पर sqrt(n_features)या , प्रत्येक विभाजन पर सुविधाओं के यादृच्छिक सबसेट पर विचार करना log2(n_features)max_features=Noneअब सुविधाओं का एक यादृच्छिक सबसेट नहीं मानता है। मुझे यकीन नहीं है कि यह प्रभाव ऊपर प्रस्तावित समाधान है। एक संभावना यह है कि कई विशेषताएं बस एक बड़ी मात्रा में महत्व रखती हैं और इसलिए पेड़ों के पहनावे में व्यापक रूप से भिन्न होती हैं। या हो सकता है कि पर्याप्त नमूने नहीं हैं और इसलिए जब तक आप एक पत्ता नहीं मारते हैं, तब तक हर सुविधा पर विचार नहीं किया जाता है।
जैम

1

इसका एक सामान्य कारण यह है कि आपके द्वारा प्रदत्त पैरामीटर (या डिफ़ॉल्ट) RandomForestClassifierआपके डेटासेट के लिए अनुकूल नहीं हैं।

इस समस्या का समाधान करने का एक सामान्य तरीका है, उदाहरण के लिए हाइपरपरमीटर स्थान की खोज करना GridSearchCV:

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score, make_scorer

param_grid = {'n_estimators': [10, 100, 1000], 'max_features': [5, 10, 20, 30]}
clf = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring=make_scorer(accuracy_score))

param_gridयहां उन मापदंडों के क्रमपरिवर्तन हैं जिन्हें आप खोजना चाहते हैं, और make_scorer(accuracy_score)वह उपाय है जिसे आप अनुकूलित करना चाहते हैं।

ध्यान दें कि accuracy_scoreसंतुलित सेट के लिए उपयुक्त है, लेकिन असंतुलित सेट के लिए नहीं। अपने विशेष उद्देश्य पर एक उपयुक्त मीट्रिक चुनें।


0

इसके कई कारण हो सकते हैं। पेड़ों की संख्या और गहराई आपके परिणामों को बदल सकती है। यदि आपका मॉडल मापदंडों (क्रॉस-वैलिडेशन आदि) का चयन करने के बाद अच्छा प्रदर्शन नहीं करता है, तो यह संभवतः इसलिए है क्योंकि आपकी विशेषताएं बहुत पूर्वानुमानित नहीं हैं, इसलिए उन्हें लगभग "बेतरतीब ढंग से" चुना जाता है जो पेड़ से पेड़ तक उच्च मानक विचलन की ओर जाता है। लेकिन अन्य संभावनाएं हैं, उदाहरण के लिए यह भी हो सकता है कि आपकी विशेषताएं अत्यधिक सहसंबद्ध हैं। थोड़ी और जानकारी मददगार होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.