H2O (https://www.h2o.ai/h2o/) makine öğrenmesini kolaylaştıran ve en önemli özelliği hafif (lightweight) olması ve az kaynak tüketmesi olan bir yapay zeka kütüphanesidir. Kendi içinde barındırdığı dağıtık bellek (in memory distributed k/v store) sayesinde makine öğrenme modellerinin eğitilmesi bir hayli hızlı olmaktadır zira belleğe her bir erişim ortalama 150 nanosaniye sürmektedir (NonBlockingHashMap için). Yine kendi içerisinde bulunan ve yine hafif (lightweight) olan MapReduce katmanı sayesinde milyonlarca satırı paralel olarak işleyebilir.
H2O ile bir modeli eğitip ardından modeli bir java sınıfı (POJO) olarak kaydedebilirsiniz. Böylece eğittiğiniz modeli istediğiniz sunucuya sadece java bağımlılığıyla yükleyebilirsiniz.
Bunu Python, Pandas ve H2O üçlüsü ile yapmak için:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import pandas.io.sql as pandas_sql from h2o import h2o from pymysql import cursors, connect # h2o'yu ayağa kaldırır h2o.init() # h2o'da daha önce eğitilen modelleri temizler. h2o.remove_all() # eğitim ve test verisini veritabanından çekmek için bağlantı açar. connection = connect(host='localhost', user='myUser', password='myPass', db='myDb', charset='utf8mb4', cursorclass=cursors.DictCursor) # pandas ile bir veritabanı tablosundan eğitim verisini pandas dataframe olarak çeker. training_data_frame = pandas_sql.read_sql_query('select * from my_training_table', connection) # pandas dataframe'ini h2o ile eğitmek için h2o dataframe'ine dönüştürür. training_data_frame = h2o.H2OFrame(training_data_frame) # pandas ile bir veritabanı tablosundan test verisini pandas dataframe olarak çeker. test_data_frame = pandas_sql.read_sql_query('select * from my_test_table', connection) # pandas dataframe'ini h2o ile eğitmek için h2o dataframe'ine dönüştürür. test_data_frame = h2o.H2OFrame(test_data_frame) # modeli yaratır. gradient_boosting_estimator = H2OGradientBoostingEstimator( ntrees=30, learn_rate=0.3, max_depth=10, sample_rate=0.7, col_sample_rate=0.7, stopping_rounds=2, stopping_tolerance=0.01, #10-fold increase in threshold as defined in rf_v1 score_each_iteration=True, model_id="my_model_id", seed=2000000 ) # eğitim ve test veriniz ile modeli eğitir ve test eder. gradient_boosting_estimator.train(my_x_column_names, my_y_column_name, training_frame=training_data_frame, validation_frame=test_data_frame) # test sonuçlarını yazdırır. performance = gradient_boosting_estimator.model_performance(test_data=test_data_frame) print(performance) # modeli POJO olarak indirir. h2o.download_pojo(gradient_boosting_estimator, '/myPath', get_jar=True) |
Referanslar:
https://blog.h2o.ai/2014/03/h2o-architecture/
http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql_query.html
https://groups.google.com/forum/#!msg/h2ostream/DCBG9auR2qw/bKEiGBeJBwAJ