एक प्रकाशन में एक यादृच्छिक जंगल प्रस्तुत करने का सबसे अच्छा तरीका?


75

मैं विभिन्न सुविधाओं के साथ एक माइक्रोएरे अध्ययन में दो समूहों के एक मजबूत वर्गीकरण के रूप में यादृच्छिक वन एल्गोरिथ्म का उपयोग कर रहा हूं।

  • यादृच्छिक वन को प्रस्तुत करने का सबसे अच्छा तरीका क्या है ताकि एक कागज में इसे प्रतिलिपि प्रस्तुत करने योग्य बनाने के लिए पर्याप्त जानकारी हो?
  • क्या आर में एक प्लॉट विधि वास्तव में पेड़ की साजिश है, अगर इसमें कम संख्या में विशेषताएं हैं?
  • क्या ओओबी अनुमान त्रुटि दर को उद्धृत करने के लिए सबसे अच्छा आँकड़ा है?

2
एक भी पेड़ नहीं है ... लेकिन @ शनिदेव की प्रतिक्रिया के लिए उनमें से एक को निराशात्मक उद्देश्य के लिए साजिश रचने के लिए देखें।
chl

मैं निश्चित रूप से randomForest पर विचार करने के लायक है: partPlot, सांख्यिकी.stackexchange.com/questions/92150/…
सोरेन हवेलुंड वेलिंग

1
आप मेरे रैंडम फ़ॉरेस्ट विज़ुअलाइज़ेशन पैकेज, वनफ्लोर - फॉरेफ़्लोअर.डाक
सोरेन हवेलुंड वेलिंग

जवाबों:


48

इसे प्रतिलिपि प्रस्तुत करने योग्य बनाने के बारे में, सबसे अच्छा तरीका कागज के साथ प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान (यानी कोड और डेटा) प्रदान करना है। इसे अपनी वेबसाइट पर, या किसी होस्टिंग साइट (जैसे जीथब) पर उपलब्ध कराएँ।

विज़ुअलाइज़ेशन के बारे में, लियो ब्रिमन ने इस पर कुछ दिलचस्प काम किया है ( उनके होमपेज देखें , विशेष रूप से ग्राफिक्स पर अनुभाग )।

लेकिन अगर आप R का उपयोग कर रहे हैं, तो randomForestपैकेज में कुछ उपयोगी कार्य हैं:

data(mtcars)
mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE,
                           importance=TRUE)
plot(mtcars.rf, log="y")
varImpPlot(mtcars.rf)

तथा

set.seed(1)
data(iris)
iris.rf <- randomForest(Species ~ ., iris, proximity=TRUE,
                        keep.forest=FALSE)
MDSplot(iris.rf, iris$Species)

मैं वास्तव में एक पेड़ की साजिश करने के एक सरल तरीके से अवगत नहीं हूं, लेकिन आप getTreeपेड़ को पुनः प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं और अलग से साजिश कर सकते हैं।

getTree(randomForest(iris[,-5], iris[,5], ntree=10), 3, labelVar=TRUE)

पर स्ट्रोब्ल / Zeileis प्रस्तुति "क्यों और कैसे यादृच्छिक वन चर महत्व उपायों का उपयोग करने के लिए (और कैसे आप नहीं करना चाहिए)" पेड़ जो इस तरह से उत्पादन किया गया है चाहिए के उदाहरण है। ट्री मॉडल के इस ब्लॉग पोस्ट में CART ट्री प्लॉट्स के कुछ अच्छे उदाहरण हैं जिनका आप उदाहरण के लिए उपयोग कर सकते हैं।

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


4
भूखंडों के बारे में छोटा विस्तार: plot.randomForestदिखाता है कि पेड़ों की बढ़ती संख्या के साथ ओओबी त्रुटि और इन-क्लास ओओबी त्रुटि कैसे विकसित हुई; varImpPlotशीर्ष विशेषताओं और MDSplotRF ऑब्जेक्ट निकटता माप के 2D प्रक्षेपण पर प्लॉट किए गए सभी ऑब्जेक्ट्स के लिए विशेषता महत्व के उपाय दिखाता है ।

MDSplot()फ़ंक्शन का हवाला देते हुए +1 । मुझे यह स्वीकार करना चाहिए कि मैं अक्सर सर्वश्रेष्ठ विशेषताओं का चयन करने के बजाय व्यक्तियों के समूहों (आरएफ निकटता माप के आधार पर) को उजागर करने के लिए आरएफ का उपयोग करता हूं। चिकित्सक अक्सर ऐसे प्लॉट को बहुत आसानी से पढ़ लेते हैं, जैसे कि var के डॉटप्लेट। महत्व ...
chl

18
  1. जैसा कि शेन ने लिखा है; इसे प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान करें + में यादृच्छिक बीज शामिल करें, क्योंकि आरएफ स्टोचस्टिक है।
  2. सबसे पहले, आरएफ बनाने वाले एकल पेड़ों की साजिश करना बकवास है; यह एक कलाकारों की टुकड़ी है, यह केवल एक पूरे के रूप में समझ में आता है। लेकिन यहां तक ​​कि पूरे जंगल की साजिश करना बकवास है - यह एक ब्लैक-बॉक्स क्लासिफायरियर है, इसलिए इसका मूल संरचना को दोहराने के बजाय, इसकी संरचना के साथ डेटा की व्याख्या करने का इरादा नहीं है। इसके बजाय, शेन द्वारा सुझाए गए कुछ भूखंड बनाएं।
  3. व्यवहार में, OOB एक बहुत अच्छी त्रुटि सन्निकटन है; अभी तक यह व्यापक रूप से स्वीकृत तथ्य नहीं है, इसलिए प्रकाशन के लिए इसकी पुष्टि करने के लिए सीवी बनाना भी बेहतर है।

तो जब सीवी कर रहा है तो @mbq पहले चयनित सभी नमूनों के साथ एक यादृच्छिक वन करना मान्य है; सभी के साथ एक बार दो बार करना और दूसरा शीर्ष 10 चर (जो एक कागज में उद्धृत किया जा सकता है) के साथ। फिर एक क्रॉस-वैलीडेशन (प्रत्येक कोशिश करने वाले 10 शीर्ष जीनों का चयन करना) छोड़ दें और उसमें से सीवी त्रुटि उद्धृत करें?
danielsbrewer

1
@danielsbrewer मैं इसे किसी अन्य तरीके से (सुविधा चयन पर अधिक ध्यान देते हुए) करूँगा, लेकिन यह सही है; अभी तक यह आपकी जैविक समस्या के लिए सर्वश्रेष्ठ मार्करों को चुनने की तुलना में आरएफ सुविधा चयन के विषय पर अधिक है।

2
मुख्य समस्या यह है कि दो मॉडल (मॉडल = सीखने की विधि + सुविधा चयन विधि) की तुलना करना वास्तव में कठिन है, लेकिन सादगी के लिए आप बस कुछ ग्रहण कर सकते हैं (जैसे मैं आरएफ का उपयोग करूंगा और शीर्ष 10 विशेषताओं का चयन करूंगा) और स्वीकार करता हूं कि आप जानते हैं हो सकता है कि यह सबॉप्टीमल हो, लेकिन आप इस बात पर सहमत हैं कि जब आप सटीकता से संतुष्ट हों। उस स्थिति में आपकी एकमात्र समस्या विशेषता चयन के पूर्वाग्रह को दूर करना है। टीबीसी।

2
इसलिए, मैं एक साधारण बैगिंग करूंगा: आप 10 (या 30 यदि आपके पास एक अच्छा कंप्यूटर है) वस्तुओं का यादृच्छिक उपसमूह बनाते हैं (चलो प्रतिस्थापन के साथ यादृच्छिक उठाकर कहते हैं), प्रत्येक पर आरएफ ट्रेन करें, इसे महत्व दें और प्रत्येक का एक रैंक लौटाएं सभी पुनरावृत्तियों पर औसत विशेषता (सर्वश्रेष्ठ विशेषता को रैंक 1, दूसरा सर्वश्रेष्ठ 2 और इसी तरह से प्राप्त होता है; यह औसत हो सकता है इसलिए यह विशेषता 12 गुना 1 थी और 18 गुना 2 की रैंक 1.6 है), अंत में सर्वश्रेष्ठ रैंक के साथ 10 का चयन करें और उन्हें कॉल करें आपके मार्करों। फिर अपने मार्कर का उपयोग करके आरएफ की एक त्रुटि सन्निकटन प्राप्त करने के लिए CV (LOO, 10-गुना या अधिमानतः यादृच्छिक नमूना) का उपयोग करें। टीबीसी।

2
रैंकों की रिपोर्ट करें (उम्मीद है कि वे 1,2,3 के पास सुंदर होनी चाहिए ...), सीवी त्रुटि इसके विचलन के साथ (बस प्रत्येक सीवी दौर के परिणामों के मानक विचलन की गणना करें) और ओओबी त्रुटि (शायद सीवी त्रुटि के समान होगी)। अस्वीकरण: यह इष्टतम विशेषताओं को चुनने के लिए एक विधि नहीं है - आपको ऐसा करने के लिए RFE और नेस्टेड CV की आवश्यकता है। DISCLAIMER2: मैंने इस तरह के डेटा के साथ काम नहीं किया है, इसलिए मैं यह गारंटी नहीं देता कि आपके रेफरी इससे खुश होंगे (हालांकि मेरा मानना ​​है कि उन्हें चाहिए)।

13

आवश्यक रूप से सार्थक होने के कथानक के बारे में अन्य उत्तरों में केवेट को ध्यान में रखें। लेकिन अगर आप चित्रण / शैक्षणिक उद्देश्यों के लिए एक भूखंड चाहते हैं, तो आर के निम्नलिखित स्निपेट उपयोगी हो सकते हैं। यदि आपको आवश्यकता हो तो किनारे के पाठ में "स्प्लिट पॉइंट" जोड़ना मुश्किल नहीं है।

to.dendrogram <- function(dfrep,rownum=1,height.increment=0.1){

  if(dfrep[rownum,'status'] == -1){
    rval <- list()

    attr(rval,"members") <- 1
    attr(rval,"height") <- 0.0
    attr(rval,"label") <- dfrep[rownum,'prediction']
    attr(rval,"leaf") <- TRUE

  }else{##note the change "to.dendrogram" and not "to.dendogram"
    left <- to.dendrogram(dfrep,dfrep[rownum,'left daughter'],height.increment)
    right <- to.dendrogram(dfrep,dfrep[rownum,'right daughter'],height.increment)
    rval <- list(left,right)

    attr(rval,"members") <- attr(left,"members") + attr(right,"members")
    attr(rval,"height") <- max(attr(left,"height"),attr(right,"height")) + height.increment
    attr(rval,"leaf") <- FALSE
    attr(rval,"edgetext") <- dfrep[rownum,'split var']
    #To add Split Point in Dendrogram
    #attr(rval,"edgetext") <- paste(dfrep[rownum,'split var'],"\n<",round(dfrep[rownum,'split point'], digits = 2),"=>", sep = " ")
  }

  class(rval) <- "dendrogram"

  return(rval)
}

mod <- randomForest(Species ~ .,data=iris)
tree <- getTree(mod,1,labelVar=TRUE)

d <- to.dendrogram(tree)
str(d)
plot(d,center=TRUE,leaflab='none',edgePar=list(t.cex=1,p.col=NA,p.lty=0))

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