RandomForestClassifier OOB स्कोरिंग विधि


16

क्या आउट-ऑफ-बैग नमूनों के साथ सामान्यीकरण त्रुटि का अनुमान लगाने के लिए स्कोरिंग विधि के रूप में औसत सटीकता का उपयोग करते हुए रीकिट-वन में यादृच्छिक वन कार्यान्वयन है? यह प्रलेखन में उल्लिखित नहीं है, लेकिन स्कोर () विधि औसत सटीकता की रिपोर्ट करती है।

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


RandomForestClassifier वर्ग का oob_score पैरामीटर वह नहीं करता है जो आप चाहते हैं?
पियरे

AFAIK, oob_scoreसटीकता की रिपोर्ट करें। हालांकि मुझे फिर से सोर्स कोड देखने की जरूरत है।
darXider

आप अपने ग्रिड खोज के साथ किस पैरामीटर का आकलन कर रहे हैं?
जाह्नवीस

^ क्षमा करें, लेकिन मुझे वास्तव में अब याद नहीं है! मैंने यह सवाल 1.5 साल पहले पूछा था।
darXider

जवाबों:


14

सामान्य तौर पर, क्लासिफायर का प्रदर्शन सटीकता की तुलना में किया जाता है, यह सही ढंग से वर्गीकृत उदाहरणों की संख्या का एक उदाहरण है जो कुल संख्याओं से विभाजित है। हालांकि, प्रशिक्षण डेटा से हम अपने क्लासिफायर से अपेक्षित त्रुटि का एक बेहतर अनुमान प्राप्त कर सकते हैं जब हम कलाकारों की टुकड़ी सीखने या बैगिंग तकनीकों का उपयोग कर रहे हैं।

आउट-ऑफ-बैग त्रुटि

एक्समैं

स्केलेर में ओब को लागू करने के लिए आपको अपनी रैंडम फ़ॉरेस्ट ऑब्जेक्ट बनाते समय इसे निर्दिष्ट करने की आवश्यकता होती है

from sklearn.ensemble import RandomForestClassifier 
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)

तब हम मॉडल को प्रशिक्षित कर सकते हैं

forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))

स्कोर: 0.979921928817

उम्मीद के मुताबिक प्रशिक्षण सेट का मूल्यांकन करते समय मॉडल की सटीकता बहुत अधिक है। हालांकि, यह अर्थहीन है क्योंकि आप अपने डेटा को बहुत अच्छी तरह से ओवरफिट कर सकते हैं और इस तरह आपका मॉडल बकवास है। हालाँकि, हम आउट-ऑफ-बैग स्कोर का उपयोग कर सकते हैं

print(forest.oob_score_)

.८६४५३२७२१०१

यह केवल उन पेड़ों का उपयोग करके प्रशिक्षण सेट में हमारे उदाहरणों का मूल्यांकन करने के लिए सटीकता है, जिसके लिए उन्हें छोड़ दिया गया था। अब के रूप में परीक्षण सेट पर स्कोर की गणना करते हैं

print('Score: ', forest.score(X_test, y_test))

स्कोर: 0.86517733935

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

विभिन्न मैट्रिक्स का उपयोग करके ओब की गणना

हां, आप यह कर सकते हैं! हालाँकि, यह निर्भर करता है कि आपका कोड वास्तव में कैसे संरचित है। मुझे यकीन नहीं है कि आप cross_val_scoreफ़ंक्शन के साथ ऑब और एयूसी को एक साथ कैसे शामिल कर सकते हैं । हालाँकि, यदि आप क्रॉस वेलिडेशन फोल्ड्स मैन्युअल रूप से कर रहे हैं तो आप निम्न कार्य कर सकते हैं, स्केलेर में रैंडम फॉरेस्ट एल्गोरिथ्म आपको ओब का निर्णय कार्य प्रदान करता है।

print(forest.oob_decision_function_)

तब वर्ग का उपयोग करके प्राप्त किया जा सकता है

from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)

फिर हम निम्नलिखित का उपयोग करके AUC की गणना कर सकते हैं

metrics.roc_auc_score(y_train, pred_train)

.86217157846471204


4
धन्यवाद! मुझे पता है कि यादृच्छिक जंगलों में ओओबी प्रक्रिया कैसे काम करती है। मैं विशेष रूप से पूछ रहा था कि क्या RandomForestClassifierएक ओओबी स्कोर वापस आ सकता है जो सटीकता नहीं है, और आपके उत्तर का दूसरा भाग इस समस्या का सामना करने के तरीके पर एक बहुत अच्छा संकेत प्रदान करता है। हालांकि, मुझे इस बात पर जोर देना होगा कि आरओसी वक्र के एयूसी की गणना करने के लिए वर्ग लेबल का उपयोग नहीं करना चाहिए; बल्कि, कक्षा की संभावनाओं को सीधे इस्तेमाल किया जाना चाहिए। तो, सही परिभाषा होगी pred_train = forest.oob_decision_function_[:, 1]
darXider

@darXider यह छायादार नहीं है, क्योंकि forest.oob_decision_function_shape [0] == X_train.shape [0], जबकि मुझे यह होने की उम्मीद है == OOB नमूनों की संख्या, जो नमूनों की संख्या से कम होनी चाहिए X_train में? इसके अलावा, व्यक्तिगत रूप से मुझे लोगो की गणना करने में दिलचस्पी थी, दूसरों के लिए भी जो ऐसा करना चाहते हैं, मुझे लगता है कि इसके बजाय pred_train = forest.oob_decision_function_ होना चाहिए।
सैंडर वांडेन हाउते ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.