পুনরাবৃত্তির সংখ্যা বাড়ার সাথে সাথে গ্রেডিয়েন্ট বুস্টিং মেশিনের নির্ভুলতা হ্রাস পায়


15

আমি এর মাধ্যমে গ্রেডিয়েন্ট বুস্টিং মেশিন অ্যালগরিদম নিয়ে পরীক্ষা করছি caret আর। প্যাকেজটির ing

একটি ছোট কলেজ ভর্তি ডেটাসেট ব্যবহার করে, আমি নিম্নলিখিত কোডটি চালিয়েছি:

library(caret)

### Load admissions dataset. ###
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

### Create yes/no levels for admission. ### 
mydata$admit_factor[mydata$admit==0] <- "no"
mydata$admit_factor[mydata$admit==1] <- "yes"             

### Gradient boosting machine algorithm. ###
set.seed(123)
fitControl <- trainControl(method = 'cv', number = 5, summaryFunction=defaultSummary)
grid <- expand.grid(n.trees = seq(5000,1000000,5000), interaction.depth = 2, shrinkage = .001, n.minobsinnode = 20)
fit.gbm <- train(as.factor(admit_factor) ~ . - admit, data=mydata, method = 'gbm', trControl=fitControl, tuneGrid=grid, metric='Accuracy')
plot(fit.gbm)

এবং আমার অবাক করে দিয়েছি যে মডেলটির ক্রস-বৈধকরণের নির্ভুলতা বৃদ্ধির পুনরাবৃত্তির সংখ্যা বৃদ্ধি হওয়ার পরিবর্তে বৃদ্ধি পাওয়ার পরিবর্তে হ্রাস পেয়ে প্রায়। 450,000 পুনরাবৃত্তিতে প্রায় .59 এর সর্বনিম্ন নির্ভুলতায় পৌঁছেছে।

enter image description here

আমি কি ভুলভাবে জিবিএম অ্যালগরিদম প্রয়োগ করেছি?

সম্পাদনা: আন্ডারমিনারের পরামর্শ অনুসরণ করে, আমি উপরের caretকোডটি পুনরায় চালু করেছি তবে 100 থেকে 5,000 চালানোর পুনরাবৃত্তি চালানোর দিকে মনোনিবেশ করেছি :

set.seed(123)
fitControl <- trainControl(method = 'cv', number = 5, summaryFunction=defaultSummary)
grid <- expand.grid(n.trees = seq(100,5000,100), interaction.depth = 2, shrinkage = .001, n.minobsinnode = 20)
fit.gbm <- train(as.factor(admit_factor) ~ . - admit, data=mydata, method = 'gbm', trControl=fitControl, tuneGrid=grid, metric='Accuracy')
plot(fit.gbm)

ফলস্বরূপ প্লটটি দেখায় যে নির্ভুলতা প্রকৃতপক্ষে। 1,800 পুনরাবৃত্তিতে প্রায় .705 এ পৌঁছায়:

enter image description here

উদ্ভট বিষয়টি হ'ল সঠিকতাটি 70 .70 এ মালভূমি হয়নি তবে পরিবর্তে 5,000 টি পুনরাবৃত্তি অনুসরণ করে প্রত্যাখ্যান হয়েছিল।

উত্তর:


14

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

মূলত, জোর দেওয়া ভুল তথ্য রয়েছে এমন ক্ষেত্রে সঠিকভাবে পূর্বাভাস দেওয়ার জন্য 'ফোকাস' করতে পারে এবং প্রক্রিয়াটিতে অন্যান্য ক্ষেত্রে যেগুলি আরও তাত্পর্যপূর্ণ তার গড় পারফরম্যান্সকে আরও খারাপ করতে পারে।

এই লিঙ্ক ( বুস্টিং এবং গোলমাল ) আমি ইস্যুটি সরবরাহ করতে পারার চেয়ে আরও ভাল বিবরণ দেখায়।

লং এবং সার্ভেদিওর এই কাগজটি ( এলোমেলোভাবে শ্রেণিবিন্যাসের শব্দ ) ইস্যুটির আরও প্রযুক্তিগত বিশদ সরবরাহ করে।


16

আপনি যা প্রদর্শন করেছেন তা হ'ল ওভারফিট করার সর্বোত্তম উদাহরণ। ত্রুটিযুক্ত ছোট আপটিকটি আপনার ক্রস-বৈধতা ডেটা সেটটির বৈধতা অংশে দরিদ্র কর্মক্ষমতা থেকে আসে। আরও পুনরাবৃত্তিগুলি প্রায়শই প্রশিক্ষণ সেটে ত্রুটিটি উন্নত করতে পারে তবে বৈধতা / পরীক্ষার সেটটির বিপরীতে সত্য।


গ্রেডিয়েন্ট বুস্টিং ওভারফিটগুলি # পুনর্মূলক পুনরুত্থানের উপর ভিত্তি করে? মজাদার. আমি ভেবেছিলাম পুনরাবৃত্তির সর্বোত্তম # টিপানোর পরে যথার্থতাটি পরিবর্তে মালভূমি হয়ে গেছে।
রবার্টএফ

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

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

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

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

4

গ্রিড অনুসন্ধান ব্যতীত, অনুরূপ ফলাফল পুনরুত্পাদন করার কোডগুলি,

mod = gbm(admit ~ .,
      data = mydata[,-5],
      n.trees=100000,
      shrinkage=0.001,
      interaction.depth=2,
      n.minobsinnode=10,
      cv.folds=5,
      verbose=TRUE,
      n.cores=2)

best.iter <- gbm.perf(mod, method="OOB", plot.it=TRUE, oobag.curve=TRUE, overlay=TRUE)
print(best.iter)
[1] 1487
pred = as.integer(predict(mod, newdata=mydata[,-5], n.trees=best.iter) > 0)
y = mydata[,1]
sum(pred == y)/length(y)
[1] 0.7225

3

গিগাবাইট প্যাকেজটির পুনরাবৃত্তির সর্বোত্তম # (গাছের = # বা ভিত্তি ফাংশনের #) অনুমান করার জন্য একটি ফাংশন রয়েছে,

gbm.perf(mod, method="OOB", plot.it=TRUE, oobag=TRUE, overlay=TRUE)

এর জন্য আপনার ক্যারেটের ট্রেনের দরকার নেই।


আমি জানি না যে এটি আমার যে সমস্যাটি রয়েছে তা সমাধান করে কিনা - এটি আমার ক্ষেত্রে পুনরাবৃত্তির অনুকূল # 5000 বলে মনে হয় যেখানে যথাযথতা সর্বোচ্চ, 0.70 এর কাছাকাছি (আমার চক্রান্তের প্রথম ডেটা পয়েন্ট)। তবে এটি ভুল বলে মনে হচ্ছে। আরও পুনরাবৃত্তিগুলি একটি উচ্চতর নির্ভুলতার দিকে পরিচালিত করে, নিম্নে নয়, ডান?
রবার্টএফ

1
@ রবার্টএফ প্রথম, আমি মনে করি আপনাকে ভর্তি কোনও ফ্যাক্টারে পরিণত করার দরকার নেই। এটি ঠিক পাশাপাশি কাজ করে: মোড = জিবিএম (স্বীকার করুন ~।, ডেটা = মায়াডাটা [, - 5], এন.ট্রিস = 100000, সঙ্কুচিত = 0.001, মিথস্ক্রিয়া.ডেপথ = 2, এন.মিনোবসিনোড = 10, সিভি.ফোল্ডস = 5 , verbose = TRUE, n.cores = 2)। আপনি দেখতে পারেন যেখানে gbm সর্বোত্তম ইটারটি চয়ন করে: best.iter <- gbm.perf (মোড, পদ্ধতি = "OOB", প্লট.িট = সত্য, oobag.curve = সত্য, ওভারলে = সত্য)। অর্থাৎ, যখন বিচ্যুতির পরিবর্তনটি নেতিবাচক হয়ে যায় (এটি থেকে উত্পন্ন প্লটটি দেখুন)।
horaceT

1
পুনঃটুইট জিবিএম কলটিতে এন.টি.আর = (এক মিলিয়ন) নির্দিষ্ট করে আপনি 1 থেকে 1,000,000 পর্যন্ত সমস্ত সংখ্যা পুনরাবৃত্তি করতে পারেন। সুতরাং আপনার জন্য এটি করার জন্য আপনার ক্যারেটের দরকার নেই।
horaceT

1
পুনঃটুইট আমি কেবল 100k গাছ / পুনরুক্তি চালিয়েছি। Gbm.perf দিয়ে সেরা পুনরাবৃত্তিটি বেছে নিয়ে আমি যে সঠিকতাটি পেয়েছি তা হল 0.7225, যা আপনার পুনরাবৃত্তির একটি সম্পূর্ণ গ্রিড চালানোর খুব কাছে।
horaceT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.