iyzico’da yaptığım H2O ile Yapay Zeka Geliştirme sunumuna aşağıdaki linkten erişebilirsiniz:
https://www.slideshare.net/YalnYenign/ai-development-with-h2oai
Not: Sunum İngilizce’dir.
iyzico’da yaptığım H2O ile Yapay Zeka Geliştirme sunumuna aşağıdaki linkten erişebilirsiniz:
https://www.slideshare.net/YalnYenign/ai-development-with-h2oai
Not: Sunum İngilizce’dir.
Comments are off for this post
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) |
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
Comments are off for this post
Plotly (https://plot.ly/) bir veri görselleştirme kütüphanesi. Birden fazla programlama diliyle veriyi iki boyutlu veya üç boyutlu görselleştirme arayüzleri sunuyor. Bulut ortamında da görselleri kaydetme imkanı sağlıyor.
Python ile yukarıdaki gibi üç boyutlu bir grafik çizmek için ilgili X, Y ve Z değerlerini vererek aşağıdaki python kodunu kullanabiliriz. Aşağıda daha önce Pandas ile oluşturulmuş bir DataFrame’den (transitDataFrame) iki farklı etikette veri alınıp görselleştirilmiş. Burada transitDataframe.label bölümü veri filtrelemeyi, head fonksiyonu ise ilk 2000 değeri getirmeyi sağlıyor. İki farklı etikette görselleştirme için iki farklı Scatter3d ‘yi veri olarak notebook‘a vermek gerekiyor.
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 |
import plotly.plotly as py import plotly.graph_objs as go import plotly.offline as po from plotly.graph_objs import * trace1 = go.Scatter3d( x = transitDataframe[transitDataframe.label=='bus'].x.head(2000), y = transitDataframe[transitDataframe.label=='bus'].y.head(2000), z = transitDataframe[transitDataframe.label=='bus'].z.head(2000), mode = 'markers', name = 'bus', marker=dict( color='rgb(76, 153, 0)', #showscale=True, size='4', #colorscale='Spectral', opacity=0.5 ) ) trace2 = go.Scatter3d( x = transitDataframe[transitDataframe.label=='walking'].x.head(2000), y = transitDataframe[transitDataframe.label=='walking'].y.head(2000), z = transitDataframe[transitDataframe.label=='walking'].z.head(2000), mode = 'markers', name = 'walking', marker=dict( color='rgb(255, 0, 51)', #showscale=True, size='4', #colorscale='Spectral', opacity=0.5 ) ) data = [trace1, trace2] # Plot and embed in ipython notebook! po.init_notebook_mode(connected=False) po.iplot(data, filename='basic-scatter') |
Comments are off for this post
Spark ML’de sınıflandırma algoritmalarını kullanırken iki tip değişkeniniz vardır: Sürekli Değişkenler ve Kategori Değişkenleri. Sürekli değişkenler, değerin kendisinin ve değişimlerinin (artma veya azalma) sizin için önemli olduğu değişkenlerdir. Kategori değişkenleri ise sınıfsal değişkenlerdir. (maksimum x farklı değer alabilirler.)
Algoritmanızı geliştirirken sürekli değişkenler ve kategori değişkenlerini birbirinden ayırmanız gerekmektedir. Bunun için Spark ML’de VectorIndexer sınıfı kullanılır.
İlk olarak kategori değişkenlerinizi bir Vector’de tutarsınız:
1 2 3 4 5 6 |
val categoricalFeatureAssembler = new VectorAssembler().setInputCols( Array( "feature1", "feature2", "feature3", )).setOutputCol("categoricalFeatures") |
Ardından maksimum alacakları değer çeşitliliğine göre VectorIndexer sınıfını kullanarak bu değerlerinizi index’ler ve maksimum değer sayısını Indexer’a parametre olarak verebilirsiniz.
1 2 3 4 |
val featureIndexer = new VectorIndexer() .setInputCol("categoricalFeatures") .setOutputCol("indexedFeatures") .setMaxCategories(5) |
Bu alanlar artık kategori değerleri olarak index’lenmiştir ve Spark Pipeline’ına ekleyebilirsiniz:
1 2 3 4 5 |
val model = new Pipeline().setStages(Array( categoricalAssembler, featureIndexer, myClassifier)) .fit(myDataFrame) |
Referans:
https://spark.apache.org/docs/latest/ml-features.html#vectorindexer
Comments are off for this post
Garaj oluşumu için KWorks’te yaptığım “Building a Data Driven Product with Machine Learning” sunumuna aşağıdaki linkten ulaşabilirsiniz.
Comments are off for this post
Apache PredictionIO bir çok şeyi kolaylaştıran açık kaynak kodlu bir “Machine Learning” sunucusudur. Alt yapısında SparkML ve Spark kullanır. PredictionIO ile modeli eğitirken veya test ederken Spark’a parametre geçmek için — işaretini ilgili parametrelerin başına aşağıdaki gibi koymak yeterlidir. spark-submit’e verilen değerler parametre olarak geçer:
1 2 3 |
pio train -- --driver-memory 8G --executor-memory 8G pio eval org.template.classification.AccuracyEvaluation \ org.template.classification.EngineParamsList -- --driver-memory 8G --executor-memory 8G |
Örnek:
1 2 3 4 5 |
yalcin $ pio train -- --driver-memory 8G --executor-memory 8G [INFO] [Console$] Using existing engine manifest JSON at /Users/yalcin/dev/test/manifest.json [INFO] [Runner$] Submission command: /Users/yalcin/dev/spark-2.0.0-bin-hadoop2.7/bin/spark-submit --driver-memory 8G --executor-memory 8G |
Comments are off for this post
Spark 2.0 ile birlikte MLLib’te (Spark’ın machine learning kütüphanesi) önemli geliştirmeler yayına alındı. Aynı zamanda MLLib’e en fazla kodun ve özelliğin gönderildiği sürüm olma özelliğini taşıyor:
Spark 2.0 ile birlikte yayına alınan en temel MLLib özellikleri ise şu şekilde:
Referanslar:
http://spark.apache.org/docs/2.0.0/ml-guide.html
https://spark-summit.org/2016/events/apache-spark-mllib-20-preview-data-science-and-production/
Comments are off for this post
Machine Learning: “Field of study that gives computers the ability to learn without being explicitly programmed” , Arthur Samuel
Bilgisayarların dışarıdan programlanmaya ihtiyaç duymadan kendi kendine öğrenme yeteneğine “machine learning” denir.
Feature: In machine learning and pattern recognition, a feature is an individual measurable property of a phenomenon being observed.
Yapay zeka ile öğrenmede birbirinden bağımsız her bir ölçülebilir ve gözlemlenebilir özelliğe “feature” denir.
Data Sampling: Data sampling is a statistical analysis technique used to select, manipulate and analyse a representative subset of data points in order to identify patterns and trends in the larger data set being examined.
Veri sadeleştirme bir veriden temsili bir alt küme çıkarmak için kullanılan istatistiksel analiz tekniğidir. Büyük veri kümesindeki ortak özellikleri alt kümenin de barındırması gerekir.
Training: a training set is a set of data used to discover potentially predictive relationships
Yapay zeka ile öğrenmede eğitim verisi, tahminde bulunmak ve makinenin öğrenmesi için kullanılan veri kümesidir.
ML Model: You can use the ML model to get predictions on new data for which you do not know the target
Eğitim verisiyle eğitilen ve yeni veri hakkında tahmin yürüten yapay zekaya “machine learning model” denir.
Cross Validation: a model validation technique for assessing how the results of a statistical analysis will generalize to an independent data set
Bağımsız veriyle modeli doğrulama tekniğine “cross validation” denir.
Comments are off for this post