【R】neuralnet関数でエラーが出た時の対処法

2018年11月15日

neuralnet関数

neuralnet関数とはRにおけるニューラルネットワークライブラリの1つです。本ライブラリの利点としては作成した学習器を直接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の分類ができました。