র্যান্ডম ফরেস্টের সাথে ইন্টারঅ্যাকশন শর্তাদি অন্তর্ভুক্ত


15

মনে করুন আমাদের কাছে ওয়াই এবং ভবিষ্যদ্বাণীকারী এক্স 1, ...., এক্সএন রয়েছে। যদি আমরা এক্স 1, ...., এক্সএন এর লিনিয়ার মডেলের মাধ্যমে ওয়াইয়ের সাথে ফিট করার চেষ্টা করি এবং ঠিক তখনই ঘটেছিল যে ওয়াই এবং এক্স 1 এর মধ্যে সত্যিকারের সম্পর্ক, ..., এক্সএন লিনিয়ার ছিল না, আমরা সম্ভবত সক্ষম হব কোনওভাবে এক্স এর রূপান্তর করে মডেলটি ফিট করে fit তদুপরি, এটি যদি এমনটি ঘটে থাকে যে এক্স 1, ..., এক্সএন অন্যান্য বৈশিষ্ট্যগুলির তুলনায় y কে প্রভাবিত করে না, তবে আমরা ইন্টারঅ্যাকশন শর্তাদি, x1 * x3 বা x1 * x4 * x7 অন্তর্ভুক্ত করে মডেলটি উন্নত করতে সক্ষম হতে পারি বা মত কিছু। সুতরাং লিনিয়ার ক্ষেত্রে, মিথস্ক্রিয়া শর্তাবলী প্রতিক্রিয়া এবং বৈশিষ্ট্যগুলির মধ্যে অ-লৈখিকতা বা স্বাধীনতা লঙ্ঘন স্থির করে মান আনতে পারে।

যাইহোক, র্যান্ডম অরণ্যগুলি সত্যই এই অনুমানগুলি করে না। কোনও র্যান্ডম ফরেস্টের জন্য উপযুক্ত হলে ইন্টারঅ্যাকশন শর্তাদি কী গুরুত্বপূর্ণ? অথবা কেবলমাত্র স্বতন্ত্র পদগুলি অন্তর্ভুক্ত করে এবং উপযুক্ত পরামিতিগুলি বেছে নেওয়া এলোমেলো বনগুলিকে এই সম্পর্কগুলি ক্যাপচার করতে দেয়?

উত্তর:


15

যদিও ফিচার ইঞ্জিনিয়ারিং বাস্তব জীবনে খুব গুরুত্বপূর্ণ, গাছগুলি (এবং এলোমেলো বন) ফর্মটির ইন্টারঅ্যাকশন শর্তাবলী খুঁজে পেতে খুব ভাল x*y। দ্বি-মুখী মিথস্ক্রিয়া সহ একটি রিগ্রেশন এর খেলনা উদাহরণ এখানে। একটি নিষ্পাপ লিনিয়ার মডেলকে গাছ এবং একটি ব্যাগ গাছের সাথে তুলনা করা হয় (যা এলোমেলো বনের একটি সহজ বিকল্প।)

আপনি দেখতে পাচ্ছেন, গাছটি ইন্টারঅ্যাকশনটি সন্ধান করতে নিজেই বেশ ভাল তবে এই উদাহরণে লিনিয়ার মডেলটি ভাল নয়।

# fake data

x <- rnorm(1000, sd=3)
y <- rnorm(1000, sd=3)
z <- x + y + 10*x*y + rnorm(1000, 0, 0.2)
dat <- data.frame(x, y, z)

# test and train split
test <- sample(1:nrow(dat), 200)
train <- (1:1000)[-test]

# bag of trees model function
boot_tree <- function(formula, dat, N=100){
  models <- list()
  for (i in 1:N){
    models[[i]] <- rpart(formula, dat[sample(nrow(dat), nrow(dat), replace=T), ])
  }
  class(models) <- "boot_tree"
  models
}

# prediction function for bag of trees
predict.boot_tree <- function(models, newdat){
  preds <- matrix(0, nc=length(models), nr=nrow(newdat))
  for (i in 1:length(models)){
    preds[,i] <- predict(models[[i]], newdat)
  }
  apply(preds, 1, function(x) mean(x, trim=0.1))
}

## Fit models and predict:

# linear model
model1 <- lm(z ~ x + y, data=dat[train,])
pred1 <- predict(model1, dat[test,])

# tree
require(rpart)
model2 <- rpart(z ~ x + y, data=dat[train,])
pred2 <- predict(model2, dat[test,])

# bag of trees
model3 <- boot_tree("z ~ x+y", dat)
pred3 <- predict(model3, dat[test,])

ylim = range(c(pred1, pred2, pred3))

# plot predictions and true z

plot(dat$z[test], predict(model1, dat[test,]), pch=19, xlab="Actual z",
ylab="Predicted z", ylim=ylim)
points(dat$z[test], predict(model2, dat[test,]), col="green", pch=19)
points(dat$z[test], predict(model3, dat[test,]), col="blue", pch=19)

abline(0, 1, lwd=3, col="orange")

legend("topleft", pch=rep(19,3), col=c("black", "green", "blue"),
legend=c("Linear", "Tree", "Forest"))

এখানে চিত্র বর্ণনা লিখুন


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