데이터 마이닝 강의 중에…

강의 중에 생각했던 비선형 함수 모델 피팅의 어려움, 혹은 한계?

선형 함수, 비선형 함수 등등 예측의 문제에서 가장 큰 두 카테고리가 아닐 수 없는데, 왜 선형 함수 적합이 더 선호되고 가장 일반화시킬 수 있는 접근 방법인지… 한번 보자.

강의안에 있던 sin 함수 예측 예제가 있는데, 그 예제를 좀더 변형해 봤다.

install.packages("nnet")

inp1 <- seq(0,12,0.01)
out1 <- sin(inp1)
sin1 <- nnet(out1 ~ inp1, size=5, decay=1e-3, linout=T, rang=2, maxit=5000)
plot(predict(sin1,data.frame(inp1=seq(0,50, by=0.01))), pch="-", col="red")
lines(sin(seq(0,50, by=0.01)))

image

 

붉은 라인이 예측 값이고, 검정색 라인이 실제값이다.

실제 학습셋으로 들어갔던 곳까지는 모델 피팅이 아주 잘 되었으나 이 후 값들에 대해서는 전혀 예측을 해주지 못하고 있는 것을 알 수 있다.

물론 주기가 있는 경우는 시계열 관련 분석 방법이 필요한 부분이긴 하지만 여기선 논외로 두고..

예측을 한다는 것은 우리가 보지 못한 값에 대해서 예측을 한다는 것을 의미하는데, 무턱대고 비선형 모델을 적용해 현재값에만 적합된 모델을 만들어서 낭패를 볼 수가 있음을 알 수 있어야 할 것이다.

 

 

그러나 우리는 수학 교육을 잘 받아서 sin함수가 주기라는 것을 가진다는 것을 안다. 이를 활용해 보자!

아래는 주기라는 변수로 기존 변수를 변환하고 다시 적합시킨 모델 결과이다(0~360도 주기).

학습으로 주어진 곳 이외에서도 거의 정확하게 예측을 하고 있음을 알 수 있다.이 모델을 만들기 위해 hidden layer 개수 조절이 있었다.

 

image

 

원자료 변수만을 가지고 적합하려면 차수가 어마어마한 모델이 나와야 했으나 주기라는 변수로 변환을 해놓으면서 내부적으로는 간단하게 2차 함수 형태로 적합될 수 있었다.

요 함수는 sin 함수 대용으로 사용해도 될거라 생각된다. ㅋ 

사실 쓰다보니 비선형 모델의 어려움이라기 보다는 도메인 지식에 따른 변수 선정 및 변환이 굉장히 큰 효과가 나온다는 글로 바뀌는군…

여튼 비선형 모델은 고차원으로 변환시켜 선형 모델로 피팅하는 노력이 필요하고 그것보다 더 우아한 방법은 전문가들에게 물어봐서 정보를 캐내와 새로운 변수를 만드는거라는거…

 

NN강의 예제 듣다가 딴곳으로 샜는데, 빨리 듣고 자야겠다. 에고~ ㅜㅜ

CC BY-NC 4.0 데이터 마이닝 강의 중에… by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.