이번 절도 모델 평가 관련 실습 코드를 작성하였으니, 참고하시기 바란다.

 

선형 회귀(Linear Regression) 실습 - C++ 소스 코드

아래 사이트에 선형 회귀를 C++로 직접 구현한 소스 코드를 업로드하고 있다. 21.02.21 - 릿지회귀(ridge regression) 및 보스턴 주택가격 데이터세트(Boston Housing Dataset) 풀이를 올렸다. 21.02.15 - 연립방..

swjman.tistory.com

 

 

교재링크(광고 아님): freelec.co.kr/book/인공지능을-위한-수학/

 

 

튜닝(tuning)

머신러닝에서 데이터세트를 학습 데이터와 테스트 데이터로 나눠서 학습 후 검증을 수행하는 것을 반복하는 것. 즉, 학습 데이터와 테스트 데이터를 다양하게 나눠서 수행해보는 것을 뜻함.

 

교차 검증(cross-validation)

데이터세트를 2개 이상의 세트로 나눠서 일부는 학습세트(training set)로 사용하고, 나머지는 검증세트(validation set 또는 testing set)로 사용하여 검증하는 방식

 

홀드아웃법(holdout method)

데이터세트를 두 세트로만 나눠서 학습세트와 시험세트(test set)로 이용한다. 일반적으로 학습세트가 시험세트보다 사이즈가 더 크다. 영문위키에 따르면 교차 검증으로 분류하지 않는 경우가 많다고 한다.

 

k-분할 교차 검증법(k-fold cross-validation)

데이터세트를 k개의 세트로 나눈 후 학습세트와 테스트세트를 순차적으로 조합하여 시험하는 방식. 만약 k를 10으로 놓으면 10개의 세트가 나오고, 테스트세트에 1개 세트만 할당하도록 하면,

학습(1, 2, 3, 4, 5, 6, 7, 8, 9) : 테스트(10)

학습(1, 2, 3, 4, 5, 6, 7, 8, 10) : 테스트(9)

학습(1, 2, 3, 4, 5, 6, 7, 9, 10) : 테스트(8)

...

이런 식으로 조합 된다.

 

잔차(residual)

관측값과 예측값의 차이를 말한다. 자세한 설명은 여기 -> swjman.tistory.com/108

 

평균제곱오차(mean squared error, MSE)

잔차들을 제곱하여 더한 후 n으로 나누는 즉 평균을 내는 것을 뜻한다. 잔차는 일종의 에러(error)라고 볼 수 있는데, 이에 대한 평균을 통해 모델 식의 에러가 얼마나 큰지 알 수 있을 것이고, 그 크기에 따라 모델이 실제 데이터와 잘 맞는지 아닌지를 판별할 수 있다. 영문위키에 따르면 MSE는 여러가지 문제가 있어 평균절대오차(mean absolute error)를 더 권하기도 한단다.

MSE의 수식 표현은 아래와 같다.

$$ r_i = y_i - \hat{y_i} $$ $$ 잔차 = 관측값 - 예측값 $$ $$ MSE = \frac{1}{n} \sum_{i=1}^{n}{{r_i}^2} $$

 

결정계수(coefficient of determinantion)

종속변수의 변화 정도를 이용하여 모델의 향후 예측이 얼마나 정확하게 들어맞을지를 유추할 수 있는 계수이다. 즉, 0.7이 나온다면 대략 70% 정도 들어 맞을 것이라고 생각해도 무방하다고 한다. 기호로는 R2 라고 하며 "R squared" 라고 읽는단다. 우리는 그냥 "알 제곱" 하면 되겠다.

수식을 나열할텐데, 교재는 MSE를 이용한 반면에 영문위키는 잔차의 제곱합(residual sum of squares, RSS)만 이용한다. MSE를 이용하면 총제곱합(total sum of squares, TSS)을 이용하는 것은 같지만, 분모도 1/n을 해줘야 하기 때문에 수식이 아주 약간 지저분해진다. 때문에 영문위키의 수식을 나열해볼까 한다.

$$ \overline{y} = \frac{1}{n} \sum_{i=1}^{n}{y_i} \quad(\text{y는 관측값})$$

$$ SS_{tss} = \sum_{i=1}^{n}{(y_i - \overline{y})^2} $$

$$ r_i = y_i - \hat{y_i} \quad(\text{잔차 = 관측값 - 예측값}) $$

$$ SS_{rss} = \sum_{i=1}^{n}{{r_i}^2} $$

$$ R^2 = 1 - \frac{SS_{rss}}{SS_{tss}} $$

쭉 늘여 써보면

$$ R^2 = 1 - \frac{ \sum_{i=1}^{n}({y_i - \hat{y_i})^2} }{ \sum_{i=1}^{n}{(y_i - (\frac{1}{n} \sum_{i=1}^{n}{y_i}))^2} } $$

 

마지막으로 교재에서는 결정계수가 음수가 나오지 않는다고 되어 있으나, 영문위키에 따르면 예측결과가 후지다면 음수도 나올 수 있다고 한다.


이 번 절은 사실 깊이 공부하지 않고, 대충 넘어갔다. 왜냐하면 공부하는 입장에서는 검증, 평가 등에 집중할 필요가 없기 때문이다. 현업에서야 가장 중요하다고도 할 수 있는 프로세스지만, 공부할때는 원리도 모르는데 검증이 웬 말이겠는가. 다만, 실습의 완결 측면에서 필요하다 생각하여 코딩까지는 해보았고, 아래와 같은 실습 결과물을 남겨 두었다. (맨위의 github 프로젝트를 다운 받으면 실행해 볼 수 있다.)

 

 

 

Posted by JMAN