RでDeeplearning

最近、Deeplearning、いいキーワードになっていますね。

これで解析さえすればバンバン売れる!なんて事は無いと思いますが、

Rで使い方を調べてみました。

h2oパッケージというものをRから使うことになります。

環境

  • R version 3.2.2
  • MacOS 10.11.1
  • jdk 1.8.0_40

h2oインストール

こちらを参考にインストール

http://d.hatena.ne.jp/dichika/20140503/p1

install.packages("h2o", repos=(c("http://s3.amazonaws.com/h2o-release/h2o/rel-kahan/5/R", getOption("repos"))))

ubuntuなどで このようなエラーが出た時には以下のように足りないものをインストールします

ERROR: configuration failed for package 'RCurl'
$ sudo apt-get install libcurl4-openssl-dev
install.packages("RCurl")

install.packages("h2o", repos=(c("http://s3.amazonaws.com/h2o-release/h2o/rel-kahan/5/R", getOption("repos"))))

Deeplearning

こちらのコードにh2oのDeeplearningを追加します

http://yut.hatenablog.com/entry/20120827/1346024147


library( kernlab )
data(spam)
rowdata<-nrow(spam)
random_ids<-sample(rowdata,rowdata*0.5)
spam_training<-spam[random_ids,]
spam_predicting<-spam[-random_ids,]

#svm
library( kernlab )
spam_svm<-ksvm(type ~., data=spam_training )
spam_predict<-predict(spam_svm,spam_predicting[,-58])
table(spam_predict, spam_predicting[,58])

# nnet
library( nnet )
spam_nn<-nnet(type ~., data=spam_training,size = 2, rang = .1, decay = 5e-4, maxit = 200 )
spam_predict<-predict(spam_nn,spam_predicting[,-58],type="class")
table(spam_predict, spam_predicting[,58])

# naivebayes
library( e1071 )
spam_nn<-naiveBayes(type ~., data=spam_training)
spam_predict<-predict(spam_nn,spam_predicting[,-58],type="class")
table(spam_predict, spam_predicting[,58])


# deeplearning
library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)
spam_h2o<-h2o.deeplearning(x=1:57,y=58,training_frame=as.h2o(spam_training))
spam_predict<-h2o.predict(spam_h2o,as.h2o(spam_predicting[,-58]))
table(as.data.frame(spam_predict)[,1],spam_predicting[,58])
h2o.shutdown(localH2O)

結果

SVM
spam_predict nonspam spam
		 nonspam		1338	117
		 spam				 62	784

(1338+784)/(1338+117+62+784)=0.9222077

nnet
spam_predict nonspam spam
		 nonspam		1313	 86
		 spam				 87	815

(1313+815)/(1313+86+87+815)=0.9248153

naivebayes
spam_predict nonspam spam
		 nonspam		 752	 51
		 spam				648	850

(752+850)/(752+51+648+850)=0.696219

h2o
					nonspam spam
	nonspam		1321	 83
	spam				 74	823

(1321+823)/(1321+83+74+823)=0.9317688

Deeplearningが一番正解率高いですね