【R】neuralnet 함수로 에러가 나왔을 때의 대처법

2018/11/15

neuralnet 함수

neuralnet 함수는 R의 신경망 라이브러리 중 하나입니다.본 라이브러리의 장점으로는 작성한 학습기를 직접 plot()로 가시화할 수 있어 계산 그래프나 가중치·바이어스의 값을 한눈에 알 수 있는 점을 들 수 있습니다.
이하는 연습으로서 iris 데이터 세트로 다클래스 분류를 실시했을 때, 여러가지 망설였으므로 비망록을 겸해의 메모입니다.실제로 R에서 신경망을 시도할 때는 다른 사용하기 쉬운 라이브러리를 선택하는 것이 좋습니다.

neuralnet 런타임 오류 및 해결

질적 변수 입력 오류

R의 많은 함수에서는 질적 변수를 factor형으로 정의하면 자동으로 더미 변수로 취급해 줍니다(python에서는 factor형이 없고 pandas의 get_dummies 함수 등으로 질적 변수로 나눕니다. 0 or 1로 속하는지를 나타내는 컬럼을 작성한다. neuralnet 함수는 정량적 변수 만 처리 할 수 ​​있기 때문에 iris의 "Species"와 같은 질적 변수를 올바르게 인식하지 못하고 오류가 발생했습니다.질적 변수를 더미 변수로 변환하려면 다음 코드를 실행합니다.

library(caret) 
tmp <- dummyVars(~.,data=train) 
dummy <- as.data.frame(predict(tmp, train))

다 클래스 분류시의 formula에 대해서

nnet 함수 등에서는 다음과 같이 쓸 수 있다.여기서는 Species에 대해 다른 변수를 설명 변수로 지정합니다 ( ".는 목적 변수 이외라는 의미).

library(nnet) 
nn1 <- nnet(formula = Species ~ ., size=5, data=train)

설명 변수를 더미 변수화해 버렸기 때문에, formula는 분류하는 클래스 모두를 「+」로 연결해 기재한다.

library("neuralnet") f = Species.setosa + Species.versicolor + Species.virginica       
~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width 
nn2 <- neuralnet(formula = f, data = dummy)

결과

무사히 iris의 분류가 되었습니다.