การทำนายด้วย randomForest (R) เมื่ออินพุตบางตัวมีค่าขาดหายไป (NA)


9

ฉันมีrandomForestรูปแบบการจำแนกที่ดีซึ่งฉันต้องการใช้ในแอปพลิเคชันที่ทำนายคลาสของเคสใหม่ กรณีใหม่มีค่าที่ขาดหายไปอย่างหลีกเลี่ยงไม่ได้ การทำนายจะไม่ทำงานเช่นนี้สำหรับ NAs ฉันจะทำสิ่งนี้ได้อย่างไร

data(iris)
# create first the new case with missing values
na.row<-45
na.col<-c(3,5)
case.na<-iris[na.row,]
case.na[,na.col]<-NA

iris.rf <- randomForest(Species ~ ., data=iris[-na.row,])
# print(iris.rf)

myrf.pred <- predict(iris.rf, case.na[-5], type="response")
myrf.pred
[1] <NA>

ฉันพยายามmissForestแล้ว ฉันรวมข้อมูลดั้งเดิมและเคสใหม่แล้วเขย่าด้วยmissForestและรับค่าที่เป็นนัยสำหรับ NAs ในเคสใหม่ของฉัน การคำนวณที่หนักเกินไป

data.imp <- missForest(data.with.na)

แต่ต้องมีวิธีการใช้ rf-model เพื่อทำนายกรณีใหม่ที่มีค่าหายไปใช่ไหม?


4
มีหลายวิธีที่ค่าที่หายไปสามารถจัดการได้ในแผนผังการตัดสินใจ แต่randomForestแพ็คเกจใน R มีวิธีการใส่ร้ายที่คุณอธิบายไว้เท่านั้น หากคุณต้องการที่จะอยู่ในสภาพแวดล้อมที่คล้ายกันgbmมีวิธีการที่ราบรื่นกว่าในการจัดการค่าที่หายไปในข้อมูลใหม่ (มันไม่สมบูรณ์ แต่มีประโยชน์)
Shea Parkes

ฉันคิดว่าแพ็คเกจปาร์ตี้น่าจะดีกว่าด้วยค่าที่หายไป
Simone

เรียน @Simone partyแพคเกจทำงานร่วมกับ NAs ในชุดทดสอบอย่างไร ฉันไม่พบร่องรอยของการใส่ในpartyคู่มือหรือตัวอย่าง
Hermo

@hermo ลองดูที่กระดาษของปาร์ตี้citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.92.9930ดูเหมือนว่าอัลกอริทึมทำงานเหมือน CART - ดูเหมือนการแยกตัวแทน
Simone

ลองใช้ "na.action = na.roughfix"

คำตอบ:


1

คุณไม่มีทางเลือกนอกจากใส่ค่าหรือเปลี่ยนโมเดล ทางเลือกที่ดีอาจเป็นเรื่องสำคัญในแพ็คเกจ Hmisc ฉันคิดว่ามันมีน้ำหนักน้อยกว่า rfimpute ซึ่งเป็นสิ่งที่ควบคุมคุณตัวอย่างแพ็คเกจแรก (มีอื่น ๆ ):

# Check that aregImpute can almost exactly estimate missing values when
# there is a perfect nonlinear relationship between two variables
# Fit restricted cubic splines with 4 knots for x1 and x2, linear for x3
set.seed(3)
x1 <- rnorm(200)
x2 <- x1^2
x3 <- runif(200)
m <- 30
x2[1:m] <- NA
a <- aregImpute(~x1+x2+I(x3), n.impute=5, nk=4, match='closest')
a
matplot(x1[1:m]^2, a$imputed$x2)
abline(a=0, b=1, lty=2)

x1[1:m]^2
a$imputed$x2

# Multiple imputation and estimation of variances and covariances of
# regression coefficient estimates accounting for imputation
# Example 1: large sample size, much missing data, no overlap in
# NAs across variables
x1 <- factor(sample(c('a','b','c'),1000,TRUE))
x2 <- (x1=='b') + 3*(x1=='c') + rnorm(1000,0,2)
x3 <- rnorm(1000)
y  <- x2 + 1*(x1=='c') + .2*x3 + rnorm(1000,0,2)
orig.x1 <- x1[1:250]
orig.x2 <- x2[251:350]
x1[1:250] <- NA
x2[251:350] <- NA
d <- data.frame(x1,x2,x3,y)
# Find value of nk that yields best validating imputation models
# tlinear=FALSE means to not force the target variable to be linear
f <- aregImpute(~y + x1 + x2 + x3, nk=c(0,3:5), tlinear=FALSE,
                data=d, B=10) # normally B=75
f
# Try forcing target variable (x1, then x2) to be linear while allowing
# predictors to be nonlinear (could also say tlinear=TRUE)
f <- aregImpute(~y + x1 + x2 + x3, nk=c(0,3:5), data=d, B=10)
f

# Use 100 imputations to better check against individual true values
f <- aregImpute(~y + x1 + x2 + x3, n.impute=100, data=d)
f
par(mfrow=c(2,1))
plot(f)
modecat <- function(u) {
 tab <- table(u)
 as.numeric(names(tab)[tab==max(tab)][1])
}
table(orig.x1,apply(f$imputed$x1, 1, modecat))
par(mfrow=c(1,1))
plot(orig.x2, apply(f$imputed$x2, 1, mean))
fmi <- fit.mult.impute(y ~ x1 + x2 + x3, lm, f, 
                       data=d)
sqrt(diag(vcov(fmi)))
fcc <- lm(y ~ x1 + x2 + x3)
summary(fcc)   # SEs are larger than from mult. imputation

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

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

varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE 

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

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