วิธีวัด / จัดอันดับ“ ความสำคัญของตัวแปร” เมื่อใช้ CART (โดยเฉพาะการใช้ {rpart} จาก R)


27

เมื่อสร้างโมเดล CART (โดยเฉพาะแผนผังการจำแนกหมวดหมู่) โดยใช้ rpart (ใน R) มันมักจะน่าสนใจที่จะรู้ว่าอะไรคือความสำคัญของตัวแปรต่างๆที่นำมาใช้กับโมเดล

ดังนั้นคำถามของฉันคือ: มีมาตรการทั่วไปสำหรับการจัดอันดับ / การวัดความสำคัญของตัวแปรของตัวแปรที่มีส่วนร่วมในรูปแบบ CART อย่างไร และสิ่งนี้จะคำนวณได้อย่างไรโดยใช้ R (ตัวอย่างเช่นเมื่อใช้แพ็คเกจ rpart)

ตัวอย่างเช่นต่อไปนี้เป็นรหัสจำลองสร้างขึ้นเพื่อให้คุณแสดงโซลูชันของคุณ ตัวอย่างนี้มีโครงสร้างเพื่อให้ชัดเจนว่าตัวแปร 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

(ยินดีรับการอ้างอิงเสมอ)


คำถามนี้แตกต่างจากstats.stackexchange.com/questions/5443/อย่างไร?
steffen

คำถามนั้นหมายถึงการรู้ว่าตัวทำนายใดที่เกี่ยวข้องกับค่าหมวดหมู่เฉพาะของตัวแปรตาม คำถามนี้กว้างขึ้น (ความสำคัญของตัวแปร / การจัดอันดับโดยไม่มีการตรวจพบว่ามีผลกระทบต่อมูลค่าเล็กน้อย) ตั้งแต่คำถามที่ไม่ได้รับคำตอบผมคิดว่ามันคุ้มค่าที่จะวลีมันในทางที่กว้างขึ้นในหวังว่าบางคนอาจจะสามารถช่วยให้ ...
Tal Galili

คำตอบ:


42

ตัวแปรที่มีความสำคัญโดยทั่วไปอาจคำนวณตามการลดลงของความแม่นยำในการทำนายที่สอดคล้องกันเมื่อตัวทำนายความสนใจถูกลบ (ด้วยเทคนิคการเรียงสับเปลี่ยนเช่นใน Random Forest) หรือการวัดการลดลงของโหนดปนเปื้อน แต่ดู (1) สำหรับภาพรวมของ วิธีการที่ใช้ได้ ทางเลือกที่ชัดเจนสำหรับ CART คือ RF แน่นอน ( สุ่มป่าไม้แต่ดูงานปาร์ตี้ด้วย ) ด้วย RF ดัชนีความสำคัญของ Gini ถูกกำหนดให้เป็นค่าเฉลี่ยของ Gini ที่ลดลงในการปนเปื้อนของโหนดเหนือต้นไม้ทั้งหมดในป่า (ตามมาจากข้อเท็จจริงที่ว่าดัชนีความไม่บริสุทธิ์ของ Gini สำหรับโหนดหลักที่กำหนดนั้นมีขนาดใหญ่กว่าค่าของการวัดนั้น โหนดลูกสาวดูเช่น (2))

ฉันรู้ว่า Carolin Strobl และ coll มีส่วนร่วมในการจำลองและการศึกษาทดลองเกี่ยวกับความสำคัญของตัวแปร (เงื่อนไข) ใน RFs และ CARTs (เช่น (3-4)) แต่มีอีกหลายคนหรือวิทยานิพนธ์ของเธอประเด็นสถิติในการเรียนรู้ของเครื่อง - ต่อการเลือกแยกที่เชื่อถือได้และ มาตรการความสำคัญของตัวแปร )

ตามความรู้ของฉันชุดคาเร็ต (5) พิจารณาเฉพาะฟังก์ชันการสูญเสียสำหรับกรณีการถดถอย (เช่นหมายถึงข้อผิดพลาดกำลังสอง) บางทีมันอาจจะถูกเพิ่มเข้ามาในอนาคตอันใกล้ (อย่างไรก็ตามตัวอย่างที่มีกรณีการจำแนกประเภทโดย k-NN นั้นมีอยู่ในวิธีใช้แบบออนไลน์สำหรับdotPlot)

อย่างไรก็ตามประสานเสียง M O'Boyle ดูเหมือนว่าจะมีรหัส R บางอย่างสำหรับความสำคัญของตัวแปรในรถเข็นสินค้า

อ้างอิง

  1. Sandri และ Zuccolotto ขั้นตอนวิธีการแก้ไขอคติสำหรับตัวชี้วัดที่สำคัญ Gini ตัวแปรในต้นไม้การจัดหมวดหมู่ 2008
  2. Izenman เทคนิคที่ทันสมัยหลายตัวแปรทางสถิติ Springer 2008
  3. Strobl, Hothorn และ Zeilis ปาร์ตี้บน! . R Journal 2009 1/2
  4. Strobl, Boulesteix, Kneib, Augustin และ Zeilis ความสำคัญของตัวแปรเงื่อนไขป่าสุ่ม BMC ชีวสารสนเทศศาสตร์ 2008, 9: 307
  5. Kuhn การสร้างแบบจำลองการทำนายใน R โดยใช้ชุดคาเร็JSS 2008 28 (5)

1
จริง ๆ - สมควรได้รับคะแนนมากกว่าที่มี
แมตต์ปาร์กเกอร์

+1 สำหรับคำตอบที่ดี และอัปเดตสำหรับผู้มาสาย (เช่นตัวฉันเอง) importance()ในrandomForestทำให้ความสำคัญของตัวแปรแต่ละตัวมีค่าเฉลี่ยลดลงอย่างแม่นยำและลดค่า gini
Zhubarb

3

ฟังก์ชันต่อไปนี้ (จากแพ็คเกจ Caret) สามารถใช้สำหรับการประเมินความสำคัญของตัวแปรในต้นไม้ rpart ฉันแก้ไขข้อผิดพลาดในฟังก์ชั่น Caret เมื่อโหนดรากนี้เท่านั้นในต้นไม้

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

}

รหัส r ต่อไปนี้จะให้คะแนนความสำคัญสำหรับต้นไม้ rpart "พอดี"

 varImp(fit)

ขอบคุณ คุณรายงานข้อผิดพลาดให้กับ Max หรือไม่ (ผู้ดูแลชุดบรรจุคา
เร็

1

ฉันคิดว่า chl มีคำตอบแรกสวยมาก:

มีมาตรการทั่วไปอะไรบ้างสำหรับการจัดอันดับ / การวัดความสำคัญของตัวแปรของตัวแปรที่มีส่วนร่วมในโมเดล CART

ด้วยความเคารพในส่วนที่สองของคำถามของคุณ:

และสิ่งนี้จะคำนวณได้อย่างไรโดยใช้ R (ตัวอย่างเช่นเมื่อใช้แพ็คเกจ rpart)

คุณสามารถค้นหาความสำคัญของตัวแปรโดยใช้ rpart โดยใช้การสรุป (พอดี) สิ่งนี้แสดงถึงความสำคัญของตัวแปรท่ามกลางสิ่งอื่น ๆ คุณสามารถอ่านเพิ่มเติมได้ที่นี่: https://cran.r-project.org/web/packages/rpart/rpart.pdf อ้างอิงหน้า 25


0

names(result) แสดงให้เห็นว่า variable.importance

result$variable.importance ควรช่วยอะไร


3
ฉันเชื่อว่าคำถามเกี่ยวข้องกับความได้เปรียบหรือความนิยมของการวัดความสำคัญของตัวแปรมากกว่าวิธีการพิมพ์สิ่งที่มีอยู่ใน R สำหรับวิธีการเฉพาะ
chl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.