Background
Rで使えるDeep Learningのパッケージ H2O の使い方を覚えたので、前回やった「Rで判別分析いろいろ(11種類)」と比較してみた。
Summary
使用したデータ(前回と同じ)
- 4601通のメールをspamとnon-spamに分類してあるデータ(57次元)
- 460通をテストデータ、残りを学習データに使った。
比較結果(前回11種類+Deep Learning)
手法 | package | 関数 | 正解率 | チューニング |
---|---|---|---|---|
Deep Learning | H2O | h2o.deeplearning | 0.941 | activation="RectifierWithDropout", epochs=100,hidden=c(64,64,64,64), rate=0.01,rate_annealing = 1e-7, input_dropout_ratio = 0.1 |
線形判別分析 | MASS | lda | 0.896 | |
非線形判別分析(2次式) | MASS | qda | 0.837 | |
k-Nearest Neighbor | class | knn | 0.820 | k=1 |
ナイーブベイズ | e1071 | naiveBayes | 0.720 | |
Decision tree | rpart | rpart | 0.889 | |
Nural Network 3層 | nnet | nnet | 0.959 | size=7, decay=0.3 |
Nural Network LVQ1 | class | lvq1 | 0.763 | k=5, alpha=0.23 |
SVM | e1071 | svm | 0.952 | gamma=0.001381068, cost=512 |
Bagging | adabag | bagging | 0.909 | |
Boosting | adabag | boosting | 0.959 | |
Randam Forest | randomForest | randomForest | 0.952 | mtry=14 |
結論
同一の問題にたいして、判別分析の手法をいろいろ試してみた
Deep Learningの結果は、0.941。一位集団(3層ニューラルネット、SVM、Boosting、Random Forest)よりちょっと悪い。
感想
けっこうパタメータのチューニングしたが、
やり方があまりよくなかったのかもしれない。
チューニングの途中では、0.950が出ていたんだけど、
実際に試してみるといまいち正解率が上がらない。
もっと経験を積めば解決するのかもしれない。
References...1つだけ読むなら
やり始めたら、ほぼ同じ内容でほぼ同じデータセットのものを発見。
こちらでもDLあんまりな結果でした。
http://qiita.com/HirofumiYashima/items/68d56cfbab2834c1febb
Details
#
# Deep leaning (H2O)
#
# dataset
library(kernlab)
data(spam)
dim(spam)
data<-spam
num<-10*(1:(nrow(data)/10))
data.test<-data[num,]
data.train<-data[-num,]
library(h2o)
h2o.init(nthreads=-1)
data.train.hex <- as.h2o(data.train)
data.test.hex <- as.h2o(data.test)
# model
M<-h2o.deeplearning(1:57,58,
data.train.hex,
activation="RectifierWithDropout",
epochs=100,
hidden=c(64,64,64,64),
rate=0.01,
rate_annealing = 1e-7,
input_dropout_ratio = 0.1
)
# prediction
P<-h2o.predict(M,data.test.hex)
# result
t<-table(data.test[,58],as.vector(P$predict))
a<-(t[1,1] + t[2,2]) / (t[1,1] + t[2,2] + t[1,2] + t[2,1])
A.dpl<-a
A.dpl