ISLR :: 5.2 The Bootstrap
5.2 The Bootstrap
bootstrap์ learning method ๋๋ ์ฃผ์ด์ง ์ถ์ ๋(estimator)๊ณผ ๊ด๋ จ๋ ๋ถํ์ค์ฑ์ ์๋ํํ๋๋ฐ ์ฌ์ฉ๋ ์ ์๋
์์ฃผ ๊ฐ๋ ฅํ๋ฉด์๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํต๊ณ์ tool์ด๋ค.
๊ฐ๋จํ ์๋ก, bootstrap์ linear regression fit์์ ๊ตฌํ coefficient์ standard errors๋ฅผ ์ถ์ ํ๋๋ฐ ์ฌ์ฉ๋ ์ ์๋ค.
(์ฌ์ค linear regression ๊ฒฝ์ฐ์๋ R์์ ํ์ค์ค์ฐจ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ์ง ์์ ์ ์์ง๋ง,
bootstrap์ ๊ฐ์ ์ R์์ ์ ๊ณตํ์ง ์๊ฑฐ๋ ๋ณ๋์ฑ์ ์ธก์ ์ด ์ด๋ ค์ด learning method์ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉ๋ ์ ์๋ค. )
๋ชจ์ง๋จ์ผ๋ก๋ถํฐ ๋
๋ฆฝ์ ์ธ data-set๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ์ป๋ ๋์ ์,
original data-set์ผ๋ก๋ถํฐ ๋ฐ๋ณต์ ์ผ๋ก ๊ด์ธก์น๋ฅผ samplingํ์ฌ ๋ณ๊ฐ์ data-set์ ์ป๋๋ค.
์ ๊ทธ๋ฆผ์ ๊ด์ธก์น๊ฐ ๋ฌ๋ 3๊ฐ๋ฟ์ธ (n=3) ๊ฐ๋จํ Z data-set(Original Data)์ bootstrap ๊ธฐ๋ฒ์ ์ ์ฉํ ์์ด๋ค.
bootstrap data-set ()์ ๋ง๋ค๊ธฐ ์ํด, data-set Z ๋ก๋ถํฐ ์์๋ก n๊ฐ์ ๊ด์ธก์น๋ฅผ ์ ํํ๋ค.
: sampling๋ฐฉ๋ฒ์ original data-set์ผ๋ก๋ถํฐ ๋ณต์์ถ์ถ (with replacement).
์ด ์์์, bootstrap data-set์ ๋ณด๋ฉด, 3๋ฒ์งธ ๊ด์ธก์น๊ฐ ๋๋ฒ, ์ฒซ๋ฒ์งธ ๊ด์ธก์น๊ฐ ํ๋ฒ, ๋๋ฒ์งธ ๊ด์ธก์น๋ ์๋ค.
bootstrap data-set์ ์ฌ์ฉํ์ฌ,
์ ๋ํ ์๋ก์ดbootstrap ์ถ์ ์น(
)๋ฅผ ๊ตฌํ๋ค.
์ด๋ค ํฐ ์ B๋ฅผ ์ ํ๊ณ , ์ด ๊ณผ์ ์ B๋ฒ๋งํผ ๋งํผ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ค๊ณ ํ๋ฉด,
์๋ก ๋ค๋ฅธ bootstrap data-set๋ค์ ์ฌ์ฉํ์ฌ ๋์๋๋ bootstrap ์ถ์ ์น
๊ตฌํ๋ค.
์๋ ๊ณต์์ ์ด์ฉํ์ฌ ์์ bootstrap ์ถ์ฒญ์น๋ค์ ํ์ค์ค์ฐจ(standard error)๋ฅผ ๊ณ์ฐํ๋ฉด,
====================================
์์ > ๊ฐ์ฅ ์ข์ ํฌ์๋ฐฐ๋ถ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ์์
– X, Y(์์์ ์)๋งํผ์ ์์ต์ ๋ด๋ 2๊ฐ์ ๊ธ์ต์์ฐ์ ๊ณ ์ ๋ ๊ธ์ก์ ๋ถ์ฐํฌ์ํ๊ณ ์ ํ๋ค.
– ๊ณ ์ ๋ ์๊ธ์ b ๋น์จ ๋งํผ์ X ์, ๋๋จธ์ง 1โb ๋งํผ Y์ ํฌ์ํ๋ค.
๋ ์์ฐ์ ๋ํ ํฌ์์์ต๊ณผ ๊ด๋ จ๋ ๋ณ๋์ฑ์ด ์กด์ฌํ๋ฏ๋ก, ํฌ์์ ๋ํ ์ ์ฒด ์ํ(๋๋ ๋ถ์ฐ)์ ์ต์ํํ๋ b ๋ฅผ ์ฐพ๊ณ ์ ํ๋ค.
์ฆ, ์์์ผ๋ก ํํํ๋ฉด Var(bX -(1-b)Y) ๋ฅผ ์ต์๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ํ์ ์ต์๋ก ๋ง๋ค๊ธฐ ์ํ ์์ ๋ค์๊ณผ ๊ฐ๊ณ ,
ํ์ค์์ ๊ตฌํ ์ ์๋ ํธ์ฐจ๋ฅผ ์ถ์ ์น๋ก ๋์
ํ๋ฉด,
์ฌ๊ธฐ์,
,
,
๋ ์์ ์๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์, X์ Y์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ฌ์ฉํ์ฌ X์ Y๋ฅผ ์ถ์ ํ๋ค.
์ถ์ ๊ฐ์ ์ ์์ ๋์
ํ๊ณ , ํฌ์์ ๋ถ์ฐ์ ์ต์ํํ๋ b ๊ฐ์ ์ถ์ ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค.
simulated ๋ฐ์ดํฐ์
์์ ฮฑ ๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ๊ธฐ๋ฒ์ ์ค๋ช
๊ฐ ํจ๋์๋ X์ Y 100์ ๋ฐ์ดํฐ์ ๋ํ ๋ชจ์ํฌ์์์ต์ผ๋ก ํ๊ธฐํ๊ณ , ์ด๋ฐ ๋ชจ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ,
,
๋ฅผ ์ถ์ ํ์๋ค.
์ถ์ ๋ ,
,
์ ์ ์์ ๋์
ํ์ฌ b ์ถ์ ์น๋ฅผ ์ป์ ์ ์๋ค. ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ป์ด์ง
๋ 0.532์์ 0.657์ ๋ฒ์๋ฅผ ๊ฐ๋๋ค.
b์ ๋ํ ์ถ์ ์น ๋ ์๊ณ๋ฐฉํฅ์ผ๋ก 0.576, 0.532, 0.657, 0.651์ด๋ค.
๊ทธ๋ผ ์ ๋ํ ์ผ๋ง๋ ์ ํํ ๊น?
์๋ํ๋ ์ ํ์ฑ์ ๊ธฐ์ค์ธ ์ ํ์คํธ์ฐจ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด,
100๊ฐ์ ์์ผ๋ก ๊ตฌ์ฑ๋ X , Y ๊ด์ธก์น๋ฅผ ์์ฑํ์ฌ ์ ์์ ๋์
ํ์ฌ ์ ๊ฐ์ฐํ๋ ๊ณผ์ ์ 1000๋ฒ ๋ฐ๋ณตํ๋ค.
์ด๋ ๊ฒ ๊ตฌํ 1,000๊ฐ์ (
)์ผ๋ก ํ์คํ ๊ทธ๋จ์ ๊ทธ๋ ค๋ณด๋ฉด ์๋ ์ผ์ชฝ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
์ด ๋ชจ์์คํ์ ์ํด ๋ชจ์๋ค์ =1,
=1.25,
=0.5๋ก ์ค์ ๋๊ณ ,
=
= 0.6 True b ๊ฐ์ 0.6 ์ด๋ค๋ผ๊ณ ์์ ์๋ค.
True b๋ ํ์คํ ๊ทธ๋จ์์ ์ค์ ์ผ๋ก ํ๊ธฐํ๊ณ ,
b์ ๋ํ 1,000๊ฐ์ ์ถ์ ์น( )์ ์ ์ฒดํ๊ท ์
=0.5996์ผ๋ก True b๊ฐ 0.6์ ๋งค์ฐ ๊ฐ๊น๋ค.
์ถ์ ์น์ ํ์ค์ค์ฐจ๋ = 0.083 ์ด ๊ฒฐ๊ณผSE(
)๋
์ ์ ํ๋๋ผ๊ณ ํ ์ ์๋ค.
5.3.4 The Bootstrap
library(ISLR) ### DATA Loading data("Portfolio") str(Portfolio); head(Portfolio)
'data.frame': 100 obs. of 2 variables: $ X: num -0.895 -1.562 -0.417 1.044 -0.316 ... $ Y: num -0.235 -0.885 0.272 -0.734 0.842 ... X Y 1 -0.8952509 -0.2349235 2 -1.5624543 -0.8851760 3 -0.4170899 0.2718880 4 1.0443557 -0.7341975 5 -0.3155684 0.8419834 6 -1.7371238 -2.0371910
ํต๊ณ๋(Statistic)์ ์ ํ์ฑ ์ถ์
bootstrap ์ ๊ทผ๋ฒ์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ๋ณต์กํ ์ํ๊ณ์ฐ์์ด๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ผ๋ ๊ฒ์ด๋ค
R์์ bootstrap ๋ถ์์ ์คํํ๋ ค๋ฉด ๋๋จ๊ณ ์์
์ด ํ์ํ๋ค.
1. ํต๊ณ๋์ ๊ณ์ฐํ๋ ํจ์ ์์ฑ
2. boot()์ ์ฌ์ฉํ์ฌ, ๊ด์ธก๊ฐ๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ๋ณต์์ถ์ถํ๋ bootstrap ์ํ
1. ํต๊ณ๋์ ๊ณ์ฐํ๋ ํจ์ ์์ฑ – b.fn()
b.fn() ํจ์๋ input์ผ๋ก data์ index๋ฅผ ๋ฐ๊ณ , ouput์ผ๋ก b์ ์ถ์ ๊ฐ return ํ๋ค.
– input data: (X, Y)๋ฐ์ดํฐ
– input index: ์ด๋ค ๊ด์ธก๊ฐ์ด b๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฒกํฐ
– output : ์ ํ๋ ๊ด์ธก๊ฐ์ ๊ธฐ๋ฐํ์ฌ ฮฑ์ ์ถ์ ๊ฐ์ return
b.fn <- function(data,index){ X <- data$X[index] Y <- data$Y[index] return ( (var(Y) - cov(X,Y)) / (var(X)+var(Y)-2*cov(X,Y)) ) # estimate b }
b.fn(Portfolio, 1:100) ์ 100๊ฐ์ ๊ด์ธก๊ฐ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ b ์ถ์ ํ๋ค.
b.fn(Portfolio, 1:100)
[1] 0.5758321
seed๋ฅผ ์ ํ๊ณ , sample()์ ์ฌ์ฉํ์ฌ 1~100๊น์ง ๊ด์ธก๊ฐ์ ์์๋ก ๋ณต์์ถ์ถํ๋ค.
=> ์ด๋ ์๋ก์ด bootstrap ๋ฐ์ดํฐ์
์ ๋ง๋ค์ด b ์ถ์ ๊ฐ์ ๋ค์ ๊ณ์ฐํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
library(boot) set.seed(1) b.fn(Portfolio, sample(x=100,size=100,replace=TRUE,prob=NULL))
[1] 0.5963833
2. boot()์ ์ฌ์ฉํ์ฌ, ๊ด์ธก๊ฐ๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ๋ณต์์ถ์ถํ๋ bootstrap ์ํ
boot()๋ ์์ ๊ฐ์ ์์
์ ์ฌ๋ฌ๋ฒ ์คํํ์ฌ b ์ ๋์ํ๋ ๋ชจ๋ ์ถ์ ๊ฐ์ ๊ตฌํ๊ณ , ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํ๊ฒ ํด ์ค๋ค.
b์ ๋ํ R=1000์ธ bootstrap ์ถ์ ์น
output ์ ๋ณด๋ฉด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด, = 0.575821์ด๊ณ ,
SE() ์ bootstrap ์ถ์ ์น๋ 0.08861826
boot(data=Portfolio, statistic=b.fn, R=1000)
ORDINARY NONPARAMETRIC BOOTSTRAP Call: boot(data = Portfolio, statistic = b.fn, R = 1000) Bootstrap Statistics : original bias std. error t1* 0.5758321 -7.315422e-05 0.08861826
๋๋ต์ ์ผ๋ก ๋งํ๋ฉด, ๋ชจ์ง๋จ์ผ๋ก๋ถํฐ ํ๋์ random sample ์ ๋ํ์ฌ ์ b ์ ํ๊ท ์ ์ผ๋ก ์ฝ 0.08 ๋งํผ ์ฐจ์ด๊ฐ ๋๋ค๊ณ ๊ธฐ๋ํ ์ ์๋ค.
๊ทธ๋ฌ๋ ํ์ค์์๋ ์์์ ๊ตฌํ SE()์ estimating ์ ์ฐจ๋ ์ ์ฉ๋ถ๊ฐํ๋ค.
์๋๋ฉด, ์ค์ ๋ฐ์ดํฐ์์๋ ์๋์ ๋ชจ์ง๋จ์ผ๋ก๋ถํฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ bootstrap approach๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด sample set๋ค์ ์ป๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฐฉํ์ฌ ์คํ(์๋ฎฌ๋ ์ดํธ)ํ๊ธฐ ๋๋ฌธ์
์ถ๊ฐ์ ์ธ ํ๋ณธ์ ์์ฑํ๋ ๊ฒ ์์ด๋ ์ ๋ณ๋์ ์ถ์ ํ ์ ์๋ค.
bootstrap ์ถ์ ์น SE()๋ 0.088์ด๊ณ , 1,000๊ฐ์ ๋ชจ์ ๋ฐ์ดํฐ์
์ ์ด์ฉํ์ฌ ์ป์ ์ถ์ ์น 0.083๊ณผ ๋งค์ฐ ๋น์ทํ๋ค.
<ALL>
#05.03.R library(ISLR) ### DATA Loading data("Portfolio") str(Portfolio); head(Portfolio) ############################################################################# b.fn <- function(data,index){ X <- data$X[index] Y <- data$Y[index] return ( (var(Y) - cov(X,Y)) / (var(X)+var(Y)-2*cov(X,Y)) ) # estimate b } b.fn(Portfolio, 1:100) #install.packages("boot") library(boot) set.seed(1) b.fn(Portfolio, sample(x=100,size=100,replace=TRUE,prob=NULL)) boot(Portfolio, b.fn, R=1000)
===================================================================
boot.result<-boot(data=Portfolio, statistic=b.fn, R=1000) head(boot.result$t) ggplot(data = NULL, aes(x=boot.result$t))+ ggtitle("estimates of b") + geom_histogram( binwidth=0.04, fill="steel blue", color="black") + geom_vline(xintercept=boot.result$t0, colour="pink", linetype="longdash") + geom_vline(xintercept=0.60, colour="red") + xlab("b")
bootstrap ์ ๊ทผ๋ฒ์ด ์ ๊ด๋ จ๋ ๋ณ๋์ฑ์ ํจ๊ณผ์ ์ผ๋ก ์ถ์ ํ๋๋ฐ ์ฌ์ฉ๋ ์ ์์์ ๋งํด์ค๋ค.