R randomForests में वर्गीकरण के लिए थ्रेसहोल्ड कैसे बदलें?


10

सभी स्पीशीज डिस्ट्रीब्यूशन मॉडलिंग साहित्य से पता चलता है कि जब किसी ऐसे मॉडल का उपयोग करते हुए प्रजातियों की मौजूदगी / अनुपस्थिति की भविष्यवाणी की जाती है, जो संभाव्यता (उदाहरण के लिए, रैंडमफॉरेस्ट्स) का उपयोग करते हैं, तो थ्रेशोल्ड प्रोबेबिलिटी का चुनाव जिसके द्वारा वास्तव में उपस्थिति या अनुपस्थिति के रूप में किसी प्रजाति को वर्गीकृत किया जाना चाहिए और एक महत्वपूर्ण होना चाहिए हमेशा 0.5 के डिफ़ॉल्ट पर भरोसा न करें। मुझे इसके लिए कुछ मदद चाहिए! यहाँ मेरा कोड है:

library(randomForest)
library(PresenceAbsence)

#build model
RFfit <- randomForest(Y ~ x1 + x2 + x3 + x4 + x5, data=mydata, mytry = 2, ntrees=500)

#eventually I will apply this to (predict for) new data but for first I predict back    to training data to compare observed vs. predicted
RFpred <- predict(RFfit, mydata, type = "prob")

#put the observed vs. predicted in the same dataframe
ObsPred <- data.frame(cbind(mydata), Predicted=RFpred)

#create auc.roc plot
auc.roc.plot(ObsPred, threshold = 10, xlab="1-Specificity (false positives)",
  ylab="Sensitivity (true positives)", main="ROC plot", color=TRUE,
  find.auc=TRUE, opt.thresholds=TRUE, opt.methods=9) 

इससे मैंने निर्धारित किया कि मैं अनुमानित संभावनाओं से उपस्थिति को वर्गीकृत करने के लिए जिस दहलीज का उपयोग करना चाहता हूं वह 0.7 है, 0.5 का डिफ़ॉल्ट नहीं। मुझे पूरी तरह से समझ में नहीं आ रहा है कि इस जानकारी का क्या करना है। क्या मैं अपने आउटपुट का मानचित्र बनाते समय बस इस सीमा का उपयोग करता हूं? मैं आसानी से निरंतर संभावनाओं के साथ एक मैप किए गए आउटपुट बना सकता था, फिर उन्हें 0.7 से अधिक वर्तमान के मानों के साथ पुनर्वर्गीकृत करता हूं, और उन <0.7 अनुपस्थित हैं।

या, क्या मैं इस जानकारी को लेना चाहता हूं और कट-ऑफ पैरामीटर का उपयोग करते हुए, अपने रैंडम फ़ॉरेस्ट मॉडलिंग को फिर से चलाना चाहता हूं? कट-ऑफ पैरामीटर क्या वास्तव में कर रहा है? क्या यह परिणामी वोट को बदलता है? (वर्तमान में यह "बहुमत" है)। मैं इस कट-ऑफ पैरामीटर का उपयोग कैसे करूँ? मैं प्रलेखन समझ में नहीं आता! धन्यवाद!


2
मैं कहूंगा कि यह यहां हो सकता है: RF से (1) संभाव्यता अनुमान का मुद्दा, (2) चाहे आप मॉडल पर एक लागत समारोह लागू कर सकते हैं या इसे मॉडल में बनाना है, और (3) लागत कार्यों को कैसे कार्यान्वित करना है आरएफ में आवर्ती मुद्दे हैं जो केवल प्रोग्रामिंग से संबंधित नहीं हैं।
charles

जवाबों:


7

#सेट थ्रेशोल्ड या कटऑफ का मान 0.7

cutoff=0.7

कटऑफ वैल्यू 0.7 से कम # वैल्यू को 0 के रूप में वर्गीकृत किया जाएगा (इस मामले में वर्तमान)

RFpred[RFpred<cutoff]=0

कटऑफ वैल्यू 0.7 से अधिक # वैल्यू को 1 (इस मामले में अनुपस्थित) के रूप में वर्गीकृत किया जाएगा।

 RFpred[RFpred>=cutoff]=1

1
क्या आप अपने उत्तर पर थोड़ा विस्तार कर सकते हैं? बहुत कम से कम यह आपके कोड को एनोटेट करने के लिए उपयोगी होगा।
पैट्रिक कूलोम्बे

2
FWIW, मुझे लगता है कि यह पूरी तरह से पर्याप्त है।
साइकोरैक्स का कहना है कि मोनिका

यह उत्तर पूरी तरह से ध्वनि है। मैं सहमत हूँ।
सीनोसैपियन

7

क्षमा करें, आपने जवाब नहीं दिया है और उत्तर पर प्रयास करता है। इस मुद्दे की कवरेज के लिए मैक्स कुह्न की पुस्तक की सिफारिश करेंगे। यह काफी व्यापक मुद्दा है। बस कुछ बिट्स जोड़ें:

  1. आरओसी घटता लोकप्रिय है, लेकिन केवल तभी समझ में आता है जब आप लागत नकारात्मक और गलत सकारात्मक परिणामों के बीच व्यापार बंद को समझने की कोशिश कर रहे हैं। यदि CostFN = CostFP तो निश्चित नहीं है कि वे समझ में आते हैं। सी-स्टेटिस्टिक और अन्य व्युत्पन्न उपायों का अभी भी उपयोग है। यदि आप सटीकता को अधिकतम करना चाहते हैं - इसके लिए अपने मॉडल को ट्यून करें (कैरट पैकेज इसे आसान बनाता है), आरओसी वक्र बनाना न भूलें।
  2. हर कोई आरएफ मॉडल से प्राप्त संभावनाओं का उपयोग करता है। मुझे लगता है कि ऐसा करने के लिए कुछ सोचा जाना चाहिए - ये संभाव्य मॉडल नहीं हैं, वे ऐसा करने के लिए नहीं बने हैं। यह अक्सर काम करता है। कम से कम मैं नए डेटा पर आरएफ प्रोबायिलीज़ के सत्यापन प्लॉट का उत्पादन करूंगा यदि मुझे वास्तव में प्रोबायिलीज़ में रुचि थी
  3. इसका सबसे सरल तरीका यह होगा कि "बस उन 0.7 से अधिक मूल्यों के साथ पुन: उपयोग करें जो वर्तमान में मौजूद हैं, और वे <0.7 अनुपस्थित हैं"।
  4. यदि लागत (FN) समान लागत (FP) नहीं है, तो आपको RF लागत को संवेदनशील बनाने की आवश्यकता है। R यह आसान नहीं बनाता है। रैंडमफॉरस्ट पैकेज में वेटिंग फ़ंक्शन काम नहीं करता है। सबसे अच्छा विकल्प नमूना के साथ खेलना है, जो आप चाहते हैं लागत समारोह प्राप्त करने के लिए बहुमत के मामले को रेखांकित करें। लेकिन नमूना अनुपात और लागत के बीच संबंध प्रत्यक्ष नहीं है। तो आप (3) के साथ रहना चाह सकते हैं

वर्ग वज़न के बारे में अपडेट एंडी
लियाव : रैंडम फ़ोरेस्ट पैकेज में "वर्तमान" क्लासवेट "विकल्प शुरू से ही रहा है, और यह अलग है कि आधिकारिक फोरट्रान कोड (संस्करण 4 और बाद में) क्लास वेट कैसे लागू होता है। यह बस वर्ग के लिए खाता है। नोड्स को विभाजित करते समय गिन्नी इंडेक्स गणना में वजन, ठीक उसी तरह जैसे कि क्लास वेट दिए जाने पर एक ही CART ट्री कैसे किया जाता है। प्रो। ब्रिमन ने अपने फोरट्रान कोड के नए संस्करण में लागू की गई नई क्लास वेटिंग योजना के साथ आए, जब हमने पाया कि हम बस का उपयोग कर रहे थे। गिन्नी इंडेक्स में वेट को बेहद असंतुलित डेटा (1: 100 या इससे भी बदतर) में बहुत मदद करने के लिए प्रतीत नहीं हुआ। यदि भारित गनी का उपयोग करना आपकी स्थिति में मदद करता है, तो सभी तरीकों से करें। मैं केवल यह कह सकता हूं कि अतीत में। हमें वह परिणाम नहीं मिला जिसकी हम उम्मीद कर रहे थे। ”


क्या आप उप-बिंदु (4) के बारे में विस्तार से बता सकते हैं कि वेटिंग तर्क काम क्यों नहीं करता है?
साइकोरैक्स का कहना है कि मोनिका

2
मेरी समझ यह थी कि यह उचित रूप से फोरट्रान कोड ( stat.berkeley.edu/~breiman/RandomForests/cc_software.htm ) पर लागू किया गया है लेकिन आर पैकेज नहीं। इस पर चर्चा की गई है: ( stat.ethz.ch/pipermail/r-help/2011-Sest/289769.html ) और केंद्रों के चारों ओर वृक्ष निर्माण के सभी चरणों में तौल का उपयोग करने की आवश्यकता है - केवल गिन्नी विभाजन नहीं। तो वर्तमान आर कार्यान्वयन - यह है कि केवल विभाजन पर भार का उपयोग करता है बहुत अच्छी तरह से काम नहीं करता है
चार्ल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.