• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Apache Spark ile Naive Bayes Sınıflandırma

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılar, Yazılım
  • Date 14 Haziran 2014

Apache Spark büyük verileri işleme yeteneği ve çeşitli avantajlarla karşımıza çıkan bir Apache projesidir. Apache Spark içerisinde MLlib adında bir de makine öğrenmesi modülü bulunmaktadır. MLlib modülü kendi dahilinde Naive Bayes sınıflandırma algoritmasını da desteklemektedir.

Eğer Naive Bayes nedir diyorsak, “Naïve Bayes Sınıflandırma Algoritması” yazımızı okumanızı öneririm.

Bir önceki yazıda Ç ve J adında 2 kategori barındıran bir tablo üzerinde Naive Bayes sınıflandırması yapmış idik. Şimdi o tabloyu tekrardan hatırlayalım.

Döküman numarası Öğretilen içerik/cümle Kategori
1 Chinese Beijing Chinese Ç
2 Chinese Chinese Shanghai Ç
3 Chinese Macao Ç
4 Tokyo Japan Chinese J

Döküman tablosun yer alan 4 satır cümleyi Naive Bayes algoritmasıyla Apache Spark’ a öğretmek istiyorsak, öncelikle bu tablonun Döküman-Terim matrisini çıkartmak durumundayız. Döküman-Terim matrisinde öncelikli olarak Kategoriler ve Eşsiz kelimeler 0’dan başlayarak artalan biçimde numaralandırılmalıdır.

Örneğin Ç (0) ve J (1)  biçiminde Kategoriler numaralandırılırken. eşsiz kelime sayısı ise (6 adet) aşağıdaki gibi numaralandırılmalıdır.

Chinese(0) Japan(1) Tokyo(2) Beijing(3) Shanghai(4) Macao(5)

Sonraki adımda ise artık Döküman-Terim matrisi oluşturulabilir haldedir. Bunun için satır bazında her bir kelimenin tekrar sayısı bir vektör biçiminde yazılmakta ve bu vektörler alt alta eklendiğinde matris ortaya çıkmaktadır. Örneğin 1. satır için oluşturulacak vektör aşağıdaki gibidir.

2 0 0 1 0 0 (Chinese 2 tane, Beijing 1 tane, diğerleri ise 0 tane).

Bu biçimde her bir satır için bir vektör yazılırsa aşağıdaki Döküman-Terim matrisi elde edilmiş olur.

Chinese(0) Japan(1) Tokyo(2) Beijing(3) Shanghai(4) Macao(5)
Ç(0) 2 0 0 1 0 0
Ç(0) 2 0 0 0 1 0
Ç(0) 1 0 0 0 0 1
J(1) 1 1 1 0 0 0

Hazırlanan döküman terim matrisinin Apache Spark’a belirli bir formatta sunulması gerekmektedir. Bu formatta kategoriler virgül ile, tekrar sayıları ise boşluklu olarak birbirinden ayrılmaktadır.  Format örneği aşağıdaki gibidir.

0,2 0 0 1 0 0
0,2 0 0 0 1 0
0,1 0 0 0 0 1
1,1 1 1 0 0 0

Hazırlanan bu döküman terim matrisini  artık MLlib ile öğretim işlemine tabi tutabiliriz. Öncelikli olarak matrisi training.data isimli dosyaya kaydettiğimizi düşünürsek, bu matrisin Spark ile öğretilmesi aşağıdaki gibi olmaktadır.


SparkConf conf = new SparkConf()
		.setMaster("local")
		.setAppName("Naive Bayes Classifier")
		.set("spark.executor.memory", "1g");

JavaSparkContext context = new JavaSparkContext(conf); // (1)

RDD trainData = MLUtils.loadLabeledData(context.sc(), "training.data"); // (2)

NaiveBayesModel trained = NaiveBayes.train(trainData); // (3)

(1) numaralı kısımda bir JavaSparkContext nesnesi üretilmektedir. Bu nesne, konfigürasyon bilgileriyle birlikte bir Spark uygulamasını temsil etmektedir.

(2) numaralı kısımda training.data içerisindeki Döküman-Terim matris verileri LabeledPoint nesneleri olarak Spark ortamına dahil edilmektedir.

(3) numarada ise NaiveBayes#train metodu ile matris verisi Spark uygulamasına öğretilmektedir. Öğretim işlemi sonucunda geriye NaiveBayesModel isimli nesne sunulmaktadır. Bu nesne üzerinden tahminleme yapılabilmektedir. Şimdi ise, NaiveBayesModel nesnesi üzerinden bir cümlenin kategorisini tahmin etme aşamasına gelmiş bulunuyoruz. Örneğin aşağıdaki tabloda yer lan cümlenin kategorisini tahmin etmeye çalışalım.

Test verisi Chinese Chinese İstanbul Chinese Tokyo Japan Kategori = ???

Öğretilecek verilerde olduğu gibi, test verileri de birer vektör olarak Spark ortamına sunulmalıdır. Bu istikamette, yukarıdaki test verisinin vektör çıktısı aşağıdaki gibi olacaktır.

3 1 1 0 0 0

(3 adet Chinese, 1 adet Japan, 1 adet Tokyo) Bu vektörü Spark ortamında;

Vector testData = Vectors.dense(new double[]{3, 1, 1, 0, 0, 0});

biçiminde yazabiliriz. Sonrasında ise NaiveBayesModel#predict metodu ile test verisinin kategorisini tahminleyebiliriz. Uygulamanın tam kod hali aşağıdaki gibi olmaktadır.


SparkConf conf = new SparkConf()
		.setMaster("local")
		.setAppName("Naive Bayes Classifier")
		.set("spark.executor.memory", "1g");

JavaSparkContext context = new JavaSparkContext(conf); // (1)

RDD trainData = MLUtils.loadLabeledData(context.sc(), "training.data"); // (2)

NaiveBayesModel trained = NaiveBayes.train(trainData); // (3)

Vector testData = Vectors.dense(new double[]{3, 1, 1, 0, 0, 0});

double result = trained.predict(testData); 

System.out.println("Result = " + result);

NaiveBayesModel#predict metodu, double türünde bir değer döndürmektedir. Bu değer, tahmin edilen kategorinin numarası olmaktadır. Hatırlarsanız Ç için 0, J için 1 sayısını vermiş idik. Burada result değişkeninde ise Ç için 0.0, J için ise 1.0 double değerleri elde edilecektir.

Şimdi sizler de test ve öğretim verileri üzerinde değişiklikler yaparak, Spark ile içerik sınıflandırması yapabilirsiniz.

Örnek uygulamaya https://github.com/rahmanusta/Spark-Bayes adresinden erişebilirsiniz.

Tekrar görüşmek dileğiyle..

Tag:backend

  • Share:
author avatar
Kodedu

Previous post

Github Atom Editörü
14 Haziran 2014

Next post

Java 8 - Consumer Arayüzü
2 Temmuz 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    4 Comments

  1. Barış
    15 Kasım 2017
    Cevapla

    Merhaba Hocam. Elimde örnek bir log dosyası içeriğinde gelen ip, statu kodu, zaman, istek sayfa gibi kolonlar var. Ben bunu Apache Spark ve Python kullanarak bayes ile hangi özelliğine göre sınıflandırma yapmam gerekir. Yol gösterebilir misiniz ?

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Dağıtık uygulama çatılarının karşılaştırılması (Hadoop, GridGain, Hazelcast, DAC) Bölüm II
28Kas2011
Webiner videosu : Javascript ve Rest iletişimi
27Eyl2012
Java EE 7 – Concurrency Utilities
10Eyl2013
Dekoratör Tasarım Kalıbı
15May2012

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.