Author: byun1114

  • doMC 패키지

    내가 분석하는 경우에 다중코어가 지원되는 경우가 거의 없어서 열심히 알아보지 않은 건데, 이번에 기계학습을 돌려보면서 꽤 빨라지는 것을 확인했다. 설정도 딱히 없다.

    registerDoMC 명령어로 사용할 코어수를 설정하고, getDoParWorkers로 사용중인 코어수를 확인한다.

    library(“doMC”)
    registerDoMC(cores = 4)
    getDoParWorkers()

    그런데 여기서 문제가 생길 수도 있다.

    내가 다중 코어를 이용하고자 하는 이유는 caret패키지를 이용해서 예측 모델 선정을 위한 것이다. caret 패키지와 관련된 자료를 검색해 보면 다음의 내용이 있다.

    https://topepo.github.io/caret/model-training-and-tuning.html#the-traincontrol-function

    trainControl과 관련된 것 중에서 allowParallel이 있는데 이게 기본적으로 True로 보인다.
    trainControl function | R Documentation

    설정 충돌인지 꼬인건지는 모르겠는데 registerDoMC(cores = 4) 이렇게 한참 진행하면 갑자기 느려지는 경우가 있다. 4C8H CPU에서 2500%를 찍는 이런 일이 생긴다. registerDoMC(cores = 1)로 설정을 해두어도 670% 정도로 여러 코어를 사용하는 것을 볼 수 있고, 속도가 제대로 나온다.

    학습 모델에 따라서 코어 설정을 변경해 주는 것이 필요할 것 같다.

  • 기계 학습 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)
  • 블럭을 주석 처리하기

    여러 줄을 주석처리하는 것이 힘들어서 찾아보니 역시 방법은 있었다. 내가 선택한 방법은 큰 따옴표 혹은 작은 따옴표 3개를 이용하여 주석처리 하는 것이다.

    '''
    주석 처리 할 부분
    '''
    
    혹은
    
    """
    주석 처리 할 부분
    """
  • xfce4 에서 PATH 설정

    xfce4를 사용하게 되면 PATH 설정이 기본으로 다시 되어 있다. ~/.xsessionrc 파일을 만들어서 사용 환경에 맞는 PATH를 설정한다.

    export=$PATH:~/.local/bin