আর এ এলোমেলো বনের শ্রেণিবিন্যাসে ভবিষ্যদ্বাণীকারীদের একটি সেটের আপেক্ষিক গুরুত্ব


31

আমি একটি দিকে ভেরিয়েবল সেট আপেক্ষিক গুরুত্ব নির্ধারণ করতে চাই randomForestআর এ শ্রেণীবিন্যাস মডেল importanceফাংশন প্রদান করে MeanDecreaseGiniপ্রতিটি predictor জন্য মেট্রিক - এটা একটি সেট প্রতিটি predictor জুড়ে এই summing হিসাবে সহজ হিসাবে?

উদাহরণ স্বরূপ:

# Assumes df has variables a1, a2, b1, b2, and outcome
rf <- randomForest(outcome ~ ., data=df)
importance(rf)
# To determine whether the "a" predictors are more important than the "b"s,
# can I sum the MeanDecreaseGini for a1 and a2 and compare to that of b1+b2?

উত্তর:


46

প্রথমে আমি স্পষ্ট করে বলতে চাই মেট্রিকটি কী গুরুত্ব দেয়।

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

গিনি গুরুত্ব
প্রতিবার নোডের একটি বিভাজন পরিবর্তনশীল মি-তে তৈরি হওয়ার পরে দুটি বংশধর নোডের জন্য গিনি অপরিষ্কারের মানদণ্ড প্যারেন্ট নোডের চেয়ে কম হয়। বনের সমস্ত গাছের তুলনায় প্রতিটি পৃথক ভেরিয়েবলের জন্য গিনি যুক্ত হ্রাস একটি দ্রুত পরিবর্তনশীল গুরুত্ব দেয় যা প্রায়শই ক্রমবর্ধমান গুরুত্ব পরিমাপের সাথে খুব সামঞ্জস্যপূর্ণ হয়।

গিনি অপবিত্রতা সূচক হিসাবে সংজ্ঞায়িত করা হয় কোথায় লক্ষ্য পরিবর্তনশীল এবং ক্লাস সংখ্যা এই শ্রেণীর অনুপাত।

জি=Σআমি=1এনপিআমি(1-পিআমি)
এনপিআমি

একটি দুটি শ্রেণির সমস্যার জন্য, এর ফলাফলটি নিম্নলিখিত বক্ররেখায় পরিণত হয় যা 50-50 নমুনার জন্য সর্বাধিক এবং সমজাতীয় সেটগুলির জন্য ছোট করা হয়: 2 শ্রেণীর জন্য গিনি অপরিষ্কার

এরপরে গণনা করা হয় সমস্ত গড় প্রশ্নে ভবিষ্যদ্বাণী জড়িত। এটি গড় হিসাবে এটি সহজেই কোনও গ্রুপে থাকা ভেরিয়েবলগুলিতে সমস্ত বিভাজনের উপরে গড় বাড়ানো যেতে পারে।

আমি=জিপিএকটিRএনটি-জিগুলিপিআমিটি1-জিগুলিপিআমিটি2

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

[[এক্স|ওয়াই]]=[এক্স]

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

আর এর এলোমেলো বনজ বস্তু থেকে এগুলি পেতে এখানে একটি সহজ স্ক্রিপ্ট রয়েছে:

var.share <- function(rf.obj, members) {
  count <- table(rf.obj$forest$bestvar)[-1]
  names(count) <- names(rf.obj$forest$ncat)
  share <- count[members] / sum(count[members])
  return(share)
}

সদস্য পরামিতি হিসাবে গোষ্ঠীতে ভেরিয়েবলের নাম দিন pass

আমি আশা করি এটি আপনার প্রশ্নের উত্তর দেয়। আমি আগ্রহী হলে সরাসরি গ্রুপ আমদানি পেতে একটি ফাংশন লিখতে পারি।

সম্পাদনা:
এখানে একটি ফাংশন যা একটি randomForestঅবজেক্ট এবং ভেরিয়েবলের নাম সহ ভেক্টরগুলির একটি তালিকা প্রদত্ত গ্রুপকে গুরুত্ব দেয় । এটি var.shareপূর্বনির্ধারিত হিসাবে ব্যবহার করে । আমি কোনও ইনপুট চেকিং করি নি তাই আপনাকে সঠিক ভেরিয়েবলের নাম ব্যবহার করার বিষয়টি নিশ্চিত করতে হবে।

group.importance <- function(rf.obj, groups) {
  var.imp <- as.matrix(sapply(groups, function(g) {
    sum(importance(rf.obj, 2)[g, ]*var.share(rf.obj, g))
  }))
  colnames(var.imp) <- "MeanDecreaseGini"
  return(var.imp)
}

ব্যবহারের উদাহরণ:

library(randomForest)                                                          
data(iris)

rf.obj <- randomForest(Species ~ ., data=iris)

groups <- list(Sepal=c("Sepal.Width", "Sepal.Length"), 
               Petal=c("Petal.Width", "Petal.Length"))

group.importance(rf.obj, groups)

>

      MeanDecreaseGini
Sepal         6.187198
Petal        43.913020

এটি ওভারল্যাপিং গ্রুপগুলির জন্যও কাজ করে:

overlapping.groups <- list(Sepal=c("Sepal.Width", "Sepal.Length"), 
                           Petal=c("Petal.Width", "Petal.Length"),
                           Width=c("Sepal.Width", "Petal.Width"), 
                           Length=c("Sepal.Length", "Petal.Length"))

group.importance(rf.obj, overlapping.groups)

>

       MeanDecreaseGini
Sepal          6.187198
Petal         43.913020
Width          30.513776
Length        30.386706

পরিষ্কার এবং কঠোর উত্তরের জন্য ধন্যবাদ! আপনি যদি গ্রুপ আমদানির জন্য কোনও ফাংশন যুক্ত করতে আপত্তি না করেন তবে তা দুর্দান্ত।
ম্যাক্স ঘেনিস

এই উত্তরের জন্য ধন্যবাদ! দুটি প্রশ্ন, আপনার যদি এক মিনিট থাকে: (1) গুরুত্বটি তখন গণনা করা হয় ... : ব্রেইমানের সংজ্ঞার সাথে, আমি সেখানে "জিনি হ্রাস", এবং গুরুত্ব হ্রাসের যোগফল হবে, সঠিক ? (২) প্রশ্নে ভবিষ্যদ্বাণী জড়িত বনের সমস্ত বিভাজনের উপরে গড় : আমি কি এই বিশেষ বৈশিষ্ট্যটিতে একটি বিভাজন জড়িত সমস্ত নোড দ্বারা এটি প্রতিস্থাপন করতে পারি ? নিশ্চিত হয়ে আমি পুরোপুরি বুঝতে পেরেছি;)
রেমি মলিসন

1
আপনি মন্তব্য পেয়েছিলেন সংজ্ঞাগুলি সম্পর্কে আমাকে আরও কিছুটা ভাবতে so আমি সৎ হতে কিছুটা দূরে ছিলাম। গড় সমস্ত গাছের উপরে তৈরি হয় এবং সমস্ত নোড নয়। আমি সময় পাওয়ার সাথে সাথে উত্তরটি আপডেট করব update আপাতত আপনার প্রশ্নের উত্তর এখানে: (1) হ্যাঁ। এটি গাছের স্তরে এভাবে সংজ্ঞায়িত করা হয়। হ্রাসের যোগফলটি তখন সমস্ত গাছের তুলনায় গড় হয়। (২) হ্যাঁ, আমি যা বলতে চাইছিলাম তা কিন্তু এটি আসলে ধারণ করে না।
যখন

4

ক্লাসের ওপরে জি = যোগ হিসাবে সংজ্ঞায়িত ফাংশন [পাই (1 − পাই)] আসলে এনট্রপি, যা বিভাজনকে মূল্যায়নের অন্য উপায়। শিশু নোড এবং পিতামাত নোডের এন্ট্রপির মধ্যে পার্থক্য হ'ল তথ্য প্রাপ্তি। GINI অপরিষ্কার কর্মটি ক্লাসের ওপরে জি = 1- সমষ্টি [পাই ^ 2]।

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