आर में एक यादृच्छिक जंगलों के वर्गीकरण में भविष्यवक्ताओं के एक सेट का सापेक्ष महत्व


31

मैं randomForestआर में एक वर्गीकरण मॉडल की ओर चर के सेटों के सापेक्ष महत्व को निर्धारित करना चाहता हूं । importanceफ़ंक्शन MeanDecreaseGiniप्रत्येक व्यक्तिगत भविष्यवक्ता के लिए मीट्रिक प्रदान करता है - क्या यह एक सेट में प्रत्येक भविष्यवक्ता के समान है?

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

# Assumes df has variables a1, a2, b1, b2, and outcome
rf <- randomForest(outcome ~ ., data=df)
importance(rf)
# To determine whether the "a" predictors are more important than the "b"s,
# can I sum the MeanDecreaseGini for a1 and a2 and compare to that of b1+b2?

जवाबों:


46

पहले मैं स्पष्ट करना चाहूंगा कि वास्तव में मीट्रिक का महत्व क्या है।

MeanDecreaseGini प्रशिक्षण के दौरान विभाजन की गणना के लिए उपयोग किए जाने वाले Gini अशुद्धता सूचकांक पर आधारित चर महत्व का एक उपाय है। एक आम गलतफहमी यह है कि चर महत्व का मीट्रिक, मॉडल प्रदर्शन को जोर देने के लिए उपयोग किए जाने वाले गिन्नी को संदर्भित करता है जो एयूसी से निकटता से संबंधित है, लेकिन यह गलत है। यहाँ ब्रेमन और कटलर द्वारा लिखे गए यादृच्छिकतम पैकेज से स्पष्टीकरण दिया गया है:

Gini महत्व
हर बार एक नोड का विभाजन चर m पर बनाया जाता है दो अवरोही नोड के लिए gini अशुद्धता मानदंड मूल नोड से कम है। जंगल में सभी पेड़ों पर प्रत्येक अलग-अलग चर के लिए गिन्नी घटने से एक तेज चर महत्व मिलता है जो अक्सर क्रमिक महत्व के माप के अनुरूप होता है।

गिनी अशुद्धता सूचकांक के रूप में परिभाषित किया गया है कहाँ लक्ष्य चर और में कक्षाओं की संख्या है इस वर्ग का अनुपात है।एन सी पी मैं

जी=Σमैं=1nसीपीमैं(1-पीमैं)
nसीपीमैं

दो वर्ग की समस्या के लिए, निम्न वक्र में यह परिणाम होता है जो 50-50 नमूने के लिए अधिकतम होता है और सजातीय सेट के लिए न्यूनतम होता है: 2 वर्ग के लिए गिन्नी अशुद्धता

तब महत्व की गणना में की जाती है, जो प्रश्न में भविष्यवक्ता को शामिल करते हुए जंगल में सभी विभाजन पर औसतन होता है। जैसा कि यह एक औसत है, यह आसानी से एक समूह में निहित चर पर सभी विभाजन पर औसतन बढ़ाया जा सकता है।

मैं=जीपीआरnटी-जीरोंपीएलमैंटी1-जीरोंपीएलमैंटी2

करीब से देखने पर हमें पता है कि प्रत्येक चर महत्व का उपयोग चर पर औसत सशर्त है और समूह का माध्य डीग्रीगिनी सिर्फ इन आयातों का मतलब होगा, इस चर का भार उसी चर में दूसरे चर की तुलना में जंगल में उपयोग किया जाता है। इसका कारण यह है कि टॉवर संपत्ति

[[एक्स|Y]]=[एक्स]

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

आर में यादृच्छिक वन वस्तु से इन्हें प्राप्त करने के लिए एक सरल लिपि है:

var.share <- function(rf.obj, members) {
  count <- table(rf.obj$forest$bestvar)[-1]
  names(count) <- names(rf.obj$forest$ncat)
  share <- count[members] / sum(count[members])
  return(share)
}

बस समूह में चर के नाम पर सदस्यों के पैरामीटर के रूप में पास करें।

हम उम्मीद करते है कि यह आपके सवाल का जवाब दे देगा। मैं समूह आयात को सीधे प्राप्त करने के लिए एक फ़ंक्शन लिख सकता हूं यदि यह ब्याज का है।

संपादित करें:
यहाँ एक फ़ंक्शन है जो समूह को एक randomForestवस्तु और वैक्टर के नामों की सूची के साथ दिया गया महत्व देता है । यह var.shareपहले परिभाषित के रूप में उपयोग करता है। मैंने कोई इनपुट जाँच नहीं की है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आप सही चर नामों का उपयोग करें।

group.importance <- function(rf.obj, groups) {
  var.imp <- as.matrix(sapply(groups, function(g) {
    sum(importance(rf.obj, 2)[g, ]*var.share(rf.obj, g))
  }))
  colnames(var.imp) <- "MeanDecreaseGini"
  return(var.imp)
}

उपयोग का उदाहरण:

library(randomForest)                                                          
data(iris)

rf.obj <- randomForest(Species ~ ., data=iris)

groups <- list(Sepal=c("Sepal.Width", "Sepal.Length"), 
               Petal=c("Petal.Width", "Petal.Length"))

group.importance(rf.obj, groups)

>

      MeanDecreaseGini
Sepal         6.187198
Petal        43.913020

यह अतिव्यापी समूहों के लिए भी काम करता है:

overlapping.groups <- list(Sepal=c("Sepal.Width", "Sepal.Length"), 
                           Petal=c("Petal.Width", "Petal.Length"),
                           Width=c("Sepal.Width", "Petal.Width"), 
                           Length=c("Sepal.Length", "Petal.Length"))

group.importance(rf.obj, overlapping.groups)

>

       MeanDecreaseGini
Sepal          6.187198
Petal         43.913020
Width          30.513776
Length        30.386706

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

उस उत्तर के लिए धन्यवाद! दो सवाल, अगर आपके पास एक मिनट है: (1) तब महत्व की गणना की जाती है ... : ब्रेमेन की परिभाषा के संबंध में, मैं वहां "गिनी कमी" हूं , और महत्व घटने का योग होगा, सही ? (2) जंगल में सभी बंटवारे पर औसतन, जिसमें भविष्यवक्ता शामिल है : क्या मैं उस विशेष सुविधा पर एक विभाजन को शामिल करने वाले सभी नोड्स को बदल सकता हूं ? यह सुनिश्चित करने के लिए कि मैं पूरी तरह से समझ रहा हूँ;)
रेमी मेइलिसन

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

4

वर्गों के ऊपर G = योग के रूप में परिभाषित किया गया फ़ंक्शन [pi (1] pi)] वास्तव में एन्ट्रॉपी है, जो एक विभाजन का मूल्यांकन करने का एक और तरीका है। बच्चों के नोड्स और पैरेंट नोड में एन्ट्रापी का अंतर सूचना लाभ है। GINI अशुद्धता समारोह G = 1- योग कक्षाओं पर है [pi ^ 2]।

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