Knime’da Eğitilen Makine Öğrenimi Modelinin Web Servis Olarak Yayınlanması

Gökhan Gerdan
3 min readAug 21, 2019

--

Bu yazımda Knime ile eğittiğiniz bir makine öğrenimi modelini bir sunucuda nasıl web servis olarak yayınlayabileceğinizi anlatacağım. Sonuç olarak http requestler ile göndereceğiniz veriyi Knime’da eğittiğiniz model ile sınıflandırıp sonucu size geri döndürecek bir api yazabileceksiniz. Bu api’yi yazarken Python programlama dili ile Flask framework’ünü kullanacağız. Konuyu temel hatlarıyla özetleyerek basit bir örnek üzerinden anlatacağım.

Ön bilgi gereksinimleri

  • Knime
  • Python (Flask, Flask-RESTful, Pandas)

Eğer önbilgi gereksinimlerini karşılamıyorsanız. Daha önceki yazılarımı inceleyeilirsiniz:

Öncelikle Knime’da basit bir model eğitelim. Bir veri seti indirmeyip Data Generator nodunu kullanacağım.

Verimizi oluşturduktan sonra Partitioning nodu ile veriyi eğitim (%80) ve test (%20) olarak ikiye bölelim.

Daha sonra da Random Forest Learner ve Random Forest Predictor nodları ile eğitimimizi ve tahminlerimizi yapalım ve Scorer nodu kullanarak tahmin sonuçlarımıza bakalım.

Random Forest Learner nodunda doğrudan bir pmml çıktısı elde edemediğimiz için Tree Ensemble Model Extract ve Table to PMML Ensemble nodlarını kullanmamız gerekiyor. Bu işlemi de yaptıysak son olarak PMML Writer nodu ile pmml (Predictive Model Markup Language) formatındaki modelimizi dışa aktaralım. Eğer Random Forest Learner yerine Decision Tree Learner nodu kullansaydık PMML Writer nodunu doğrudan bağlayarak modeli dışa aktarabilirdik.

Hazırladığımız Knime iş akışı aşağıdaki gibi görünecektir.

Modelimizi pmml formatında dışa aktardıktan sonra artık işin api yazma kısmına geçebiliriz.

Bu kısma başlamadan önce bazı gereksinimleri yüklememiz gerekiyor ben ubuntu 18.04 üzerinde çalıştığım için adımların linux terminal komutlarını yazacağım.

Önce bir requirements.txt dosyası oluşturup içerisine aşağıdakileri yapıştırın.

Flask==1.1.1
Flask_Cors==3.0.8
pandas==0.25.0
Flask_RESTful==0.3.7
pypmml==0.9.2

Daha sonra aşağıdaki komutları çalıştırın.

sudo apt install openjdk-8-jdk
sudo apt install python3-pip
sudo pip3 install -r requirements.txt

Şimdi kodlamaya başlayabiliriz. Öncelikle kullanıcıdan verileri alıp aynı veriyi geri döndüren basit bir api yazalım.

Bu kodu çalıştırıp browser ile aşağıdaki url’e get request yaparsak.

http://localhost:8080/predict?Universe_0_0=0.38&Universe_0_1=0.348&Universe_1_0=0.758&Universe_1_1=0.466

Bu sonucu bize cevap olarak döner.

{
"Universe_0_0": 0.38,
"Universe_0_1": 0.348,
"Universe_1_0": 0.758,
"Universe_1_1": 0.466
}

Hazırladığımız basit api’yi test etmiştiş olduk. Şimdi sırada pypmml kütüphanesini kullanarak modelimizi api’miniz içerisine gömeceğiz. Öncelikle aşağıdaki basit kod parçası ile pmml dosyasını okuyup modelimizi bir değişkene yazalım ve yukarıdaki test için kullandığımız veriyi modele verip sonuca bakalım.

Sonuç aşağıdaki gibi olacaktır.

{'Probability': 0.51, 'Probability_Cluster_0': 0.51, 'Probability_Cluster_2': 0.49, 'Probability_Cluster_1': 0.0, 'Probability_Cluster_3': 0.0, 'PredictedValue': 'Cluster_0'}

Şimdi bu iki kodu birleştirip aşağıdaki hale getirelim.

Bu kodu çalıştırıp aynı şekilde get requesti yaptığınızı zaman alacağınız cevap aşağıdaki gibi olacaktır.

{
"prediction": "Cluster_0",
"confidence": 0.51
}

İşte bu şekilde Knime üzerinde eğittiğiniz modelinizi dışa aktarıp bir api aracılığıyla web servis olarak kullanılabilir hale getirebilirsiniz. Eğer bu servisi deploy etmek isterseniz bu konu hakkında aşağıda linki olan yazıma göz atabilirsiniz.

Deploying Flask App With PM2 on Ubuntu Server 18.04

Sorularınız için:
gokhang1327@gmail.com

--

--

Gökhan Gerdan
Gökhan Gerdan

No responses yet