![](https://www.veribilimiokulu.com/wp-content/uploads/2019/11/knime_pmml_kapak.png.webp)
Knime’da Eğitilen Modelin Farklı Programlama Dillerinde Kullanılması (Python, Java)
Merhaba VBO okurları, Knime ile ilgili bu ikinci yazımda oluşturulan modelin çıktısını alıp bu çıktı ile farklı programlama dillerinde aynı tahminin nasıl gerçekleştirilebileceğini anlatacağım. Daha sonra da Python ve Java programlama dilleriyle buna örnekler vereceğim.
Ön bilgi gereksinimleri: Knime, (Python ve/veya Java)
Knime ile ilgili bir ön bilginiz yok ise linke tıklayarak bir önceki yazımı okuyabilirsiniz.
Bu yazımda uçtan uca bir projedense yalnızca Knime’da oluşturulan modelin farklı programlama dillerinde kullanımını anlatmaya çalıştığım için oluşturulan modelin test ve değerlendirme kısımları olmayacak.
Öncelikle aşağıdaki gibi bir iş akışı oluşturup basit bir karar ağacı sınıflandırma modeli eğitelim.
![](https://www.veribilimiokulu.com/wp-content/uploads/2019/11/Screenshot-from-2019-11-15-15-24-02.png)
Burada ilk düğüm içerisinde aşağıdaki tabloyu oluşturdum. Küçük bir tablo olduğundan siz de aynı şekilde kolayca oluşturabilirsiniz.
![](https://www.veribilimiokulu.com/wp-content/uploads/2019/11/Screenshot-from-2019-11-15-15-32-15.png)
Burada country (String), age (Integer), salary (Integer), purchase_status (String) olmak üzere dört değişken bulunmakta. Bunlardan purchase_status hedef olarak belirlenmiş bağımlı değişken diğerleri ise bağımsız değişkenlerdir.
Country değişkenine One to Many düğümünü kullanarak One Hot Encoding uyguladım ve age, salary değişkenlerini ise Normalizer düğümünü kullanarak sıfır ile bir arasına normalize ettim.
Bu iş akışını çalıştırdıktan sonra en sondaki düğüme sağ tıklayıp Interactive View’a tıkladığımızda karşımıza oluşturduğumuz karar ağacının görseli çıkacaktır.
![](https://www.veribilimiokulu.com/wp-content/uploads/2019/11/Screenshot-from-2019-11-15-15-39-45.png.webp)
Şimdi oluşturduğumuz bu modeli dışarı aktarmamız gerek.
PMML Nedir?
PMML (Predictive Model Markup Language) veri madenciliği modellerini temsil etmeye yarayan bir biçimlendirme dilidir (Markup Language; Not a programming language!!!). Çoğu veri madenciliği yazılımında PMML dosyalarını okuma ve yazma özelliği bulunurken aynı zamanda çoğu programlama dilinde de PMML dosyalarını okuyup yazma işlevlerini gerçekleştirebilen kütüphaneler mevcuttur (python: pypmml, java: pmml4s). PMML dosyaları genellikle .pmml uzantılıdır.
![](https://www.veribilimiokulu.com/wp-content/uploads/2019/11/knime_pmml_kapak.png.webp)
Şimdi oluşturduğumuz iş akışına aşağıdaki görselde olduğu gibi bir düğüm daha ekleyerek modelimizi PMML formatında dışarı aktaralım.
![](https://www.veribilimiokulu.com/wp-content/uploads/2019/11/Screenshot-from-2019-11-15-15-50-19.png)
Şimdi pypmml modülünü kullanarak Knime ile oluşturup kaydettiğimiz PMML model dosyasını Python içerisinde okuyup kullanalım. Bunu yaparken ön işleme aşamalarını kodladığımızı varsayarak fonksiyona doğrudan ön işlenmiş veriyi vereceğim.
from pypmml import Model
model = Model.fromFile("karar_agaci.pmml")
res = model.predict({"age": 1,
"salary": 1,
"Turkey": 1,
"Spain": 0,
"Germany": 0,
"France": 0})
print(res)
{'Probability': 1.0, 'Node_ID': '4', 'Probability_N': 1.0, 'Probability_Y': 0.0, 'PredictedValue': 'N'}
Şimdi de aynı kodu Java ve pmml4s kütüphanesi ile yazalım.
import org.pmml4s.model.Model;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Model model = Model.fromFile("/home/ggerdan/Desktop/karar_agaci.pmml");
Object[] arr = new Object[6];
arr[0] = 1;
arr[1] = 1;
arr[2] = 1;
arr[3] = 0;
arr[4] = 0;
arr[5] = 0;
Object[] res = model.predict(arr);
System.out.println(Arrays.toString(res));
}
}
[N, 1.0, 1.0, 0.0, 4]
İşte bu şekilde PMML dosyalarını programlama dilleri ile okuyup elde eğittiğimiz modelleri farklı ortamlara taşıyabiliyoruz. Yazdığımız bu kodlar yalnızca basit birer örnek niteliği taşımaktadır ve bu işlemleri, uygulamada çok farklı şekillerde de yapabilirsiniz.
Sonuç olarak bu yöntemi kulanıp, mesela Python Flask ile yazdığınız bir web api içerisinde Knime ile eğittiğiniz modelleri kullanarak kullanıcılara tahminler yaptırabilirsiniz. Bir sonraki yazımda görüşmek üzere.
Kaynaklar
https://www.ibm.com/developerworks/library/ba-ind-PMML1/index.html