R言語でのニューラルネットワーク

R言語ニューラルネットワークを今日勉強したので、それについて書きます。

今日勉強したのは、階層ニューラルネットワークについてです。ニューラルネットワークについては脳をどのようにモデリングするかを学びました。誤差逆伝搬法と最急降下法について学びました!

参考書はこれです!

ニューラルネットワーク (シリーズ 非線形科学入門)

ニューラルネットワーク (シリーズ 非線形科学入門)

R言語のソースはこれです

library(nnet)

#Sepalate iris data by odd number and even number. Odd number data are train. Even are test.

train <- seq.int(1, 150, by=2)
test <- setdiff(1:150, train)

iris.nnet <- nnet(Species~., size=3, data=iris[train,])
iris.pred <- predict(iris.nnet, iris[test,], type="class")
table(iris[test,5], iris.pred)

このプログラムでは、学習・検証のデータとして iris データを使っている。irisデータはこんな感じ!

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

irisデータの偶数番号と奇数番号で2つに分けそれらを教師用データと正解データに分けている。

trainデータにはirisデータの奇数番号のものが入っている。

> head(iris[train,])
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa
7           4.6         3.4          1.4         0.3  setosa
9           4.4         2.9          1.4         0.2  setosa
11          5.4         3.7          1.5         0.2  setosa


iris.nnet <- nnet(Species~., size=3, data=iris[train,])で、まずはじめの引数で結果として出力したいデータ(今回は花の種類)を指定しsizeで隠れ層の数を指定する。第3奇数のdataに教師用データを指定する。

iris.pred <- predict(iris.nnet, iris[test,], type="class")で分類結果を戻り値として返してくれる。第一引数に学習器とする。

table(iris[test,5], iris.pred)でクロス表を作成する。

> table(iris[test,5], iris.pred)
            iris.pred
             setosa versicolor virginica
  setosa         25          0         0
  versicolor      0         24         1
  virginica       0          3        22
<||