728x90

지난 시간에 모형을 평가하는 지표로 MSE, MAE,MAPE 를 설명한 바 있습니다.

이번 시간은 이 중에서 MSE(Mean Squared Error)  구하는 실습을 해 보겠습니다.

제가 강의에 자주 사용하는 패키지 {stats}에 들어 있는 데이터 mtcars 를 이용합니다.

보다 세부적인 내용은 유명한 ISLR(An Introduciton to Statitical Learning)을 보시면 많은 도움이 되실 겁니다.

 

data(mtcars)

str(mtcars)

set.seed(123) # 매번 동일한 난수 생성

ran1 <- sample(32,20) # 32개의 숫자를 이용, 20개의 난수 발생

ran1 # 난수 확인

train_mt <- mtcars[ran1,] # 생성된 난수이용, 훈련 데이터 20개 생성

test_mt <- mtcars[-ran1,] # 생성된 난수 이용, 테스트 데이터 12개 생성

train_mt # 훈련데이터 20개 확인

test_mt # 테스트 데이터 12개 확인

 

model_lm <- lm(mpg~cyl,data=train_mt) # train 데이터로 회귀분석

pred <- predict(model_lm,train_mt) # train 데이터 회귀모델로 예측

pred # 예측된 값 확인

mean((train_mt$mpg-pred)^2) # train 데이터 MSE 계산(원래 목적 아님)

 

model_lm <- lm(mpg~cyl,data=train_mt) # train 데이터로 회귀분석
pred <- predict(model_lm,test_mt)     # test 회귀모델로 예측
pred    # 예측된 값 확인 
mean((test_mt$mpg-pred)^2)    # test 데이터 MSE 계산(원래 목적 ^^^)

[설명]

data(mtcars)

str(mtcars)

set.seed(123) # 매번 동일한 난수 생성

ran1 <- sample(32,20) # 32개의 숫자를 이용, 20개의 난수 발생

ran1 # 난수 확인

train_mt <- mtcars[ran1,] # 생성된 난수이용, 훈련 데이터 20개 생성

test_mt <- mtcars[-ran1,] # 생성된 난수 이용, 테스트 데이터 12개 생성

train_mt # 훈련데이터 20개 확인

test_mt # 테스트 데이터 12개 확인

여기에서 난수를 발생하여 20개의 데이터를 추출합니다. 나머지 데이터를 test 데이터로 사용합니다.

 

 

model_lm <- lm(mpg~cyl,data=train_mt) # train 데이터로 회귀분석

pred <- predict(model_lm,train_mt) # train 데이터 회귀모델로 예측

pred # 예측된 값 확인

mean((train_mt$mpg-pred)^2) # train 데이터 MSE 계산(원래 목적 아님)

회귀분석 모형을 이용하여 예측치(pedict)를 구합니다.

(실제값-예측치 , error)를 구하여 각 값에 제곱(square)을 하고 평균값(mean)을 구합니다.

MSE 들 구합니다. 이것은 예측할 때에도 (테스트데이터를 사용하지 않고) 훈련데이터를 사용하여 보았습니다.

이것은 원래의 목적이 아닙니다.

 

model_lm <- lm(mpg~cyl,data=train_mt) # train 데이터로 회귀분석

pred <- predict(model_lm,test_mt) # test 회귀모델로 예측

pred # 예측된 값 확인

mean((test_mt$mpg-pred)^2) # test 데이터 MSE 계산(원래 목적 ^^^)

테스트 데이터를 이용하여 MSE 를 구합니다.

 

여기서 궁금:

32개의 데이터에서 test 데이터(20개)를 추출하고, 나머지 train 데이터(12개)에 적용하여

MSE를 구했는데 이렇게 한 번만 구한 MSE 를 얼마나 신뢰를 할 수 있을까요?
적어도 여러 번 작업을 하여 MSE를 구해 보는 것이 신뢰성이 더해 지겠지요?

이 방법이 K-fold CV(Cross Validatrion), LOO(Leave-One-Out) CV 등이 있습니다.

이것에 대해서는 추후에 보완하도록 하겠습니다...

 

+ Recent posts