การเพิ่มความแม่นยำของเครื่องไล่ระดับสีจะลดลงเมื่อจำนวนการทำซ้ำเพิ่มขึ้น


15

ฉันกำลังทดลองกับอัลกอริทึมของเครื่องเร่งการไล่ระดับสีผ่านcaretแพ็คเกจใน R

ใช้ชุดข้อมูลการรับสมัครวิทยาลัยขนาดเล็กฉันใช้รหัสต่อไปนี้:

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)

และพบว่าฉันประหลาดใจที่ความถูกต้องของการตรวจสอบความถูกต้องข้ามของแบบจำลองลดลงมากกว่าที่เพิ่มขึ้นเนื่องจากจำนวนการทำซ้ำที่เพิ่มขึ้นเพิ่มขึ้นถึงระดับความแม่นยำขั้นต่ำประมาณ. 59

ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้อัลกอริทึม GBM ไม่ถูกต้องหรือไม่

แก้ไข: ทำตามคำแนะนำของ Underminer ฉันได้รัน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)

พล็อตที่เกิดขึ้นแสดงให้เห็นว่าความถูกต้องสูงสุดจริงที่เกือบ. 705 ที่ ~ 1,800 ซ้ำ:

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่น่าแปลกใจก็คือความแม่นยำนั้นไม่ได้อยู่ที่ที่ราบสูง ~ .70 แต่ปฏิเสธแทนที่จะทำตาม 5,000 ซ้ำ

คำตอบ:


14

โดยทั่วไปข้อผิดพลาดในการเพิ่มสามารถเพิ่มขึ้นได้ตามจำนวนการวนซ้ำโดยเฉพาะเมื่อข้อมูลมีสัญญาณรบกวน (เช่นกรณีที่ติดฉลากผิด) นี่อาจเป็นปัญหาของคุณ แต่ฉันจะไม่สามารถพูดได้หากไม่ทราบข้อมูลเพิ่มเติมของคุณ

โดยทั่วไปการเพิ่มสามารถ 'มุ่งเน้น' ในการทำนายกรณีที่มีข้อมูลที่ผิดและในกระบวนการทำให้ประสิทธิภาพโดยเฉลี่ยลดลงในกรณีอื่น ๆ ที่สำคัญกว่า

ลิงก์นี้ (การเพิ่มและลดเสียงรบกวน ) แสดงคำอธิบายที่ดีกว่าที่ฉันสามารถให้ได้

บทความนี้ ( การจำแนกเสียงแบบสุ่ม ) โดย Long และ Servedio ให้รายละเอียดทางเทคนิคเพิ่มเติมของปัญหา


16

สิ่งที่คุณแสดงเป็นตัวอย่างคลาสสิกของ ข้อผิดพลาดเล็ก ๆ น้อย ๆ ของ uptick มาจากประสิทธิภาพที่ไม่ดีในส่วนการตรวจสอบความถูกต้องของชุดข้อมูลที่ตรวจสอบข้ามคุณ การวนซ้ำมากขึ้นควรปรับปรุงข้อผิดพลาดในชุดการฝึกอบรมเกือบทุกครั้ง แต่สิ่งที่ตรงข้ามเป็นจริงสำหรับชุดการตรวจสอบ / ทดสอบ


ดังนั้นการไล่ระดับสีชุดเพิ่มตาม # ของการส่งเสริมซ้ำ? น่าสนใจ ฉันคิดว่าความแม่นยำน่าจะเป็นที่ราบสูงแทนหลังจากกดปุ่ม # iterations ที่เหมาะสมที่สุด
RobertF

4
ถูกต้อง. ในการเพิ่มระดับความลาดชันต้นไม้ที่ตามมาแต่ละต้นจะถูกสร้างขึ้นจากส่วนที่เหลือของต้นไม้ก่อนหน้านี้ดังนั้น GBM จะพยายามตัดต่อไปที่ข้อผิดพลาดที่เหลืออยู่ในชุดข้อมูลการฝึกอบรมแม้จะมีค่าใช้จ่าย นั่นเป็นเหตุผลที่คุณทำการตรวจสอบข้าม - เพราะอัลกอริทึมการปรับไม่ทราบว่าจะหยุดเมื่อไหร่
Ryan Zotti

1
การไล่ระดับสีเป็นแรงบันดาลใจจาก AdaBoost AdaBoost แทบจะไม่ได้สวมชุดสูทมากนักและเมื่อเป็นเช่นนั้นจะมีเพียงเล็กน้อยเท่านั้นและหลังจากการทำซ้ำหลายครั้งหลายครั้ง ฉันคิดว่าคำอธิบาย @Underminer มีแนวโน้มที่จะเป็นตัวแทนของสิ่งที่เกิดขึ้นมากกว่าความคิดเห็นนี้โดยเฉพาะการพิจารณาว่าไม่มีการอ้างอิงในความคิดเห็นนี้
Ricardo Cruz

2
@RicardoCruz ฉันคิดว่ามันน่าสนใจที่คุณไม่เคยเห็นการไล่ระดับสีช่วยเพิ่มความกระชับ ในช่วงสี่ปีที่ฉันใช้มันฉันได้เห็นสิ่งที่ตรงกันข้าม - ต้นไม้มากเกินไปนำไปสู่การเกินกำลัง ฉันเคยต้องพิสูจน์บางสิ่งที่คล้ายกับเพื่อนร่วมงานและฉันสามารถลดข้อผิดพลาดในการฝึกอบรมที่ตั้งเกือบเป็นศูนย์ แต่ข้อผิดพลาดในการตรวจสอบความถูกต้องเพิ่มขึ้นอย่างมีนัยสำคัญมากกว่าที่ไม่ใช่ GBM ที่ไม่เหมาะสม ฉันยังคิดว่าการไล่ระดับสีเป็นวิธีที่ยอดเยี่ยม มันมักจะเป็นอัลกอริธึมแรกที่ฉันใช้ - คุณแค่ต้องระวังต้นไม้มากเกินไปซึ่งคุณสามารถติดตามผ่านการตรวจสอบข้ามได้
Ryan Zotti

2
@ RyanZotti ฉันยืนแก้ไขแล้ว ฉันได้อ่านเอกสารมากมายเกี่ยวกับ AdaBoost จาก Schapire และคณะเพราะฉันสนุกกับการใช้ทฤษฎีที่แข็งแกร่ง ผู้เขียนให้เหตุผลว่าการส่งเสริมมีแนวโน้มที่จะล้น แต่มันเป็นเรื่องยากมาก ฉันไม่มีประสบการณ์มากนักเกี่ยวกับการใช้มันและพวกเขาไม่มีพื้นฐานทางทฤษฎีที่มั่นคงสำหรับการโต้เถียงเรื่องนี้และแน่นอนผู้เขียนที่เป็นนักเขียนพวกเขามีความกระตือรือร้นในการประดิษฐ์ดังนั้นถ้าคุณมีประสบการณ์ในทางตรงกันข้าม ฉันยืนแก้ไข
Ricardo Cruz

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 มีฟังก์ชั่นในการประมาณจำนวนการวนซ้ำที่เหมาะสม (= # ของต้นไม้หรือ # ของฟังก์ชันพื้นฐาน)

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

คุณไม่ต้องการรถไฟของคาเร็ต


ฉันไม่ทราบว่าวิธีการแก้ปัญหาที่ฉันมี - มันปรากฏ # ซ้ำที่ดีที่สุดคือ 5,000 ในกรณีของฉันที่มีความแม่นยำที่สูงที่สุดใกล้กับ 0.70 (จุดข้อมูลแรกในการวางแผนของฉัน) แต่ดูเหมือนว่าผิด การวนซ้ำมากขึ้นควรนำไปสู่ความแม่นยำที่สูงขึ้นไม่ใช่ต่ำลงใช่ไหม
RobertF

1
@RobertF ก่อนอื่นฉันคิดว่าคุณไม่จำเป็นต้องเปลี่ยนการยอมรับเป็นปัจจัย มันทำงานได้ดีเช่นกัน: mod = gbm (ยอมรับ ~., data = mydata [, - 5], n.trees = 100000, การหดตัว = 0.001, interaction.depth = 2, n.minobsinnode = 10, cv.folds = 5 , verbose = TRUE, n.cores = 2) คุณสามารถดูว่า gbm เลือกตัวเลือกที่เหมาะสมที่สุดโดย: best.iter <- gbm.perf (mod, method = "OOB", plot.it = TRUE, oobag.curve = TRUE, overlay = TRUE) นั่นคือเมื่อการเปลี่ยนแปลงในความเบี่ยงเบนเปลี่ยนเป็นลบ (ดูพล็อตที่สร้างจากสิ่งนี้)
horaceT

1
@RobertF อีกสิ่งหนึ่ง ด้วยการระบุ n.trees = (หนึ่งล้าน) ในการเรียก gbm คุณจะต้องใช้การวนซ้ำทั้งหมดตั้งแต่ 1 ถึง 1,000,000 ดังนั้นคุณไม่จำเป็นต้องใช้คาเร็ทในการทำเพื่อคุณ
horaceT

1
@RobertF ติดตามเพิ่มเติม ฉันเพิ่งวิ่ง 100k ต้น / ซ้ำ ความแม่นยำที่ฉันได้รับจากการเลือกการวนซ้ำที่ดีที่สุดด้วย gbm.perf คือ 0.7225 ซึ่งใกล้เคียงกับที่คุณใช้ตารางการทำซ้ำทั้งหมด
horaceT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.