มีปัญหาทางทฤษฎีเกี่ยวกับค่าสัมประสิทธิ์การถดถอยเฉลี่ยเพื่อสร้างแบบจำลองหรือไม่?


13

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

สิ่งนี้ทำให้ฉันรู้สึกคล้ายกับบางอย่างเช่นการถดถอยของป่าแบบสุ่มซึ่งต้นไม้การถดถอยจำนวนมากถูกสร้างและเฉลี่ย อย่างไรก็ตามประสิทธิภาพของแบบจำลอง OLS โดยเฉลี่ยดูเหมือนจะแย่กว่าการสร้างแบบจำลอง OLS เพียงตัวเดียวบนข้อมูลทั้งหมด คำถามของฉันคือ: มีเหตุผลทางทฤษฎีว่าทำไมค่าเฉลี่ยหลายรุ่น OLS ผิดหรือไม่พึงประสงค์? เราคาดหวังว่าค่าเฉลี่ยของ OLS หลายรุ่นเพื่อลดการ overfitting หรือไม่ ด้านล่างเป็นตัวอย่าง R

#Load and prepare data
library(MASS)
data(Boston)
trn <- Boston[1:400,]
tst <- Boston[401:nrow(Boston),]

#Create function to build k averaging OLS model
lmave <- function(formula, data, k, ...){
  lmall <- lm(formula, data, ...)
  folds <- cut(seq(1, nrow(data)), breaks=k, labels=FALSE)
  for(i in 1:k){
    tstIdx <- which(folds==i, arr.ind = TRUE)
    tst <- data[tstIdx, ]
    trn <- data[-tstIdx, ]
    assign(paste0('lm', i), lm(formula, data = trn, ...))
  }

  coefs <- data.frame(lm1=numeric(length(lm1$coefficients)))
  for(i in 1:k){
    coefs[, paste0('lm', i)] <- get(paste0('lm', i))$coefficients
  }
  lmnames <- names(lmall$coefficients)
  lmall$coefficients <- rowMeans(coefs)
  names(lmall$coefficients) <- lmnames
  lmall$fitted.values <- predict(lmall, data)
  target <- trimws(gsub('~.*$', '', formula))
  lmall$residuals <- data[, target] - lmall$fitted.values

  return(lmall)
}

#Build OLS model on all trn data
olsfit <- lm(medv ~ ., data=trn)

#Build model averaging five OLS 
olsavefit <- lmave('medv ~ .', data=trn, k=5)

#Build random forest model
library(randomForest)
set.seed(10)
rffit <- randomForest(medv ~ ., data=trn)

#Get RMSE of predicted fits on tst
library(Metrics)
rmse(tst$medv, predict(olsfit, tst))
[1] 6.155792
rmse(tst$medv, predict(olsavefit, tst))
[1] 7.661 ##Performs worse than olsfit and rffit
rmse(tst$medv, predict(rffit, tst))
[1] 4.259403

2
คุณอาจลองใช้ค่าสัมประสิทธิ์มัธยฐานแทนค่าสัมประสิทธิ์เฉลี่ย ฉันได้เห็นแล้วว่าเทคนิคนี้บางครั้งอาจให้ผลลัพธ์ที่ดีกว่า
James Phillips

มันอาจจะไม่ให้ประสิทธิภาพที่เพิ่มขึ้นหรือลดลงเกินความเหมาะสม แต่มันมีแอพพลิเคชั่นที่มีประโยชน์อื่น ๆ แชปนี้ใช้เพื่อเลือกแนวโน้มที่ถูกต้องสำหรับข้อมูลซีรีย์สตรีมเวลาyoutube.com/watch?v=0zpg9ODE6Ww&index=64&list=WL
josh

คำตอบ:


14

kk

สำหรับ overfitting - ตัวแบบเชิงเส้นไม่ได้มีแนวโน้มที่จะ overfitting ในลักษณะเดียวกับที่ยกตัวอย่างเช่น Gradient Boosting Machines การบังคับให้เป็นเส้นตรงเห็นว่า หากคุณมีค่าผิดปกติจำนวนน้อยมากที่ดึงเส้นถดถอย OLS ของคุณออกไปจากตำแหน่งที่ควรแนวทางของคุณอาจเล็กน้อย - เพียงเล็กน้อย - แก้ไขความเสียหาย แต่มีวิธีการที่ดีกว่าในการจัดการกับปัญหานั้นในบริบทของ ค่าผิดปกติจำนวนน้อยมากเช่นการถดถอยเชิงเส้นที่มีประสิทธิภาพหรือเพียงแค่วางแผนข้อมูลระบุและลบค่าผิดปกติ (สมมติว่าพวกเขาไม่ได้เป็นตัวแทนของกระบวนการสร้างข้อมูลที่มีพารามิเตอร์ที่คุณต้องการประเมิน)


โดย "ดีกว่า" คุณหมายถึงจะมีการประมาณค่าสัมประสิทธิ์ที่ดีขึ้นหรือว่าจะดีกว่าวิธี kfold ทั่วกระดาน
Arash Howaida

มันจะมีค่า MSE ที่ต่ำกว่าส่วนที่เหลือกว่าวิธี k-fold ซึ่งหมายถึงโดยสมมติว่ารูปแบบการทำงานของแบบจำลองนั้นถูกต้องโดยเฉลี่ยแล้วมันจะมีการประมาณค่าสัมประสิทธิ์ที่ดีขึ้นและดีกว่าวิธี k-fold ทั่ว บอร์ด - เว้นแต่ว่าปัญหาเฉพาะของคุณจะระบุว่าเป็นเกณฑ์ที่แตกต่างกันเช่นหมายถึงข้อผิดพลาดที่แน่นอนซึ่งเป็นที่ต้องการของ MSE
jbowman

1

สิ่งที่เกี่ยวกับการใช้ bootstrap? สร้างตัวอย่าง 100-1000 ซ้ำด้วยอัตราการสุ่มตัวอย่าง 100% โดยใช้การสุ่มตัวอย่างแบบไม่ จำกัด (การสุ่มตัวอย่างด้วยการแทนที่) รันโมเดลโดยทำซ้ำและรับค่ามัธยฐานของสัมประสิทธิ์การถดถอยแต่ละตัว หรือลองใช้ค่าเฉลี่ย ดูที่และการกระจายของสัมประสิทธิ์แต่ละอย่างเพื่อดูว่าสัญญาณเปลี่ยนไปหรือไม่และมีค่าการกระจายแบบสะสมเท่าใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.