ভারী র্যান্ডম ফরেস্টের জন্য আর প্যাকেজ? ক্লাসওয়েট বিকল্প?


16

আমি অত্যন্ত ভারসাম্যহীন ডেটা সেট (সংখ্যালঘু শ্রেণির হার প্রায় 1% বা তারও কম) এর ফলাফল পূর্বাভাস দেওয়ার জন্য র্যান্ডম ফরেস্ট ব্যবহার করার চেষ্টা করছি। যেহেতু traditionalতিহ্যবাহী র্যান্ডম ফরেস্ট অ্যালগরিদম সংখ্যালঘু শ্রেণীর দিকে বিশেষ মনোযোগ দেওয়ার চেয়ে সামগ্রিক ত্রুটির হারকে হ্রাস করে, এটি ভারসাম্যহীন ডেটার উপরে সরাসরি প্রযোজ্য নয়। সুতরাং আমি সংখ্যালঘু শ্রেণীর ভুল সংযোজন (ব্যয় সংবেদনশীল পড়াশুনা) জন্য একটি উচ্চ ব্যয় বরাদ্দ করতে চাই।

আমি বিভিন্ন উৎস যে আমরা বিকল্প ব্যবহার করতে পারেন পড়া classwtএর randomForestদ, কিন্তু আমি এই কিভাবে ব্যবহার করতে জানি না। এবং আমাদের কাছে randomForestবিনোদনের কোনও বিকল্প আছে ?

উত্তর:


29

এই থ্রেডটি এই বিষয়ে আরও দুটি থ্রেড এবং সূক্ষ্ম নিবন্ধকে বোঝায়। মনে হচ্ছে ক্লাস ওয়েইটিং এবং ডাউনসাম্পলিংও সমানভাবে ভাল। আমি নীচে বর্ণিত হিসাবে ডাউনস্যাম্পলিং ব্যবহার করি।

মনে রাখবেন প্রশিক্ষণ সেটটি অবশ্যই বড় হতে হবে কারণ কেবল 1% বিরল শ্রেণীর বৈশিষ্ট্যযুক্ত। এই শ্রেণীর 25 ~ 50 এরও কম নমুনা সম্ভবত সমস্যাযুক্ত হবে। শ্রেণীর বৈশিষ্ট্যযুক্ত কয়েকটি নমুনা অনিবার্যভাবে শিখে নেওয়া প্যাটার্নকে অশোধিত এবং কম পুনরুত্পাদনযোগ্য করে তুলবে।

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

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

নীচের উদাহরণে, আমি যথাক্রমে 1%, 49% এবং 50% সহ 3 শ্রেণীর সহ 5000 টি নমুনার একটি প্রশিক্ষণ ডেটা সেট সিমুলেটেড করেছি। সুতরাং ক্লাস 0 এর 50 টি নমুনা থাকবে প্রথম চিত্রটি দুটি ভেরিয়েবল x1 এবং x2 এর ফাংশন হিসাবে সেট প্রশিক্ষণের প্রকৃত শ্রেণিকে দেখায়। এই ছবিটি শিখতে অনুকরণীয় প্যাটার্ন দেখায় shows

চারটি মডেলকে প্রশিক্ষণ দেওয়া হয়েছিল: একটি ডিফল্ট মডেল এবং 1:10:10 1: 2: 2 এবং 1: 1: 1 ক্লাসের স্তরায়ন সহ তিনটি স্তরযুক্ত মডেল। প্রধানত প্রতিটি গাছে ইনব্যাগের নমুনার সংখ্যা (পুনরায় আঁকানো) হবে 5000, 1050, 250 এবং 150. আমি সংখ্যাগরিষ্ঠ ভোটদানের ব্যবহার না করায় আমাকে পুরোপুরি সুষম স্তরবিন্যাস করার দরকার নেই। পরিবর্তে বিরল শ্রেণীর ভোটগুলি 10 বার বা অন্য কোনও সিদ্ধান্তের নিয়মকে ওজন করা যেতে পারে। আপনার মিথ্যা নেতিবাচক এবং মিথ্যা ধনাত্মকগুলির ব্যয় এই নিয়মকে প্রভাবিত করবে।

পরবর্তী চিত্রটি দেখায় যে স্তরবিন্যাস কীভাবে ভোট-ভগ্নাংশকে প্রভাবিত করে। লক্ষ্য করুন স্তরের শ্রেণিবদ্ধ অনুপাত সর্বদা ভবিষ্যদ্বাণীগুলির সেন্ট্রয়েড। স্তরবিন্যাস এবং ভোটদান

সর্বশেষে আপনি কোনও ভোটদানের নিয়ম খুঁজে পেতে একটি আরওসি-কার্ভ ব্যবহার করতে পারেন যা আপনাকে নির্দিষ্টতা এবং সংবেদনশীলতার মধ্যে একটি ভাল বাণিজ্য-অফ দেয়। কালো রেখাটি কোনও স্তরবিন্যাস নয়, লাল 1: 5: 5, সবুজ 1: 2: 2 এবং নীল 1: 1: 1। এই ডেটা সেট করার জন্য 1: 2: 2 বা 1: 1: 1 সেরা পছন্দ বলে মনে হচ্ছে। রক বক্ররেখা

যাইহোক, ভোটের ভগ্নাংশগুলি এখানে ব্যাগের বাইরে ক্রসফলিয়েটেড।

এবং কোড:

library(plotrix)
library(randomForest)
library(AUC)

make.data = function(obs=5000,vars=6,noise.factor = .2,smallGroupFraction=.01) {
X = data.frame(replicate(vars,rnorm(obs)))
yValue = with(X,sin(X1*pi)+sin(X2*pi*2)+rnorm(obs)*noise.factor)
yQuantile = quantile(yValue,c(smallGroupFraction,.5))
yClass = apply(sapply(yQuantile,function(x) x<yValue),1,sum)
yClass = factor(yClass)
print(table(yClass)) #five classes, first class has 1% prevalence only
Data=data.frame(X=X,y=yClass)
}

plot.separation = function(rf,...) {
triax.plot(rf$votes,...,col.symbols = c("#FF0000FF",
                                       "#00FF0010",
                                       "#0000FF10")[as.numeric(rf$y)])
}

#make data set where class "0"(red circles) are rare observations
#Class 0 is somewhat separateble from class "1" and fully separateble from class "2"
Data = make.data()
par(mfrow=c(1,1))
plot(Data[,1:2],main="separation problem: identify rare red circles",
     col = c("#FF0000FF","#00FF0020","#0000FF20")[as.numeric(Data$y)])

#train default RF and with 10x 30x and 100x upsumpling by stratification
rf1 = randomForest(y~.,Data,ntree=500, sampsize=5000)
rf2 = randomForest(y~.,Data,ntree=4000,sampsize=c(50,500,500),strata=Data$y)
rf3 = randomForest(y~.,Data,ntree=4000,sampsize=c(50,100,100),strata=Data$y)
rf4 = randomForest(y~.,Data,ntree=4000,sampsize=c(50,50,50)  ,strata=Data$y)

#plot out-of-bag pluralistic predictions(vote fractions).
par(mfrow=c(2,2),mar=c(4,4,3,3))
plot.separation(rf1,main="no stratification")
plot.separation(rf2,main="1:10:10")
plot.separation(rf3,main="1:5:5")
plot.separation(rf4,main="1:1:1")

par(mfrow=c(1,1))
plot(roc(rf1$votes[,1],factor(1 * (rf1$y==0))),main="ROC curves for four models predicting class 0")
plot(roc(rf2$votes[,1],factor(1 * (rf1$y==0))),col=2,add=T)
plot(roc(rf3$votes[,1],factor(1 * (rf1$y==0))),col=3,add=T)
plot(roc(rf4$votes[,1],factor(1 * (rf1$y==0))),col=4,add=T)

একটি চিত্রের ক্যাপশানটিকে অপসারণ করে 1: 2: 2 এর পরিবর্তে 1: 5: 5
সোরেন হ্যাভেলন্ড ওয়েলিং

আপনার বিস্তারিত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ, এটি অবশ্যই আমার প্রতিদিনের কাজে আমাকে অনেক সাহায্য করবে। একটি বাক্য আছে যা আমি বুঝতে পারি না: "প্রধানত প্রতিটি গাছে ইনব্যাগের নমুনার সংখ্যা (Incl। Redraws) হবে 5000,1050, 250 এবং 150" C আপনি দয়া করে আমাকে ব্যাখ্যা করুন যে সংখ্যাগুলি কোথা থেকে এসেছে?
মেট্রিয়েট

1
আমার আনন্দ;) এই উদাহরণে বিরল শ্রেণীর 50 জন সদস্য ছিল। 1:10:10 স্তরিত করার জন্য আমাদের স্যাম্পসাইজ = সি (50,500,500) নির্দিষ্ট করতে হবে। 50 + 500 + 500 = 1050. 1050 নমুনার সম্পূর্ণরূপে উত্থিত গাছে মোট 1050x2 নোড থাকবে।
সোরেন হাভেলুন্ড ওয়েলিং

দুঃখিত যদি আমার প্রশ্নটি নির্বোধ হয় তবে এখানে 1:10:10, 1: 2: 2 এবং 1: 1: 1 স্তরবিন্যাসের অর্থ কী? এবং যখন আপনি বলেছিলেন "বিরল শ্রেণীর ভোটগুলি 10 বার ওজন করা যেতে পারে"। কোডটির কোন অংশটি প্রতিনিধিত্ব করে? এটি 1:10:10? আপনাকে অনেক ধন্যবাদ!
মেট্রিয়েট

1
1:10:10 হ'ল শ্রেণীর মধ্যে অনুপাত। সিমুলেটেড ডেটা সেটটি অনুপাত 1:49:50 করার জন্য তৈরি করা হয়েছিল। এই অনুপাত দুটি বৃহত শ্রেণীর নমুনা তৈরি করে পরিবর্তন করা হয়েছিল। উদাহরণস্বরূপ smpsize = c (50,500,500) c (1,10,10) * 50 এর মতো পছন্দ করে আপনি গাছগুলিতে শ্রেণি অনুপাত পরিবর্তন করেন। 50 হ'ল বিরল শ্রেণির নমুনার সংখ্যা। আপনি যদি আরও ধরে রাখুন।
সোরেন হাভেলুন্ড ওয়েলিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.