Karşılaştırma: RxNeuralNet, xgBoost, H2O

Son zamanlarda, Ljubljana, Slovenya’daki yerel kullanıcı grubunda bir oturum gerçekleştirdim ve burada Microsoft R Server 9.0.3 için MicrosoftML paketi ile birlikte sunulan yeni algoritmaları tanıttım.

Veri kümesi için Kaggle’dan (halen devam eden) iki seans kullandım. Son bölümde, MNIST veri kümesinin görüntü tespiti ve tahmini yaptım ve aralarındaki performans ve doğruluk oranları karşılaştırıldı.

MNIST Elyazısı verisetine buradan ulaşabilirsiniz.

RxNeuralNet ile başlayarak, bu şekilde çalışmak için bir NET # modeli veya Sinir ağı oluşturmalıyız.

Sinir ağı modeli:

const { T = true; F = false; }

input Picture [28, 28];

hidden C1 [5 * 13^2]
from Picture convolve {
InputShape  = [28, 28];
UpperPad    = [ 1,  1];
KernelShape = [ 5,  5];
Stride      = [ 2,  2];
MapCount = 5;
}

hidden C2 [50, 5, 5]
from C1 convolve {
InputShape  = [ 5, 13, 13];
KernelShape = [ 1,  5,  5];
Stride      = [ 1,  2,  2];
Sharing     = [ F,  T,  T];
MapCount = 10;
}

hidden H3 [100]
from C2 all;

// Output layer definition.
output Result [10]
from H3 all;

Bunu elde ettikten sonra, rxNeuralNet algoritması ile çalışabiliriz:

model_DNN_GPU <- rxNeuralNet(label ~.
      ,data = dataTrain
      ,type = "multi"
      ,numIterations = 10
      ,normalize = "no"
      #,acceleration = "gpu" #enable this if you have CUDA driver
      ,miniBatchSize = 64 #set to 1 else set to 64 if you have CUDA driver problem 
      ,netDefinition = netDefinition
      ,optimizer = sgd(learningRate = 0.1, lRateRedRatio = 0.9, lRateRedFreq = 10)
)

Bu model için tahmin yapılıp, doğruluk matrisi şu şekilde elde edilebilir:

DNN_GPU_score <- rxPredict(model_DNN_GPU, dataTest, extraVarsToWrite = "label")
sum(Score_DNN$Label == DNN_GPU_score$PredictedLabel)/dim(DNN_GPU_score)[1]

Bu model için doğruluk oranı:

[1] 0.9789

H2O paketi ile çalışırken, Sinir ağı için aynı parametreleri almak için aşağıdaki kod yürütüldü.

model_h20 <- h2o.deeplearning(x = 2:785
                     ,y = 1   # label for label
                     ,training_frame = train_h2o
                     ,activation = "RectifierWithDropout"
                     ,input_dropout_ratio = 0.2 # % of inputs dropout
                     ,hidden_dropout_ratios = c(0.5,0.5) # % for nodes dropout
                     ,balance_classes = TRUE 
                     ,hidden = c(50,100,100) 
                     ,momentum_stable = 0.99
                     ,nesterov_accelerated_gradient = T # use it for speed
                     ,epochs = 15)

Öğrenilen modele karşı test veri kümesinin sonuçları elde etmek için:

h2o.confusionMatrix(model_h20)
100-(416/9978)*100

kod parçası çalıştırılır ve karışıklık matrisi elde edilerek doğruluk oranı elde edilir.

# [1] 95.83083

Karşılaştırma için, xgBoost (eXtrem Gradient Boosting) ekledim, ancak bu sefer buna odaklanmayacağım.

Paketlerle (saniye cinsinden) zaman karşılaştırması, soldan sağa: H20, GPU hızlandırmalı MicrosoftML, GPU hızlandırmasız MicrosoftML ve xgBoost.

Eğitimli modelin doğruluğuna gelince, sonuçlar (testlerime dayanarak):

MicrosoftML – Sinir Ağı -% 97,8

H20 – Derin Öğrenme -% 95,3

xgBoost -% 94,9

Kaynak: https://www.r-bloggers.com/2017/02/rxneuralnet-vs-xgboost-vs-h2o/