Chcę zbudować model regresji, który jest średnią z wielu modeli OLS, każdy oparty na podzbiorze pełnych danych. Idea tego opiera się na tym dokumencie . Tworzę k fałd i buduję k modeli OLS, każdy na danych bez jednego z fałd. Następnie uśredniam współczynniki regresji, aby uzyskać ostateczny model.
Uderza mnie to podobnie do przypadkowej regresji leśnej, w której drzewa regresji są budowane i uśredniane. Wydajność uśrednionego modelu OLS wydaje się jednak gorsza niż po prostu budowanie jednego modelu OLS na całych danych. Moje pytanie brzmi: czy istnieje teoretyczny powód, dla którego uśrednianie wielu modeli OLS jest błędne lub niepożądane? Czy możemy spodziewać się uśrednienia wielu modeli OLS w celu ograniczenia nadmiernego dopasowania? Poniżej znajduje się przykład 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
źródło
Odpowiedzi:
Biorąc pod uwagę, że OLS minimalizuje MSE z reszt wśród wszystkich nieobciążonych estymatorów liniowych (na mocy twierdzenia Gaussa-Markowa), a średnią ważoną nieobciążonych estymatorów liniowych (np szacowany liniowy funkcji z każdego z fałd) sama jest bezstronna estymator liniowy, musi być tak, że OLS zastosowany do całego zestawu danych przewyższy średnią ważoną regresji liniowych, chyba że przypadkowo oba dadzą identyczne wyniki.kk k
Jeśli chodzi o nadmierne dopasowanie - modele liniowe nie są podatne na nadmierne dopasowanie w taki sam sposób, jak na przykład maszyny do zwiększania gradientu. Do tego dochodzi egzekwowanie liniowości. Jeśli masz bardzo małą liczbę wartości odstających, które odciągają linię regresji OLS daleko od miejsca, w którym powinna być, twoje podejście może nieznacznie - tylko nieznacznie - złagodzić szkody, ale istnieją znacznie lepsze podejścia do radzenia sobie z tym problemem w kontekście bardzo niewielka liczba wartości odstających, np. solidna regresja liniowa lub po prostu wykreślanie danych, identyfikowanie, a następnie usuwanie wartości odstających (przy założeniu, że faktycznie nie są one reprezentatywne dla procesu generowania danych, którego parametry są zainteresowane oszacowaniem).
źródło
Co z uruchomieniem paska startowego? Utwórz 100-1000 powtórzonych próbek ze 100% częstotliwością próbkowania, używając nieograniczonego losowego próbkowania (próbkowanie z wymianą). Uruchom modele replikując i uzyskaj medianę dla każdego współczynnika regresji. Lub spróbuj wrednie. Spójrz również i rozkład każdego współczynnika, aby zobaczyć, czy zmieniają się znaki i jakie skumulowane wartości rozkładu.
źródło