ได้รับความรู้จากป่าสุ่ม


127

ป่าสุ่มถือเป็นกล่องดำ แต่เมื่อเร็ว ๆ นี้ฉันกำลังคิดว่าจะได้ความรู้อะไรจากป่าสุ่ม?

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

เพิ่ม 23.01.2012
แรงจูงใจ

ฉันต้องการใช้ความรู้นี้เพื่อปรับปรุงแบบจำลอง logit ฉันคิดว่า (หรืออย่างน้อยก็หวังว่า) เป็นไปได้ที่จะพบปฏิสัมพันธ์และความไม่เป็นเชิงเส้นที่ถูกมองข้าม


1
การใช้ R คุณสามารถสร้างDotchart ที่มีความสำคัญของตัวแปรตามที่วัดโดยป่าสุ่ม
George Dontas

1
หัวข้อที่เกี่ยวข้องกับวิธีการคำนวณการวัดความสำคัญของตัวแปรสำหรับการเพิ่มความลาดชันของต้นไม้สุ่ม
Antoine

ฉันรู้ว่านี่อาจจะสายเกินไป แต่ถ้าคุณแค่ต้องการปรับปรุงแบบจำลอง logit ทำไมคุณไม่ใช้การถดถอยแบบโลจิสติกหลังการทำแบบโลสโคป? คุณสามารถปรับรูปแบบใหม่โดยใช้สัมประสิทธิ์ที่เลือกหลังจากการเลือกโดยไม่มีการลงโทษ / การหดตัว คุณจะต้องปรับแต่งขั้นตอนการปรับแต่งเล็กน้อย แต่นี่เป็นตัวเลือกที่ตรงกว่าที่คุณต้องการ
ilprincipe

คำตอบ:


122

ป่าสุ่มนั้นไม่ค่อยมีกล่องดำ พวกมันอยู่บนพื้นฐานของต้นไม้ตัดสินใจซึ่งง่ายต่อการตีความ:

#Setup a binary classification problem
require(randomForest)
data(iris)
set.seed(1)
dat <- iris
dat$Species <- factor(ifelse(dat$Species=='virginica','virginica','other'))
trainrows <- runif(nrow(dat)) > 0.3
train <- dat[trainrows,]
test <- dat[!trainrows,]

#Build a decision tree
require(rpart)
model.rpart <- rpart(Species~., train)

ผลลัพธ์นี้ในโครงสร้างการตัดสินใจที่เรียบง่าย:

> model.rpart
n= 111 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 111 35 other (0.68468468 0.31531532)  
  2) Petal.Length< 4.95 77  3 other (0.96103896 0.03896104) *
  3) Petal.Length>=4.95 34  2 virginica (0.05882353 0.94117647) *

ถ้า Petal.Length <4.95 ต้นไม้นี้จัดประเภทการสังเกตเป็น "อื่น ๆ " ถ้ามันมากกว่า 4.95 มันจัดประเภทการสังเกตว่า "virginica" ฟอเรสต์แบบสุ่มนั้นเป็นชุดของต้นไม้จำนวนมากที่แต่ละต้นได้รับการฝึกฝนเกี่ยวกับชุดย่อยของข้อมูล ต้นไม้แต่ละต้นนั้น "โหวต" ในการจำแนกขั้นสุดท้ายของการสังเกตแต่ละครั้ง

model.rf <- randomForest(Species~., train, ntree=25, proximity=TRUE, importance=TRUE, nodesize=5)
> getTree(model.rf, k=1, labelVar=TRUE)
  left daughter right daughter    split var split point status prediction
1             2              3  Petal.Width        1.70      1       <NA>
2             4              5 Petal.Length        4.95      1       <NA>
3             6              7 Petal.Length        4.95      1       <NA>
4             0              0         <NA>        0.00     -1      other
5             0              0         <NA>        0.00     -1  virginica
6             0              0         <NA>        0.00     -1      other
7             0              0         <NA>        0.00     -1  virginica

คุณสามารถดึงต้นไม้แต่ละต้นออกมาจาก rf และดูโครงสร้างของต้นไม้ รูปแบบนั้นแตกต่างจากrpartแบบจำลองเล็กน้อยแต่คุณสามารถตรวจสอบต้นไม้แต่ละต้นได้ถ้าคุณต้องการและดูว่ามันเป็นแบบจำลองข้อมูลอย่างไร

นอกจากนี้ยังไม่มีรูปแบบที่เป็นกล่องดำอย่างแท้จริงเพราะคุณสามารถตรวจสอบการตอบสนองที่คาดการณ์ไว้กับการตอบสนองที่แท้จริงสำหรับแต่ละตัวแปรในชุดข้อมูล นี่เป็นความคิดที่ดีไม่ว่าคุณจะสร้างโมเดลประเภทใด:

library(ggplot2)
pSpecies <- predict(model.rf,test,'vote')[,2]
plotData <- lapply(names(test[,1:4]), function(x){
  out <- data.frame(
    var = x,
    type = c(rep('Actual',nrow(test)),rep('Predicted',nrow(test))),
    value = c(test[,x],test[,x]),
    species = c(as.numeric(test$Species)-1,pSpecies)
    )
  out$value <- out$value-min(out$value) #Normalize to [0,1]
  out$value <- out$value/max(out$value)
  out
})
plotData <- do.call(rbind,plotData)
qplot(value, species, data=plotData, facets = type ~ var, geom='smooth', span = 0.5)

พล็อต

ฉันปรับตัวแปรตามปกติ (ความยาวและความกว้างของกลีบดอกและกลีบดอก) เป็นช่วง 0-1 การตอบสนองคือ 0-1 โดยที่ 0 คืออื่นและ 1 คือ virginica อย่างที่คุณเห็นป่าสุ่มเป็นแบบอย่างที่ดีแม้ในชุดทดสอบ

นอกจากนี้ฟอเรสต์แบบสุ่มจะคำนวณการวัดความสำคัญของตัวแปรต่าง ๆ ซึ่งสามารถให้ข้อมูลได้มาก:

> importance(model.rf, type=1)
             MeanDecreaseAccuracy
Sepal.Length           0.28567162
Sepal.Width           -0.08584199
Petal.Length           0.64705819
Petal.Width            0.58176828

ตารางนี้แสดงให้เห็นว่าการลบตัวแปรแต่ละตัวจะช่วยลดความแม่นยำของแบบจำลองได้มากน้อยเพียงใด ในที่สุดก็มีแปลงอื่น ๆ อีกมากมายที่คุณสามารถสร้างจากโมเดลฟอเรสต์แบบสุ่มเพื่อดูว่าเกิดอะไรขึ้นในกล่องดำ:

plot(model.rf)
plot(margin(model.rf)) 
MDSplot(model.rf, iris$Species, k=5)
plot(outlier(model.rf), type="h", col=c("red", "green", "blue")[as.numeric(dat$Species)])

คุณสามารถดูไฟล์วิธีใช้สำหรับแต่ละฟังก์ชั่นเหล่านี้เพื่อรับทราบข้อมูลที่ดีขึ้นเกี่ยวกับสิ่งที่แสดง


6
ขอบคุณสำหรับคำตอบมีข้อมูลที่มีประโยชน์มากมาย แต่มันไม่ตรงกับที่ฉันต้องการ บางทีฉันอาจต้องอธิบายแรงจูงใจที่อยู่เบื้องหลังคำถามนี้ให้ดีขึ้น ฉันต้องการใช้ฟอเรสต์แบบสุ่มเพื่อปรับปรุงโมเดล logit โดยการปรับปรุงฉันหมายถึงการเพิ่มการโต้ตอบหรือใช้การแปลงแบบไม่เชิงเส้น
Tomek Tarczynski

@TomekTarczynski เป็นปัญหาที่น่าสนใจและคล้ายกับที่ฉันกำลังเผชิญอยู่ในขณะนี้ ฉันถือว่า "logit model" คุณหมายถึงการถดถอยโลจิสติกหรืออะไรที่คล้ายกัน? ฉันใช้ lasso logistic regression (จากแพ็คเกจ glmnet R) เพื่อเลือกทำนายจากโมเดลที่มีปฏิสัมพันธ์ระหว่างตัวแปรทุกคู่ ฉันยังไม่ได้เพิ่มคำศัพท์ไม่เชิงเส้นใด ๆ - แต่ในหลักการที่ควรจะเป็นไปได้เช่นกัน ปัญหาเดียวที่ฉันเดาคือการตัดสินใจว่าจะลองคำที่ไม่เชิงเส้น (เงื่อนไขพหุนามการแปลงเลขชี้กำลัง ฯลฯ ) นอกจากนี้ฉันไม่ได้รับการโต้ตอบที่สูงขึ้นใด ๆ แต่ก็ง่ายเช่นกัน
แอนน์ซี

2
@Tomek คุณไม่ได้อะไรจากคำตอบนี้ หากคุณกำลังใช้แพ็คเกจสุ่มป่าไม้ใน R แปลงที่ Zach อธิบายควรมีประโยชน์มาก โดยเฉพาะคุณสามารถใช้ varImpPlot สำหรับการเลือกคุณลักษณะในโมเดล logit ของคุณและ partialPlot เพื่อประเมินชนิดของการแปลงเพื่อลองใช้ตัวทำนายอย่างต่อเนื่องในโมเดล Logit ฉันขอแนะนำให้ใช้พล็อตหลังเพื่อกำหนดว่ามีความสัมพันธ์แบบไม่เชิงเส้นระหว่างตัวทำนายและการตอบสนองอย่างไรจากนั้นให้คุณทำการแปลงนั้นอย่างชัดเจนหรือใช้เส้นโค้งบนตัวแปรนั้น
B_Miner

2
@b_miner - แค่เดา ​​แต่ดูเหมือนว่า tomek จะถามว่าจะหาปฏิสัมพันธ์ที่ไม่เป็นเชิงเส้นระหว่างตัวแปรได้อย่างไรเนื่องจากการถดถอยโลจิสติกได้จับความสัมพันธ์เชิงเส้นแล้ว
rm999

@ rm999 คุณจะกำหนดปฏิสัมพันธ์ที่ไม่ใช่เชิงเส้นในโมเดล logit ได้อย่างไร คำศัพท์ที่สร้างขึ้นระหว่างตัวแปรที่แปลงแล้ว?
B_Miner

52

ก่อนหน้านี้ฉันต้องปรับโมเดล RF ให้เหมาะสมกับนักเคมีบางคนใน บริษัท ของฉัน ฉันใช้เวลาค่อนข้างนานในการลองใช้เทคนิคการสร้างภาพข้อมูลที่แตกต่างกัน ในระหว่างกระบวนการฉันบังเอิญพบกับเทคนิคใหม่บางอย่างที่ฉันใส่ลงในแพ็คเกจ R ( forestFloor ) โดยเฉพาะสำหรับการสร้างภาพป่าแบบสุ่ม

วิธีการดั้งเดิมคือแผนการพึ่งพาบางส่วนที่ได้รับการสนับสนุนโดย: Rminer (การวิเคราะห์ความไวของฐานข้อมูลเป็นการรวมตัวใหม่ของการพึ่งพาบางส่วน) หรือ partialPlot ในแพคเกจrandomForest ฉันพบว่าiceBOXแพ็คเกจพึ่งพาบางส่วนเป็นวิธีที่สวยงามในการค้นพบการโต้ตอบ ยังไม่ได้ใช้แพ็คเกจ edarfแต่ดูเหมือนว่าจะมีการสร้างภาพข้อมูลบางอย่างที่เฉพาะสำหรับ RF ggRandomForestแพคเกจยังมีชุดใหญ่ของการสร้างภาพที่มีประโยชน์

ปัจจุบัน ForestFloor รองรับวัตถุแบบสุ่มป่าไม้ (รองรับการใช้งาน RF อื่น ๆ ที่กำลังจะมา) นอกจากนี้คุณสามารถคำนวณการมีส่วนร่วมของคุณลักษณะสำหรับต้นไม้ที่มีการไล่ระดับสีเนื่องจากต้นไม้เหล่านี้หลังจากการฝึกอบรมไม่แตกต่างจากต้นไม้ป่าแบบสุ่มมากนัก ดังนั้น forestFloor สามารถรองรับ XGBoost ได้ในอนาคต พล็อตพึ่งพาบางส่วนเป็นรูปแบบที่ไม่เปลี่ยนแปลงอย่างสมบูรณ์

แพคเกจทั้งหมดมีเหมือนกันเพื่อให้เห็นภาพโครงสร้างการทำแผนที่ทางเรขาคณิตของแบบจำลองจากพื้นที่คุณลักษณะไปยังพื้นที่เป้าหมาย เส้นโค้งไซน์ y = sin (x) จะเป็นการจับคู่จาก x ถึง y และสามารถลงจุดในแบบ 2 มิติ ในการลงจุดการทำแผนที่ RF โดยตรงมักจะต้องใช้มิติข้อมูลมากเกินไป แต่โครงสร้างการทำแผนที่โดยรวมสามารถฉายตัดหรือแยกย่อยเช่นโครงสร้างการทำแผนที่ทั้งหมดจะถูกต้มลงในลำดับของแปลง 2 มิติ หากโมเดล RF ของคุณบันทึกเอฟเฟกต์หลักเท่านั้นและไม่มีการโต้ตอบระหว่างตัวแปรวิธีการสร้างภาพแบบคลาสสิกจะทำได้ดี จากนั้นคุณสามารถทำให้โครงสร้างโมเดลของคุณง่ายขึ้นเช่นนี้y=F(X)f1(x1)+f2(x2)+...+fd(xd). จากนั้นแต่ละฟังก์ชั่นบางส่วนโดยแต่ละตัวแปรสามารถมองเห็นได้เช่นเดียวกับเส้นโค้งไซน์ หากโมเดล RF ของคุณบันทึกการโต้ตอบที่มีขนาดใหญ่แสดงว่าเป็นปัญหามากขึ้น ชิ้นส่วนของโครงสร้าง 3 มิติสามารถมองเห็นการโต้ตอบระหว่างคุณลักษณะสองอย่างกับเอาต์พุต ปัญหาคือการรู้ว่าการรวมกันของคุณสมบัติที่จะเห็นภาพ ( iceBOXจะแก้ไขปัญหานี้) นอกจากนี้ยังไม่ง่ายที่จะบอกว่าการโต้ตอบแฝงอื่น ๆ ยังคงไม่ได้รับการพิจารณา

ในบทความนี้ฉันใช้ฟอเรสต์ฟอเรสต์รุ่นแรกเพื่ออธิบายว่าความสัมพันธ์ทางชีวเคมีที่เกิดขึ้นจริงของแบบจำลอง RF ขนาดเล็กมากนั้นถูกจับได้ และในบทความนี้เราจะอธิบายอย่างละเอียดการสร้างภาพของผลงานสารคดีป่าชั้นภาพประกอบสุ่มป่า

ฉันได้วางตัวอย่างจำลองจากแพ็คเกจ ForestFloor ซึ่งฉันแสดงวิธีเปิดเผยฟังก์ชันที่ซ่อนอยู่จำลองเสียงรบกวนy=x12+sin(x2π)+2x3x4+

#1 - Regression example:
set.seed(1234)
library(forestFloor)
library(randomForest)

#simulate data y = x1^2+sin(x2*pi)+x3*x4 + noise
obs = 5000 #how many observations/samples
vars = 6   #how many variables/features
#create 6 normal distr. uncorr. variables
X = data.frame(replicate(vars,rnorm(obs)))
#create target by hidden function
Y = with(X, X1^2 + sin(X2*pi) + 2 * X3 * X4 + 0.5 * rnorm(obs)) 

#grow a forest
rfo = randomForest(
  X, #features, data.frame or matrix. Recommended to name columns.
  Y, #targets, vector of integers or floats
  keep.inbag = TRUE,  # mandatory,
  importance = TRUE,  # recommended, else ordering by giniImpurity (unstable)
  sampsize = 1500 ,   # optional, reduce tree sizes to compute faster
  ntree = if(interactive()) 500 else 50 #speedup CRAN testing
)

#compute forestFloor object, often only 5-10% time of growing forest
ff = forestFloor(
  rf.fit = rfo,       # mandatory
  X = X,              # mandatory
  calc_np = FALSE,    # TRUE or FALSE both works, makes no difference
  binary_reg = FALSE  # takes no effect here when rfo$type="regression"
)


#plot partial functions of most important variables first
plot(ff,                       # forestFloor object
     plot_seq = 1:6,           # optional sequence of features to plot
     orderByImportance=TRUE    # if TRUE index sequence by importance, else by X column  
)

ป้อนคำอธิบายรูปภาพที่นี่

#Non interacting features are well displayed, whereas X3 and X4 are not
#by applying color gradient, interactions reveal themself 
#also a k-nearest neighbor fit is applied to evaluate goodness-of-fit
Col=fcol(ff,3,orderByImportance=FALSE) #create color gradient see help(fcol)
plot(ff,col=Col,plot_GOF=TRUE) 

ป้อนคำอธิบายรูปภาพที่นี่

#feature contributions of X3 and X4 are well explained in the context of X3 and X4
# as GOF R^2>.8


show3d(ff,3:4,col=Col,plot_GOF=TRUE,orderByImportance=FALSE)

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

สุดท้ายรหัสสำหรับแปลงพึ่งพาบางส่วนที่เขียนโดย A.Liaw อธิบายโดย J.Friedman ซึ่งทำได้ดีสำหรับเอฟเฟกต์หลัก

par(mfrow=c(2,3))
for(i in 1:6) partialPlot(rfo,X,x.var=names(X)[i])

ป้อนคำอธิบายรูปภาพที่นี่


ฉันอ้างถึงก่อนหน้านี้ว่าการมีส่วนร่วมของคุณลักษณะสามารถคำนวณได้สำหรับต้นไม้ที่ได้รับการปรับปรุง ฉันเขียนอัลกอริธึมการทดสอบและเป็นไปได้ น่าเสียดายที่การมีส่วนร่วมของคุณสมบัติสำหรับต้นไม้ที่ได้รับการส่งเสริมไม่แสดงคุณสมบัติที่เป็นประโยชน์เช่นเดียวกับต้นไม้ที่มีถุง เอฟเฟ็กต์ของฟีเจอร์หนึ่งมีแนวโน้มที่จะกระจายไปทั่วการมีส่วนร่วมของฟีเจอร์ทั้งหมดดังนั้นการสร้างภาพข้อมูลจึงค่อนข้างสับสน
Soren Havelund Welling

Oups! ฉันพบข้อบกพร่องในอัลกอริทึมการทดสอบซึ่งทำให้ปัญหาทั้งหมดหายไป forestFloor สามารถอัปเดตให้ทำงานได้ดีสำหรับต้นไม้ที่มีการไล่ระดับสี
Soren Havelund Welling

3
forestFloor ได้รับการปรับปรุงเพื่อยอมรับวัตถุ gbm หรือไม่
Misha

จนถึงตอนนี้ฉันได้ทำการติดตั้งแบบย้อนกลับซึ่งจะนำการใช้งานของฟอเรสต์แบบสุ่มไปใช้กับเครื่องเร่งการไล่ระดับสีที่ทำงานได้อย่างสมบูรณ์และกำหนดวิธีการบางอย่างเพื่อคำนวณการสนับสนุนคุณลักษณะ ฉันคิดว่าการติดตั้งใช้งานจริงนั้นมีประสิทธิภาพพอสมควร คุณสามารถค้นหารหัสได้ที่นี่: github.com/sorhawell/forestFloor/blob/master/inst/examples/ …
Soren Havelund Welling

เพื่อให้พอร์ตทั้งหมดนั้นใช้งานได้ยาก :) การใช้งานนี้ทำได้ในไม่กี่บรรทัด
Soren Havelund Welling

24

เพื่อเสริมการตอบสนองที่ดีเหล่านี้ฉันจะพูดถึงการใช้ต้นไม้เพิ่มระดับความลาดชัน (เช่นแพคเกจ GBM ใน R ) ใน R ฉันชอบสิ่งนี้กับฟอเรสต์แบบสุ่มเพราะอนุญาตให้ใช้ค่าที่หายไปได้เมื่อเปรียบเทียบกับ RandomForest ที่จำเป็นต้องใส่ข้อมูล มีความสำคัญที่ผันแปรได้และแปลงบางส่วน (เช่นในป่าสุ่ม) เพื่อช่วยในการเลือกคุณสมบัติและการสำรวจการแปลงสภาพแบบไม่เชิงเส้นในรูปแบบ logit ของคุณ นอกจากนี้การโต้ตอบตัวแปรจะได้รับการแก้ไขด้วย H-statistic ( interact.gbm) ของ Friedman พร้อมการอ้างอิงที่ให้ไว้J.H. Friedman and B.E. Popescu (2005). “Predictive Learning via Rule Ensembles.” Section 8.1ดังนี้ เชิงพาณิชย์รุ่นที่เรียกว่า TreeNet สามารถใช้ได้จากระบบซอลและการนำเสนอวิดีโอนี้พูดถึงการใช้เวลาของพวกเขาในการทำงานร่วมกันประมาณค่าตัวแปรวิดีโอ


2
ฉันเห็นด้วย GBMs เป็นขั้นตอนต่อไปตรรกะจากป่าสุ่ม
Zach

@B_miner: เยี่ยมมาก! ฉันไม่รู้วิธี แต่ฉันมองข้าม GBM ดูเหมือนว่าการใช้ GBM นั้นง่ายต่อการตรวจจับการมีปฏิสัมพันธ์และไม่เป็นเชิงเส้น
Tomek Tarczynski

15

คำตอบล่าช้า แต่ฉันเจอแพ็คเกจ R ล่าสุดforestFloor(2015) ที่ช่วยให้คุณทำงาน "unblackboxing" ในแบบอัตโนมัติ มันดูมีแนวโน้มมาก!

library(forestFloor)
library(randomForest)
#simulate data
obs=1000
vars = 18
X = data.frame(replicate(vars,rnorm(obs)))
Y = with(X, X1^2 + sin(X2*pi) + 2 * X3 * X4 + 1 * rnorm(obs))
#grow a forest, remeber to include inbag
rfo=randomForest(X,Y,keep.inbag = TRUE,sampsize=250,ntree=50)
#compute topology
ff = forestFloor(rfo,X)
#ggPlotForestFloor(ff,1:9)
plot(ff,1:9,col=fcol(ff))

สร้างแปลงต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ยังมีการสร้างภาพสามมิติหากคุณกำลังมองหาการโต้ตอบ


4
ฉันลบการสนับสนุน ggplot2 แทนที่จะลองบรรทัดสุดท้ายเช่น: plot (ff, 1: 9, col = fcol (ff, 1: 4))
Soren Havelund Welling

9

ตามที่กล่าวไว้โดย Zach วิธีหนึ่งในการทำความเข้าใจกับแบบจำลองคือการวางแผนการตอบสนองเมื่อตัวทำนายแตกต่างกันไป คุณสามารถทำสิ่งนี้ได้อย่างง่ายดายสำหรับโมเดล "any" ด้วยแพ็กเกจplotmo R ตัวอย่างเช่น

library(randomForest)
data <- iris
data$Species <- factor(ifelse(data$Species=='virginica','virginica','other'))
mod <- randomForest(Species~Sepal.Length+Sepal.Width, data=data)
library(plotmo)
plotmo(mod, type="prob")

ซึ่งจะช่วยให้

พล็อต

สิ่งนี้จะเปลี่ยนแปลงตัวแปรหนึ่งขณะที่ถือตัวแปรอื่น ๆ ที่ค่ามัธยฐาน สำหรับพล็อตการโต้ตอบมันเปลี่ยนสองตัวแปร (หมายเหตุเพิ่มพฤศจิกายน 2016: plotmoตอนนี้ยังรองรับแปลงบางส่วน)

ตัวอย่างข้างต้นใช้ตัวแปรเพียงสองตัวเท่านั้น แบบจำลองที่ซับซ้อนมากขึ้นสามารถมองเห็นได้ในแบบทีละชิ้นโดยดูที่ตัวแปรหนึ่งหรือสองตัวในแต่ละครั้ง เนื่องจากตัวแปร "อื่น ๆ " จัดขึ้นที่ค่ามัธยฐานของพวกเขาสิ่งนี้แสดงให้เห็นเพียงส่วนของข้อมูล แต่ยังคงมีประโยชน์ ตัวอย่างบางส่วนอยู่ในบทความสำหรับแพคเกจ plotmo ตัวอย่างอื่น ๆ ที่อยู่ในบทที่ 10 ของพล็อตต้นไม้ rpart กับแพคเกจ


4

ฉันสนใจคำถามประเภทนี้มาก ฉันคิดว่ามีข้อมูลจำนวนมากที่เราสามารถออกจากป่าสุ่ม

เกี่ยวกับปฏิสัมพันธ์ดูเหมือนBreiman และ Cultierได้ลองดูแล้วโดยเฉพาะการจำแนก RFs

ตามความรู้ของฉันสิ่งนี้ไม่ได้ถูกนำไปใช้ในแพ็คเกจสุ่มป่าไม้อาร์ อาจเป็นเพราะอาจไม่ง่ายและเนื่องจากความหมายของ "การโต้ตอบตัวแปร" นั้นขึ้นอยู่กับปัญหาของคุณ

เกี่ยวกับความไม่เชิงเส้นฉันไม่แน่ใจว่าสิ่งที่คุณกำลังมองหาป่าการถดถอยถูกนำมาใช้สำหรับปัญหาการถดถอยแบบไม่เชิงเส้นหลายเส้น


3

ในช่วงปลายเกม แต่มีบางการพัฒนาใหม่ในหน้านี้เช่นมะนาวและSHAP การตรวจสอบแพ็กเกจที่คุ้มค่าก็คือDALEX (โดยเฉพาะอย่างยิ่งถ้าใช้ R แต่ในทุกกรณีมี cheatsheets ที่ดี ฯลฯ ) แต่ดูเหมือนจะไม่ครอบคลุมการโต้ตอบในขณะนี้ และสิ่งเหล่านี้ล้วน แต่เป็นแบบไม่เชื่อเรื่องพระเจ้าดังนั้นจะใช้งานได้กับป่าสุ่ม, GBMs, เครือข่ายประสาทเทียม ฯลฯ


(+1) แหล่งข้อมูลที่ดี!
mkt

2

การปรับเปลี่ยนเล็กน้อยของฟอเรสต์แบบสุ่มที่ให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลเป็นวิธีการฟอเรสต์เชิงสาเหตุ ดูGRF R-แพคเกจและกระดาษสร้างแรงจูงใจที่นี่ ความคิดคือการใช้วิธีการพื้นฐานป่าสุ่มเพื่อค้นหาความแตกต่างในผลกระทบเชิงสาเหตุ

กระดาษก่อนหน้า ( ที่นี่ ) ให้รายละเอียดวิธีการที่เป็นสาเหตุของป่าที่เรียบง่าย หน้า 9 ของกระดาษให้กระบวนการทีละขั้นตอนสำหรับการปลูกต้นไม้เชิงสาเหตุซึ่งสามารถขยายไปยังป่าในรูปแบบปกติถ่ายจากหน้า 9 ของ Athey and Wager 2017

สมการ 4:

สมการ 4

สมการที่ 5: สมการ 5


1
อัปเดตด้วยลิงก์ไปยังกระดาษก่อนหน้าและภาพหน้าจอจากกระดาษนั้นเพื่อแสดงขั้นตอนต้นไม้เชิงสาเหตุ
gannawag

1

ตอบล่าช้าเกี่ยวกับคำถามของฉันที่นี่ ( เราสามารถทำให้ป่าสุ่มตีความได้ 100% โดยแก้ไขเมล็ดหรือไม่ ):

z1z2

  1. z1mD1(z1)D2(z1)D3(z1)Dm(z1)
  2. mT1(z1,z2)T2(z1,z2)T3(z1,z2)Tm(z1,z2)
  3. jth(j=1,2,...,m)xif^j(xi)(in,jm)
    F^(xi)=>1mj=1mf^j(xi)
  4. F^(xi)(z1,z2)xi
  5. xi
    x1F^(x1) - which is fixed> thanks to (z1,z2)
    x2F^(x2) -> which is fixed thanks to (z1,z2)
    x3→>F^(x3) - which is fixed thanks to (z1,z2)
    x4>→F^(x4) - which is fixed thanks to (z1,>z2)
    ....
  6. x1x2

วิธีนี้ใช้ได้กับทุกวิธีรวมอยู่บนพื้นฐานของการรวมต้นไม้

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