기계 학습 machine learning

연구에 있어 예측 모형을 만들어 낼 수 있으면 조금 더 연구의 가치를 높일 수 있다. 기존에 내가 사용할 줄 아는 것은 선형 회귀 분석이나 로지스틱 분석이었다. 그런데 이번에 결과를 내어야만 하는 연구에서는 이보다 더 심도 있는 분석이 필요하였다. 그래서 random forest나 SVM 같은 기계 학습 방법을 이용하기로 하였다. 인터넷을 검색하여 보았고 R의 caret 패키지를 알게 되었다. glm 명령어와 유사하다.

caret 패키지만 불러와도 문제는 없으나 confusion matrix를 위해서는 tidyverse가 필요하다. 그리고 병렬 처리로 분석 속도를 높일 수 있는 doMC를 사용한다. 자료 크기가 작기 때문에 그냥 해도 괜찮지만, xgboost 같은 것을 하면 꼭 필요하다.

library('tidyverse')
library('caret')
library('doMC')
registerDoMC(cores = 4)

자료 배치는 보통 다음과 같은 형식으로 하는 것 같다.

fitControl = trainControl(method='repeatedcv', number = 5, repeats = 30)

보통은 원래 자료를 분할하여 학습용, 검정용을 만들지만, 이번 연구에 있어서는 예측이 필요한 세트가 있기 때문에 따로 만들었다. A와 C 그룹으로 모델을 만든다음 B 그룹에서 평가를 하는 것이 원래 연구 목적이었다. 그룹을 만들 때 factor로 지정을 해주어야 한다.

dt_train$GROUP = as.factor(dt_train$GROUP)
dt_test$GROUP = as.factor(dt_test$GROUP)

generalized linear model, random forest, SVM 모델은 다음과 같이 만들 수 있다. 지원하는 모델이 많기 때문에 홈페이지에서 찾아서 method에서 지정해 주면 된다. 앞서 언급한 3가지는 각각 glm, rf, svmRadial 이라고 지정한다.

fit = train(GROUP ~ A + B + C + D + E, method=’glm’, trControl = fitControl, data = dt_train)

Confusion matrix와 새로운 모델에서의 예측은 다음과 같이 확인할 수 있다.

predict(fit, newdata = dt_train) %>% confusionMatrix(dt_train$GROUP)
predict(fit, newdata = dt_test)