কিছু ইনপুটের মান (এনএ) হারিয়ে গেলে র্যান্ডমফোরেস্ট (আর) এর সাথে পূর্বাভাস


9

আমার একটি দুর্দান্ত randomForestশ্রেণিবদ্ধকরণ মডেল রয়েছে যা আমি একটি অ্যাপ্লিকেশনটিতে ব্যবহার করতে চাই যা একটি নতুন কেসের শ্রেণীর পূর্বাভাস দেয়। নতুন ক্ষেত্রে অনিবার্যভাবে মূল্যবোধ হারিয়েছে। ভবিষ্যদ্বাণী করা এনএ-তে যেমন কাজ করবে না। আমার কীভাবে এটি করা উচিত?

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ঝাঁকিয়েছি এবং আমার নতুন ক্ষেত্রে এনএদের জন্য অনুমিত মান পেয়েছি। যদিও খুব ভারী কম্পিউটিং।

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

তবে আরএফ-মডেলটি ব্যবহার করার একটি উপায় অবশ্যই অনুপস্থিত মানগুলির সাথে একটি নতুন মামলার পূর্বাভাস দিতে হবে, তাই না?


4
নিখোঁজ মানগুলি সিদ্ধান্ত গাছগুলিতে পরিচালনা করতে পারে এমন অনেকগুলি উপায় রয়েছে তবে আর এর randomForestপ্যাকেজটিতে কেবলমাত্র আপনি বর্ণিত প্রতিস্থাপন পদ্ধতি রয়েছে। আপনি যদি একই পরিবেশে থাকতে চান তবে gbmনতুন ডেটাতে অনুপস্থিত মানগুলি পরিচালনা করার কিছুটা মসৃণ পদ্ধতি রয়েছে (এটি নিখুঁত নয়, তবে এটি দরকারী) is
শেয়া পার্কস

আমি মনে করি যে পার্টি প্যাকেজটি অনুপস্থিত মানগুলির সাথে আরও ভাল আচরণ করে
সাইমন

প্রিয় @ সিমোন, পরীক্ষাগুলিতে এনএর partyসাথে প্যাকেজ কীভাবে কাজ করবে? আমি partyম্যানুয়ালগুলিতে বা উদাহরণগুলিতে ধারণা দেওয়ার কোনও চিহ্ন খুঁজে পাইনি ।
হার্মো

@ হেরো পার্টির পেপার citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.92.9930 এ একবার দেখার চেষ্টা করুন এটি দেখে মনে হচ্ছে অ্যালগরিদমটি কার্টের মতো কাজ করে - এটি সারোগেট বিভাজনের জন্য দেখায়।
সাইমন

"Na.action = na.roughfix" ব্যবহার করে দেখুন।

উত্তর:


1

মানগুলি গুনে বা মডেল পরিবর্তন করা ছাড়া আপনার কাছে বিকল্প নেই। Hmisc প্যাকেজে একটি ভাল পছন্দ aregImpute হতে পারে। আমি মনে করি এটি আরফিম্পেটের চেয়ে কম ভারী যা আপনাকে আটকে রাখছে, প্রথম প্যাকেজের উদাহরণ (অন্যরা রয়েছে):

# 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

আপনি উল্লেখ করেছেন যে আপনার অনেকগুলি নতুন পর্যবেক্ষণ রয়েছে যা স্বতন্ত্র ভেরিয়েবলের মূল্য হারিয়েছে। যদিও আপনার মতো অনেকগুলি মামলা রয়েছে, প্রতিটি নতুন পর্যবেক্ষণের জন্য যদি তার ভেরিয়েবলগুলির মধ্যে এক বা দুটিতে কেবল মিসিং থাকে এবং আপনার ভেরিয়েবলের পরিমাণ খুব সামান্য না হয় তবে কেবল একটি মাঝারি বা গড় দিয়ে গর্তগুলি পূরণ করা হয় (তারা কি ধারাবাহিক?) কাজ করতে পারে.

আর একটি বিষয় যা আকর্ষণীয় হতে পারে তা হ'ল একটি স্বল্প পরিবর্তনশীল গুরুত্ব বিশ্লেষণ। এলোমেলো বন আর বাস্তবায়ন দুটি গুরুত্বপূর্ণ ব্যবস্থা এবং স্বতন্ত্র প্লট গণনা করে:

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

এবং আপনি মডেল প্রশিক্ষণে "গুরুত্বপূর্ণ" ভেরিয়েবলগুলি সহ মোটামুটি খেলতে পারেন, যতক্ষণ না ভবিষ্যতবাণী নির্ভুলতা "পূর্ণ মডেলের" তুলনায় প্রভাব ফেলে না। হতে পারে আপনি খুব কম মিসিং সহ ভেরিয়েবল রাখেন। এটি আপনাকে আপনার সমস্যার আকার কমাতে সহায়তা করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.