-
R 을 이용한 linear regression 연습 (underfitting and overfitting)R 2021. 3. 10. 12:06
오늘은 R 을 이용해서 linear regression의 underfitting과 overfitting을 연습해보자.
이번 시뮬레이션에서는 데이터를 랜덤하게 만들어서 모델을 정의한 후 시뮬레이션 돌려보았다.
먼저 다음의 코드를 입력해준다.
library(MASS)
# zero-mean vector
mu=rep(0, 3)
# multivariate gaussian covariance matrix.
Sigma=matrix(c(1,0.5,0.5,0.5,1,0.5,0.5,0.5,1),nrow=3)
# True beta 를 정의한다. ($\beta = [1,2,3,0]^T$)
beta_0=1
beta_1=2
beta_2=3
beta_3=0
Beta=matrix(c(beta_0,beta_1,beta_2,beta_3),nrow=4)
# 데이터 수.
n=1000
# X 데이터를 랜덤하게 만든다. (mu 가 $3$-dimensional vector 이므로 $1000\times 3$ 데이터 행렬이 생성됨.)
X<- mvrnorm(n , mu,Sigma)
# bias $1$ 을 첫번째 행에 붙여넣는다. 결과적으로 $1000\times 4$ 행렬이 된다.
X_extended=cbind(rep(1,n), X)
# random noise $\epsilon$을 위한 표준편차.
sigma=1
# $\epsilon$은 standard normal distribution 을 따른다.
epsilon<-matrix(rnorm(n,sd=sigma^2),nrow=n)
# linear model
Y<- X_extended%*%Beta+epsilonLinear model:
$$\mathbf{Y} = \mathbf{X}\mathbf{\beta} + \mathbf{\epsilon},$$
여기서 $\beta = [1,2,3,0]^T$ 으로 정의하였다.
1개의 데이터로 보면 다음과 같다.
$$y_i = \beta_0 + \beta_1 x_{i,1} + \beta_2 x_{i,2} + \epsilon$$
$\beta_3 x_{i,3}$ 항이 없는 이유는 위의 코드와 같이 $\beta_3=0$ 으로 하였기 때문이다.
따라서 linear regression 을 $X[:,1]$ 과 $X[:,2]$에 대해서 실행해보면,
lm=lm(Y~X[,1]+X[,2])
summary(lm)다음과 같은 결과를 볼 수 있다.
linear regression 결과 위의 결과를 보면 $\beta_0,\beta_1,\beta_2$ 값을 제대로 찾은결과가 나온다. (Coefficient 에서 estimate 부분)
제대로 모델을 알고 linear regression을 적용한 결과를 보았고, 이제 underfitting 되었을때는 어떻게 변하는지 살펴보려 한다.
Underfitting model:
$$y_i=\beta_0 + \beta_1 x_{i,1} + \epsilon_i$$
$\beta_0,\beta_1$ 값을 추정해보자.
다음의 코드를 입력해보면,
unlm=lm(Y~X[,1])
summary(unlm)underfitting 위와 같은 under fitting 결과를 얻게 된다.
추정값 $\hat{\beta}_0 = 1.19234$는 실제값 $\beta_0=1$ 과 비슷하게 나오긴 했지만 에러가 더 심해진것을 볼 수 있다.
추정값 $\hat{\beta}_1=3.44695$는 실제값 $\beta_1=2$ 보다 많이 다른값을 갖게 된다. 에러역시 더 심해졌다.
결과적으로 under fitting 상황에서는 coefficient값이 실제값과 다르게 나올 수 있는것을 확인하였다. 에러 역시 증가하였고 R-square 값도 낮아진것을 볼 수 있다.
이제 overfitting 상황을 가정해보자.
Overfitting model:
$$y_i=\beta_0 + \beta_1 x_{i,1} + \beta_2 x_{i,2}+\beta_3 x_{i,3}+ \epsilon_i$$
$\beta_0,\beta_1,\beta_2,\beta_3$ 을 estimate 해보자.
overlr=lm(Y~X[,1]+X[,2]+X[,3])
summary(overlr)위의 코드를 실행하면 다음과 같은 결과를 얻는다.
overfitting 결과를 보면,
$\hat{\beta}_0=1.02$, $\hat{\beta}_1=1.94$, $\hat{\beta}_2=2.99$, $\hat{\beta}_3=-0.0008$ 으로,
실제 값 $\beta_0=1,\beta_1=2,\beta_3=3,\beta_3=0$ 와 거의 일치하는 것을 볼 수 있다.
Overfitting 경우에 각 coefficient들은 잘 예측이 된다.
이 결과만 보면 overfitting이 발생해도 괜찮은게 아닌가? 하는 생각이 든다.
하지만 coefficient의 varaince가 증가하는 효과가 overfitting이 되면 생기기 때문에 최대한 발생하지 않도록 하는게 좋다. (variance가 크면 데이터마다 상당히 다른 coefficient값이 나오기 쉽다고 생각하면 될 것 같다.)
오늘도 공부 끝~!
'R' 카테고리의 다른 글
R 을 이용한 Linear regression 연습하기 (Rohwer data set in heplots R package) (0) 2021.03.08