CART का उपयोग करते समय "चर महत्व" को कैसे मापें / रैंक करें? (विशेष रूप से R से {rpart} का उपयोग करते हुए)


27

आरएटीआर (आर) का उपयोग करके एक कार्ट मॉडल (विशेष रूप से वर्गीकरण ट्री) का निर्माण करते समय, यह जानना अक्सर दिलचस्प होता है कि मॉडल के लिए पेश किए गए विभिन्न चर का क्या महत्व है।

इस प्रकार, मेरा प्रश्न है: कार्ट मॉडल में भाग लेने वाले चर के रैंकिंग महत्व को मापने / मापने के लिए क्या सामान्य उपाय मौजूद हैं? और आर का उपयोग करके इसकी गणना कैसे की जा सकती है (उदाहरण के लिए, जब समकक्ष पैकेज का उपयोग करते हुए)

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

set.seed(31431)
n <- 400
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)
x4 <- rnorm(n)
x5 <- rnorm(n)

X <- data.frame(x1,x2,x3,x4,x5)

y <- sample(letters[1:4], n, T)
y <- ifelse(X[,2] < -1 , "b", y)
y <- ifelse(X[,1] < 0 , "a", y)

require(rpart)
fit <- rpart(y~., X)
plot(fit); text(fit)

info.gain.rpart(fit) # your function - telling us on each variable how important it is

(संदर्भों का हमेशा स्वागत है)


यह प्रश्न आँकड़ो से कैसे भिन्न है ।stackexchange.com/questions/5443/… ?
स्टीफन

यह प्रश्न यह जानने के लिए संदर्भित करता है कि आश्रित चर के एक विशेष श्रेणीगत मूल्य के लिए कौन सा भविष्यसूचक प्रासंगिक था। यह प्रश्न अधिक व्यापक (चर महत्व / रैंकिंग है, जिसमें यह पता लगाया जाता है कि यह किस नाममात्र मूल्य पर प्रभाव डालता है)। चूँकि उस प्रश्न का उत्तर नहीं दिया गया था, इसलिए मैंने इसे सामान्य तरीके से इस उम्मीद में वाक्यांश के लायक समझा कि कोई व्यक्ति मदद करने में सक्षम हो सकता है ...
Tal Galili

जवाबों:


42

परिवर्तनीय महत्व को आम तौर पर पूर्वानुमान की सटीकता में कमी के आधार पर गणना की जा सकती है जब ब्याज के पूर्वसूचक को हटा दिया जाता है (क्रमपरिवर्तन तकनीक की तरह, रैंडम फ़ॉरेस्ट में) या नोड अशुद्धता की कमी के कुछ उपाय, लेकिन देखें (1) उपलब्ध विधियाँ। CART का स्पष्ट विकल्प RF का पाठ्यक्रम है ( रैंडम फ़ॉरेस्ट , लेकिन पार्टी भी देखें )। RF के साथ, Gini महत्त्व सूचकांक को परिभाषित किया जाता है क्योंकि जंगल में सभी पेड़ों पर नोड की अशुद्धियों में औसत Gini की कमी होती है (यह इस तथ्य से इस प्रकार है कि किसी दिए गए मूल नोड के लिए Gini अशुद्धता सूचकांक अपने दो के लिए उस माप के मूल्य से बड़ा है बेटी नोड्स, उदाहरण के लिए देखें (2))।

मुझे पता है कि कैरोलिन स्ट्रोब और टकरा गई थी। RFs और CART (जैसे (3-4) में सशर्त महत्व पर अनुकार और प्रायोगिक अध्ययनों में बहुत योगदान दिया है, (3-4), लेकिन मशीन लर्निंग में कई अन्य, या उनके थीसिस, सांख्यिकीय मुद्दे - विश्वसनीय विभाजन चयन और चर महत्व के उपाय )।

मेरी जानकारी के लिए, कैरेट पैकेज (5) केवल प्रतिगमन मामले (यानी, मतलब चुकता त्रुटि) के लिए एक हानि समारोह मानता है। शायद इसे निकट भविष्य में जोड़ा जाएगा (वैसे भी, k-NN द्वारा वर्गीकरण मामले के साथ एक उदाहरण ऑन-लाइन मदद में उपलब्ध है dotPlot)।

हालांकि, नोएल एम ओ'बॉय को कार्ट में चर महत्व के लिए कुछ आर कोड लगता है ।

संदर्भ

  1. सैंड्री और ज़ुकोलोटो। वर्गीकरण पेड़ों में गिन्नी चर महत्व माप के लिए एक पूर्वाग्रह सुधार एल्गोरिथ्म । 2008
  2. Izenman। आधुनिक बहुभिन्नरूपी सांख्यिकीय तकनीक । स्प्रिंगर 2008
  3. स्ट्रोबल, होथोर्न और ज़िलिस। पार्टी शुरु! आर जर्नल 2009 1/2
  4. स्ट्रोबल, बोलेस्टिक्स, कनीब, ऑगस्टिन और ज़िलिस। यादृच्छिक जंगलों के लिए सशर्त चर महत्वबीएमसी जैव सूचना विज्ञान 2008, 9: 307
  5. कुहन। आर में कैरिट पैकेज का उपयोग करके प्रिडिक्टिव मॉडल का निर्माणJSS 2008 28 (5)

1
वास्तव में - इससे कहीं अधिक वोटों के हकदार हैं।
मैट पार्कर

महान जवाब के लिए +1। और बेतरतीबियों के लिए अपडेट (अपने आप की तरह) यादृच्छिक रूपimportance() में सबसे अच्छा होता है, वैयक्तिक चर का अर्थ होता है, जो कि अशुद्धि में कमी और मतलब गिनी में कमी के साथ होता है।
ज़ुर्बर्ब

3

निम्न कार्य (कैरट पैकेज से) का उपयोग राप्ट ट्री में चर महत्व के मूल्यांकन के लिए किया जा सकता है। मैंने कैरेट फ़ंक्शन में एक बग को ठीक किया जब यह पेड़ में केवल रूट नोड था।

varImp <- function(object, surrogates = FALSE, competes = TRUE, ...)
  {
tmp <- rownames(object$splits)

 allVars <- colnames(attributes(object$terms)$factors)
if(is.null(tmp))
  {
  out<-NULL
    zeros <- data.frame(x = rep(0, length(allVars)),
                        Variable = allVars)
    out <- rbind(out, zeros)
  }

else {

rownames(object$splits) <- 1:nrow(object$splits)
splits <- data.frame(object$splits)
    splits$var <- tmp
splits$type <- ""

frame <- as.data.frame(object$frame)
    index <- 0
    for(i in 1:nrow(frame))
      {
        if(frame$var[i] != "<leaf>")
          {
            index <- index + 1
            splits$type[index] <- "primary"
            if(frame$ncompete[i] > 0)
              {
                for(j in 1:frame$ncompete[i])
                  {
                    index <- index + 1
                    splits$type[index] <- "competing"
                  }
              }
            if(frame$nsurrogate[i] > 0)
              {
                for(j in 1:frame$nsurrogate[i])
                  {
                    index <- index + 1
                    splits$type[index] <- "surrogate"
                  }
              }
          }
      }
    splits$var <- factor(as.character(splits$var))
    if(!surrogates) splits <- subset(splits, type != "surrogate")
    if(!competes) splits <- subset(splits, type != "competing")
    out <- aggregate(splits$improve,
                 list(Variable = splits$var),
                 sum,
                 na.rm = TRUE)

allVars <- colnames(attributes(object$terms)$factors)
if(!all(allVars %in% out$Variable))
      {
        missingVars <- allVars[!(allVars %in% out$Variable)]
        zeros <- data.frame(x = rep(0, length(missingVars)),
                            Variable = missingVars)
        out <- rbind(out, zeros)
      }
    }
    out2 <- data.frame(Overall = out$x)
rownames(out2) <- out$Variable
out2

}

निम्नलिखित आर कोड एक समकक्ष पेड़ "फिट" के लिए महत्वपूर्ण स्कोर का उत्पादन करेगा

 varImp(fit)

धन्यवाद। क्या आपने मैक्स को बग की सूचना दी थी? (कार्यवाहक पैकेज का
अनुचर

1

मुझे लगता है कि chl ने पहले भाग का उत्तर दिया है:

कार्ट मॉडल में भाग लेने वाले चर के रैंकिंग महत्व को मापने / मापने के लिए क्या सामान्य उपाय मौजूद हैं?

आपके प्रश्न के दूसरे भाग के संबंध में:

और आर का उपयोग करके इसकी गणना कैसे की जा सकती है (उदाहरण के लिए, जब समकक्ष पैकेज का उपयोग करते हुए)

आप सारांश (फिट) का उपयोग करके समकक्ष का उपयोग करके चर महत्व पा सकते हैं। यह कई अन्य चीजों के बीच चर महत्व का उत्पादन करता है। आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: https://cran.r-project.org/web/packages/rpart/rpart.pdf । पेज 25 का संदर्भ लें।


0

names(result) दिखाता है variable.importance

result$variable.importance मदद करनी चाहिए?


3
मेरा मानना ​​है कि प्रश्न का एक विशेष विधि के लिए आर में उपलब्ध लोगों को मुद्रित करने की तुलना में चर महत्व के कुछ उपायों के फायदे या लोकप्रियता के साथ अधिक है।
च्ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.