Rでnnetを試してみる

以前,SVMをさわってみましたが,それだけでは何なので他の分類器も使ってみることにしました.
まずは無難にニューラルネットワークから.
Rのnnetはインストール不要だし,そもそも最初にやっておけ,という話でもありますが...

iris実行コード&結果

SVMのときとあまり変わりません.
逆に言えば,変えずにほぼそのまま使えるのがRのよいところ.

library(nnet)

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)


nnetの引数"size'で,隠れ層のユニット数を指定します.

# nnetのhelpより
size	number of units in the hidden layer. Can be zero if there are skip-layer units.

それから,predの"type"で出力形式を指定します.通常は"class"でよいでしょう.

# predic.nnetのhelpより
If type = "raw", the matrix of values returned by the trained network; if type = "class", the corresponding class
(which is probably only useful if the net was generated by nnet.formula).
# weights:  27
initial  value 86.336297 
iter  10 value 36.173022
iter  20 value 34.652665
iter  30 value 34.299414
iter  40 value 5.966404
iter  50 value 0.008819
iter  60 value 0.000990
iter  70 value 0.000717
final  value 0.000091 
converged
            iris.pred
             setosa versicolor virginica
  setosa         25          0         0
  versicolor      0         24         1
  virginica       0          3        22

実行してみると,正答率94.7%でした.まあまあ?

同様にBreast-cancer dataも

library(nnet)

bcdata <- subset(read.csv('~/Downloads/breast-cancer-wisconsin.data', head=TRUE),
                 select=-Samplecodenumber)
train <- seq.int(1, 699, by=2)
test <- setdiff(1:699, train)

# decayはデフォルト0だが,今回は変更しないとまともに動作しなかった
breast.nnet <- nnet(Class~., data=bcdata[train,], size=3, decay=0.1)
breast.pred <- predict(breast.nnet, bcdata[test,], type="class")
table(bcdata[test,10], breast.pred)
# weights:  34
initial  value 352.980584 
iter  10 value 177.479271
iter  20 value 51.829073
iter  30 value 36.800539
iter  40 value 34.257121
iter  50 value 33.375747
iter  60 value 33.096451
iter  70 value 32.962505
iter  80 value 32.940039
iter  90 value 32.916829
iter 100 value 32.912908
final  value 32.912908 
stopped after 100 iterations
           breast.pred
            benign malignant
  benign       223         8
  malignant      9       109

正答率95.1%.