Ana içeriğe geç

H2O AutoML'ye Giriş

Bu eğitimde H2O hakkında bilgi edinecek ve AutoML işlevselliğine göz atacaksınız.
· 9 dk. oku

Yapay Zeka ile Keşfedin

H2O’yu Tanımlama

Makine öğrenmesi algoritmaları ve bu alandaki uzmanlara olan ihtiyaç hakkında çok fazla konuşuluyor. Hepimiz beceri gereksiniminde önemli bir boşluk olduğunu biliyoruz. H2O’nun amacı, uzman olmayanların da makine öğrenmesi üzerinde deneyler yapmasını kolaylaştıran bir platform sunmaktır.

H2O mimarisi, üst katmanda farklı API’lerin, alt katmanda ise H2O JVM’nin bulunduğu katmanlara ayrılabilir.

h20 architecture
Kaynak

H2O’nun çekirdek kodu Java ile yazılmıştır ve bu sayede tüm çerçeve çoklu iş parçacığını destekler. Java ile yazılmış olsa da mimaride gösterildiği gibi R, Python ve birkaç diğer dil için arayüzler sağlar; böylece verimli şekilde kullanılabilir.

Özetle, H2O; bellek içi çalışan, dağıtık, hızlı ve ölçeklenebilir, açık kaynaklı bir makine öğrenmesi ve kestirimsel analitik platformudur ve makine öğrenmesi modellerinin geliştirilmesini kolaylaştırır.

Kurulum Süreci

R

H2O işlevlerini R içinde kullanmak istiyorsanız, install.packages("h2o") komutunu çalıştırarak H2O paketini doğrudan kurabilirsiniz.

library(h2o)
##
## ----------------------------------------------------------------------
##
## Your next step is to start H2O:
##     > h2o.init()
##
## For H2O package documentation, ask for help:
##     > ??h2o
##
## After starting H2O, you can use the Web UI at http://localhost:54321
## For more information visit http://docs.h2o.ai
##
## ----------------------------------------------------------------------

##
## Attaching package: 'h2o'

## The following objects are masked from 'package:stats':
##
##     cor, sd, var

## The following objects are masked from 'package:base':
##
##     %*%, %in%, &&, ||, apply, as.factor, as.numeric, colnames,
##     colnames<-, ifelse, is.character, is.factor, is.numeric, log,
##     log10, log1p, log2, round, signif, trunc
h2o.init()
##  Connection successful!
##
## R is connected to the H2O cluster:
##     H2O cluster uptime:         32 minutes 57 seconds
##     H2O cluster timezone:       Asia/Kolkata
##     H2O data parsing timezone:  UTC
##     H2O cluster version:        3.20.0.2
##     H2O cluster version age:    3 months and 22 days !!!
##     H2O cluster name:           H2O_started_from_R_NSingh1_wou076
##     H2O cluster total nodes:    1
##     H2O cluster total memory:   1.55 GB
##     H2O cluster total cores:    4
##     H2O cluster allowed cores:  4
##     H2O cluster healthy:        TRUE
##     H2O Connection ip:          localhost
##     H2O Connection port:        54321
##     H2O Connection proxy:       NA
##     H2O Internal Security:      FALSE
##     H2O API Extensions:         Algos, AutoML, Core V3, Core V4
##     R Version:                  R version 3.5.1 (2018-07-02)

H2O’yu başlatmak, 64 bit JDK yüklü değilse sisteminizde hata verebilir. Böyle bir durum oluşursa lütfen 64 bit en güncel JDK’yı kurun; sonrasında sorunsuz çalışacaktır.

Python

Python kullanıyorsanız, aynı yöntem burada da geçerlidir; komut satırından pip install -U h2o çalıştırdığınızda h2o Python ortamınıza kurulacaktır. H2O’yu başlatma süreci de aynıdır.

h2o.init() komutu oldukça akıllıdır ve pek çok işi halleder. Önce yeni bir örnek başlatmadan önce etkin bir h2o örneği arar; bir örnek yoksa yenisini başlatır.

Kaynakları h2o örneğine tahsis etmeye yardımcı olan bağımsız değişkenleri vardır; sık kullanılanlar şunlardır:

  • nthreads: Varsayılan olarak -1’dir; bu, örneğin CPU’nun tüm çekirdeklerini kullanabileceği anlamına gelir. Kullanılacak çekirdek sayısını bu bağımsız değişkene bir değer vererek ayarlayabilirsiniz.

  • max_mem_size: Bu bağımsız değişkene bir değer vererek örneğe ayrılan azami belleği kısıtlayabilirsiniz. Dize türündedir; 2 GB bellek için ‘2g’ veya ‘2G’ şeklinde, MB cinsinden ayrım yapmak istediğinizde de benzer şekilde parametre geçebilirsiniz.

Örnek oluşturulduktan sonra tarayıcınızda http://localhost:54321 yazarak Flow’a erişebilirsiniz. Flow, h2o’nun parçası olan web arayüzünün adıdır; ekstra kurulum gerektirmez ve CoffeeScript (JavaScript benzeri bir dil) ile yazılmıştır. Şu işlemler için kullanabilirsiniz:

  • Veriyi doğrudan yükleme
  • İstemci tarafından yüklenen veriyi görüntüleme
  • Doğrudan model oluşturma
  • Sizin veya istemcinizin oluşturduğu modelleri görüntüleme
  • tahminleri görüntüleme
  • Doğrudan tahmin çalıştırma
untitled flow

Arayüz oldukça kullanışlıdır ve uzman olmayanlara kullanım kolaylığı sağlar; denemenizi ve kendi deneylerinizi yapmanızı öneririm.

AutoML

Şimdi H2O’nun AutoML kısmından bahsedelim: AutoML, kullanıcı tarafından belirlenen bir süre sınırı içinde çok sayıda modelin otomatik olarak eğitilmesine ve ayarlanmasına yardımcı olur.

AutoML işlevinin mevcut sürümü; Bir Rastgele Orman, Bir Aşırı-Rastgele Orman, Rasgele bir Gradyan Artırmalı Makineler (GBM) ızgarası, rasgele bir Derin Sinir Ağları ızgarası eğitebilir ve ardından tüm modelleri kullanarak Birleşik Yığın (Stacked Ensemble) modeli kurar.

AutoML dediğimizde, veri hazırlama, model oluşturma ve topluluk (ensemble) yaklaşımlarını kapsamalı; ayrıca kullanıcıların daha az kafa karışıklığıyla işlem yapabilmesi için mümkün olduğunca az sayıda parametre sunmalıdır. H2O AutoML bu görevi, kullanıcıdan minimum parametre alarak rahatlıkla yerine getirir.

Hem R hem de Python API’lerinde aynı veriyle ilgili bağımsız değişkenler kullanılır: x, y, training_frame, validation frame. Bunlardan y ve training_frame zorunludur; diğerleri isteğe bağlıdır. Ayrıca max_runtime_sec ve max_models değerlerini yapılandırabilirsiniz; burada max_runtime_sec zorunludur, max_model ise isteğe bağlıdır; parametre geçmezseniz varsayılan olarak NULL alır.

x bağımsız değişkeni, training_frame içindeki kestiricilerin (predictor) vektörüdür; çerçevedeki tüm kestiricileri kullanmak istemiyorsanız, kullanmak istediklerinizi x ile belirtebilirsiniz.

Şimdi bazı isteğe bağlı ve çeşitli parametrelerden bahsedelim; bu parametreleri, hakkında bilginiz olmasa bile kurcalamaya çalışın; bu sayede ileri konularda bilgi kazanırsınız:

  • validation_frame: AutoML içindeki bireysel modellerin erken durdurulması için kullanılır. Bir modeli doğrulamak için ilettiğiniz bir veri çerçevesidir; siz iletmezseniz eğitim verisinin bir parçası olabilir.

  • leaderboard_frame: Geçirilirse, modeller çapraz doğrulama metrikleri yerine bu çerçevedeki değerlere göre puanlanır. Yine siz iletmezseniz eğitim verisinin bir parçası kullanılır.

  • nfolds: Varsayılan 5 olan K-katlı çapraz doğrulama; model performansını azaltmak için kullanılabilir.

  • fold_columns: Çapraz doğrulama için indeks belirtir.

  • weights_column: Belirli sütunlara ağırlık vermek isterseniz kullanabilirsiniz; 0 ağırlığı vermek sütunu hariç tuttuğunuz anlamına gelir.

  • ignored_columns: Yalnızca Python’da; x’in tersi gibidir.

  • stopping_metric: Izgara aramalarının ve modellerin erken durdurulması için bir metrik belirtir; sınıflandırma için varsayılan logloss, regresyon için deviance’tır.

  • sort_metric: Sondaki liderlik tablosu modellerini sıralamak için kullanılır. İkili sınıflandırma için varsayılan AUC, çok sınıflı sınıflandırma için sınıf başına ortalama hata (mean_per_class_error), regresyon için deviance’tır.

validation_frame ve leaderboard_frame, nfolds yani çapraz doğrulama parametresine bağlıdır.

Aşağıdaki senaryolar iki durumda oluşabilir:

AutoML içinde çapraz doğrulama kullanıyorsak: * Yalnızca training frame iletilirse - Veri, eğitim ve doğrulama olarak 80-20 oranında bölünür. * Eğitim ve leaderboard frame iletilirse - Eğitim ve doğrulama verilerindeki 80-20 bölünmede değişiklik olmaz. * Eğitim ve doğrulama frame iletilirse - Bölme yapılmaz. * Üç çerçeve de iletilirse - Bölme yapılmaz.

Çapraz doğrulama kullanılmıyorsa (nfolds = 0) bu durum leaderboard frame’i önemli ölçüde etkiler: * Yalnızca training frame iletilirse - Veri 80/10/10 olarak eğitim, doğrulama ve leaderboard şeklinde bölünür. * Eğitim ve leaderboard frame iletilirse - Veri eğitim ve doğrulama olarak 80-20 oranında bölünür. * Eğitim ve doğrulama frame iletilirse - validation_frame verisi 50-50 oranında doğrulama ve leaderboard olarak bölünür. * Üç çerçeve de iletilirse - Bölme yapılmaz.

R ve Python’da Uygulama

R

H2O, veriyi Frame olarak içe aktarır; bu, R ve Python’da çeşitli işlemler için kullandığımız data frame’den farklıdır.

train <- h2o.importFile("train.csv")
##
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
test <- h2o.importFile("test.csv")
##
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%

Kestiricileri ve yanıtı (response) ayarlama.

y <- "response"
x <- setdiff(names(train), y)

Zorunlu parametreleri geçirerek bir AutoML nesnesi oluşturun. Yalnızca training frame iletiyoruz ve nfolds parametresi varsayılan değerinde kalıyor. Modelin çalışma süresini ihtiyacınıza göre artırabilirsiniz.

train[,y] <- as.factor(train[,y])

aml <- h2o.automl(x = x, y = y,
                  training_frame = train,
                  max_runtime_secs = 30)
##
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=                                                                |   1%
  |                                                                       
  |=                                                                |   2%
  |                                                                       
  |==                                                               |   3%
  |                                                                       
  |===                                                              |   4%
  |                                                                       
  |===                                                              |   5%
  |                                                                       
  |====                                                             |   6%
  |                                                                       
  |=====                                                            |   8%
  |                                                                       
  |======                                                           |   9%
  |                                                                       
  |======                                                           |  10%
  |                                                                       
  |========                                                         |  13%
  |                                                                       
  |==========                                                       |  15%
  |                                                                       
  |==========                                                       |  16%
  |                                                                       
  |===========                                                      |  16%
  |                                                                       
  |===========                                                      |  17%
  |                                                                       
  |===========                                                      |  18%
  |                                                                       
  |============                                                     |  18%
  |                                                                       
  |==============================================================   |  95%
  |                                                                       
  |=================================================================| 100%

Farklı modellerin liderlik tablosunu görüntüleme.

lb <- aml@leaderboard
lb
##                                                model_id       auc
## 1    StackedEnsemble_AllModels_0_AutoML_20181008_110411 0.7823564
## 2 StackedEnsemble_BestOfFamily_0_AutoML_20181008_110411 0.7789898
## 3             GBM_grid_0_AutoML_20181008_110411_model_0 0.7738653
## 4             GBM_grid_0_AutoML_20181008_110411_model_1 0.7720842
## 5             GBM_grid_0_AutoML_20181008_110411_model_2 0.7713380
## 6                          DRF_0_AutoML_20181008_110411 0.7456390
##     logloss mean_per_class_error      rmse       mse
## 1 0.5596939            0.3197364 0.4359927 0.1900896
## 2 0.5628477            0.3112125 0.4374262 0.1913417
## 3 0.5662489            0.3164375 0.4393990 0.1930715
## 4 0.5679111            0.3192612 0.4402417 0.1938127
## 5 0.5679935            0.3297330 0.4405557 0.1940894
## 6 0.5985811            0.3611326 0.4520878 0.2043834
##
## [8 rows x 6 columns]

Python

python

Python’da daha fazla öğrenmek isterseniz, DataCamp’in Dask ile Paralel Hesaplama kursunu inceleyin.

Konular

İlgili