Week 03: Bagging


bootstrap aggregating의 short name이다.


어떤 복잡한 모델을 생성할때 여러번 겹쳐서 평균을 낸다면


bias와 variance를 동시에 캡쳐할 수 있다.


기본 아이디어

리샘플해서 모델을 만들고 리프리덱션해서 정확도를 계산해서

그것의 평균을 구하게 된다.

리샘플의 방법은 bootstrapping을 따르는 복원추출을 이용한다.


특징

비슷한 bias를 계속해서 누적하며

하지만 variance를 줄이는 효과가 있다.

이것은 non-linear function을 쓸때 가장 유용하다.



예제: Ozone data

install.packages("ElemStatLearn")
library(ElemStatLearn); data(ozone,package="ElemStatLearn")
ozone <- ozone[order(ozone$ozone),]
head(ozone)
    ozone radiation temperature wind
17      1         8          59  9.7
19      4        25          61  9.7
14      6        78          57 18.4
45      7        48          80 14.3
106     7        49          69 10.3
7       8        19          61 20.1

오존으로 정렬한것이다.

하려고하는것은 temperature를 ozone function으로 예측할려고 하는 것이다.


이제 수작업으로 bagging을 수행해보자.

10 by 155 짜리 matrix를 생성 한다.


10번동안 resampleling을 해서 데이터셋을 만들고

그것으로 smooth curve를 loess 함수를 이용해서 만들고

이것으로 prediction하고

평균을 구하게 된다.

ll <- matrix(NA,nrow=10,ncol=155)
for(i in 1:10){ #10번을 반복 수행함
    ss <- sample(1:dim(ozone)[1],replace=T) #복원 추출을 수행 한다.
    ozone0 <- ozone[ss,]; ozone0 <- ozone0[order(ozone0$ozone),] #데이터를 추출하고 ozone으로 정렬 한다
    loess0 <- loess(temperature ~ ozone,data=ozone0,span=0.2) # loess를 이용해서 예측 모델을 생성 한다.
    ll[i,] <- predict(loess0,newdata=data.frame(ozone=1:155)) 
    # 예측 모델을 이용해서 1~155사이의 오존을 예측한다. 
    #실제 오존은 168번까지 있다. 이것은 순차적이지 않으며, 중간 중가 결측값(NA)도 존재한다.
}

그리고 실제 Ozone과 temperature에 대한 것을 검은색 점으로 표현하고

예측한 값들을 선으로 연결해서 10개를 그리고

그 10개의 예측값을 편균으로해서 빨간색 선으로 그리면 아래와 같은 그래프를 얻을 수 있다.

plot(ozone$ozone,ozone$temperature,pch=19,cex=0.5)
for(i in 1:10){lines(1:155,ll[i,],col="grey",lwd=2)}
lines(1:155,apply(ll,2,mean),col="red",lwd=2)

위와 같이 bias는 높지만 변동은 더 줄어든 것을 볼 수 있다.



정리

bagging은 nonlinear model들에서 많이 사용된다.

tree에서 많이 사용된다. 이것을 확장한 것이 random forests 이다.


기억할것은 bagging이란 결국

데이터를 복원주출로 샘플링 한다음 비선형모델로 생성을 하고

그렇게 생성한 여러개의 모델을 평균화해서 좀더 variance(분산)이적은 부드러운 모델을 생성하는 것이다.

이러한 부드러운 모델은 각각 데이터 셋으로 모델링 했을 때는 나오기 어려운 것들이다. 즉 상대적으로 변동이 적은 그러나 bias는 높은 모델을 생성 하는 것이다. 그것이 bagging 이다.











+ Recent posts