Naïve Bayes Classifier (NBC)

Contoh implementasi Metode Klasifikasi Naïve Bayes / Naïve Bayes Classifier (NBC) menggunakan PHP dan MySQL untuk memprediksi besarnya penggunaan listrik rumah tangga.

Metode Naïve Bayes Classifier (NBC) merupakan salah satu algoritma dalam teknik data mining yang menerapkan teori Bayes dalam klasifikasi (Santosa 2007). Ciri utama dari Naïve Bayes Classifier ini adalah asumsi yg sangat kuat (naïf) akan independensi dari masing-masing kondisi / kejadian

[ author : cahya dsn, published on : April 13, 2018 updated on : April 21, 2018 ]

minerva minerva donasi donation

Mau lihat artikel lainya? Dapatkan artikel-artikel lain seputar pemrograman website di sini, dan dapatkan ide-ide baru

Definisi lain mengatakan Naïve Bayes merupakan pengklasifikasian dengan metode probabilitas dan statistik yang dikemukan oleh ilmuwan Inggris Thomas Bayes, yaitu memprediksi peluang di masa depan berdasarkan pengalaman di masa sebelumnya (Bustami 2013).

Naïve Bayes didasarkan pada asumsi penyederhanaan bahwa nilai atribut secara kondisional saling bebas jika diberikan nilai output. Dengan kata lain, diberikan nilai output, probabilitas mengamati secara bersama adalah produk dari probabilitas individu (Ridwan 2013). Keuntungan penggunaan Naive Bayes adalah bahwa metode ini hanya membutuhkan jumlah data pelatihan (Training Data) yang kecil untuk menentukan estimasi paremeter yang diperlukan dalam proses pengklasifikasian. Naive Bayes sering bekerja jauh lebih baik dalam kebanyakan situasi dunia nyata yang kompleks dari pada yang diharapkan (Pattekari and Parveen 2012)

Naive Bayes Classifier dinilai bekerja sangat baik dibanding dengan model classifier lainnya, yaitu Naïve Bayes Classifier memiliki tingkat akurasi yg lebih baik dibanding model classifier lainnya(Xhemali 2009).

Pre-requisites

  • Pemahaman terhadap dasar-dasar Statistika terutama mengenai Probabilitas/Peluang
  • Pemahaman terhadap dasar-dasar teknologi Web,HTML dan CSS
  • Pemahaman terhadap dasar-dasar basis data/database, terutama query SQL pada MySQL/mariaDB
  • Pemahaman terhadap dasar-dasar pemrograman PHP, terutama fungsi-fungsi koneksi database dan pengelolaan tipe data array

Teorema Naïve Bayes

Sebelum menjelaskan Naïve Bayes Classifier ini, akan dijelaskan terlebih dahulu Teorema Bayes yang menjadi dasar dari metoda tersebut. Pada Teorema Bayes, bila terdapat dua kejadian yang terpisah (misalkan X dan H), maka Teorema Bayes dirumuskan sebagai berikut (Bustami 2013).:

.. [NBC-01]
Keterangan
  • X : Data dengan class yang belum diketahui
  • H : Hipotesis data merupakan suatu class spesifik
  • P(H|X) : Probabilitas hipotesis H berdasar kondisi X (posteriori probabilitas)
  • P(H) : Probabilitas hipotesis H (prior probabilitas)
  • P(X|H) : Probabilitas X berdasarkan kondisi pada hipotesis H
  • P(X) : Probabilitas X

Teorema Bayes sering pula dikembangkan mengingat berlakunya hukum probabilitas total, menjadi seperti berikut:

.. [NBC-02]
Keterangan
  • i : 1,2,3, ... , n jumlah data Hipotesis (prior probabilitas)
  • dimana : H1 U H2 U H3 ... U Hn = S
  • S : Probabilitas total H

Untuk menjelaskan Teorema Naïve Bayes, perlu diketahui bahwa proses klasifikasi memerlukan sejumlah petunjuk untuk menentukan kelas apa yang cocok bagi sampel yang dianalisis tersebut. Karena itu, Teorema Bayes di atas disesuaikan sebagai berikut:

.. [NBC-03]

Di mana Variabel C merepresentasikan kelas, sementara variabel F1 ... Fn merepresentasikan karakteristik petunjuk yang dibutuhkan untuk melakukan klasifikasi. Maka rumus tersebut menjelaskan bahwa peluang masuknya sampel karakteristik tertentu dalam kelas C (Posterior) adalah peluang munculnya kelas C (sebelum masuknya sampel tersebut, seringkali disebut prior), dikali dengan peluang kemunculan karakteristik-karakteristik sampel pada kelas C (disebut juga likelihood), dibagi dengan peluang kemunculan karakteristik-karakteristik sampel secara global (disebut juga evidence). Karena itu, rumus di atas dapat pula ditulis secara sederhana sebagai berikut:

.. [NBC-04]

Nilai Evidence selalu tetap untuk setiap kelas pada satu sampel. Nilai dari posterior tersebut nantinya akan dibandingkan dengan nilai-nilai posterior kelas lainnya untuk menentukan ke kelas apa suatu sampel akan diklasifikasikan. Penjabaran lebih lanjut rumus Bayes tersebut dilakukan dengan menjabarkan (C,F1, ... , Fn) menggunakan aturan perkalian sebagai berikut:

.. [NBC-05]

Dapat dilihat bahwa hasil penjabaran tersebut menyebabkan semakin banyak dan semakin kompleksnya faktor - faktor syarat yang mempengaruhi nilai probabilitas, yang hampir mustahil untuk dianalisa satu persatu. Akibatnya, perhitungan tersebut menjadi sulit untuk dilakukan. Disinilah digunakan asumsi independensi yang sangat tinggi (naif), bahwa masing-masing petunjuk (F1,F2 , ..., Fn) saling bebas (independen) satu sama lain. Dengan asumsi tersebut, maka berlaku suatu kesamaan sebagai berikut:

.. [NBC-06]

Untuk i≠j, sehingga

.. [NBC-07]

Atau dapat dituliskan dalam notasi

.. [NBC-08]

yang dapat dijabarkan sebagai berikut

.. [NBC-09]

Persamaan di atas merupakan model dari teorema Naïve Bayes yang selanjutnya akan digunakan dalam proses klasifikasi. Untuk klasifikasi dengan data kontinyu digunakan rumus Densitas Gauss :

.. [NBC-10]
Keterangan
  • P : Peluang
  • Xi : Atribut ke-i
  • xi : Nilai Atribut ke-i
  • Y : Kelas yang dicari
  • yi : Sub-kelas yang dicari
  • μ : mean, menyatakan rata-rata dari seluruh atribut
  • σ : Deviasi Standar, menyatakan varian dari seluruh atribut

Alur Metode Naive Bayes

Alur dari metode Naive Bayes dapat dilihat pada Gambar 1 (Saleh 2015)sebagai berikut:


GAMBAR 1 : Alur Metode Naive Bayes

Adapun keterangan dari gambar di atas adalah sebagai berikut:

  1. Membaca Data Training
  2. Menghitung Jumlah dan Probabilitas, namun jika data numerik maka
    1. Menghitung nilai mean dan Dtandar Deviasi dari masing-masing parameter yang merupakan numerik. Adapun persamaan untuk mencari nilai rata-rata hitung (mean) adalah seperti dalam persamaan [NBC-11] berikut ini:
      .. [NBC-11]

      atau

      .. [NBC-12]
      Keterangan
      • μ : nilai rata-rata hitung (mean)
      • xi : nilai x ke-i
      • n : jumlah sampel
      Sedangkan persamaan untuk menghitung nilai Nilai Simpangan Baku (Standar Deviasi) dirumuskan sebagai berikut :
      .. [NBC-13]
      Keterangan
      • σ :standar deviasi
      • xi : nilai x ke-i
      • μ : nilai rata-rata hitung (mean)
      • n : jumlah sampel
    2. Menghitung nilai probabilistik dengan cara menghitung jumlah data yang sesuai dari kategori yang sama dibagi dengan jumlah data pada kategori tersebut.
  3. Mendapatkan nilai dalam tabel mean, Standar Deviasi dan Probabilitas
  4. Menghasilkan Solusi

Kelebihan dan Kekurangan

Teorema Naïve Bayes memiliki beberapa kelebihan dan kekurangan yaitu sebagai berikut

Kelebihan

Teori Bayesian, mempunyai beberapa kelebihan (Grainner 1998), yaitu:

  • Mudah untuk dipahami
  • Hanya memerlukan pengkodean yang sederhana
  • Lebih cepat dalam penghitungan
  • Menangani kuantitatif dan data diskrit
  • Kokoh untuk titik noise yang diisolasi, misalkan titik yang dirata – ratakan ketika mengestimasi peluang bersyarat data.
  • Hanya memerlukan sejumlah kecil data pelatihan untuk mengestimasi parameter (rata – rata dan variansi dari variabel) yang dibutuhkan untuk klasifikasi.
  • Menangani nilai yang hilang dengan mengabaikan instansi selama perhitungan estimasi peluang
  • Cepat dan efisiensi ruang
  • Kokoh terhadap atribut yang tidak relevan

Kekurangan

Sedangkan kekurangan dari Teorema ini adalah :

  • Kekurangan dari Teori probabilitas Bayesian yang banyak dikritisi oleh para ilmuwan adalah karena pada teori ini, satu probabilitas saja tidak bisa mengukur seberapa dalam tingkat keakuratannya. Dengan kata lain, kurang bukti untuk membuktikan kebenaran jawaban yang dihasilkan dari teori ini.
  • Tidak berlaku jika probabilitas kondisionalnya adalah 0 (nol), apabila nol maka probabilitas prediksi akan bernilai nol juga
  • Mengasumsikan variabel bebas

Laplace Correction

Laplace Correction (Laplacian Estimator) atau additive smoothing adalah suatu cara untuk menangani nilai probabilitas 0 (nol). Dari sekian banyak data di training set, pada setiap perhitungan datanya ditambah 1 (satu) dan tidak akan membuat perbedaan yang berarti pada estimasi probabilitas sehingga bisa menghindari kasus nilai probabilitas 0 (nol). Laplace Correction ini dapat dinyatakan dalam persamaan seperti pada persamaan [NBC-12] berikut ini

.. [NBC-12]
Keterangan
  • ρi : probabilitas dari atribut mi
  • mi : jumlah sampel dalam kelas dari atribut mi
  • k : jumlah kelas dari atribut mi
  • n : jumlah sampel

Sebagai contoh, asumsikan ada class Penggunaan Listrik=sedang di suatu training set, memiliki 7 sampel, ada 0 sampel dengan Perlengkapan=sedikit, 0 sampel dengan Perlengkapan=sedang, dan 7 sampel dengan Perlengkapan=banyak.

Probabilitas dari kejadian ini tanpa Laplacian Correction adalah

P(Perlengkapan=sedikit|Penggunaan Listrik=sedang)=0,
P(Perlengkapan=sedang|Penggunaan Listrik=sedang)=0, dan
P(Perlengkapan=banyak|Penggunaan Listrik=sedang)=1.000 (dari 7/7).

Menggunakan Laplacian Correction dari tiga kejadian diatas, diasumsikan ada 1 sampel lagi untuk masing – masing nilai Penggunaan Listrik=sedang. Dengan cara ini, didapatkanlah probabilitas sebagai berikut (dibulatkan menjadi 3 angka dibelakang koma):

P(Perlengkapan=sedikit|Penggunaan Listrik=sedang)=0.100 (dari 1/10),
P(Perlengkapan=sedang|Penggunaan Listrik=sedang)=0.100 (dari 1/10), dan
P(Perlengkapan=banyak|Penggunaan Listrik=sedang)=0.800 (dari 8/10)

Probabilitas yang "dibenarkan" hasilnya tidak berbeda jauh dengan hasil probabilitas sebelumnya sehingga nilai probabilitas 0 (nol) dapat dihindari.

Peranan listrik sangat penting bagi setiap lapisan masyarakat bahkan listrik juga sangat dibutuhkan sebagai sarana produksi dan untuk kehidupan sehari-hari, begitu pentingnya peranan listrik tentu saja berdampak pada permintaan listrik yang semakin besar tapi hal ini kiranya tidak linier dengan persediaan listrik yang belum mampu memenuhi permintaan listrik yang begitu besar tersebut. Untuk mengatasi hal ini perlu adanya campur tangan pemerintah dan masyarakat dalam menggunakan listrik dengan bijak sehingga kebutuhan listrik tidak menjadi lebih besar dari persediaan listrik. Oleh karena itu setiap rumah tangga haruslah paham penggunaan listrik yang efektif.

Pembacaan Data Training

Untuk menentukan data yang nantinya akan dianalisis dengan Metode Naïve Bayes maka langkah pertama yang dilakukan adalah membaca data training. Pada contoh kasus ini ada sejumlah 45 data training/sampel. Adapun data training yang digunakan dapat dilihat pada tabel 1 berikut(Nasari 2014):

TABEL 1 : Data Training
NoJumlah
Tanggungan
Keluarga
Luas
Rumah
Pendapatan/
bulan
Daya
Listrik
Perlengkapan
Yang
Dimiliki
Penggunaan
Listrik
1banyakbesarbesarsedangsedangtinggi
2banyakstandarkeciltinggisedangtinggi
3banyakbesarbesartinggisedangtinggi
4banyakbesarkecilsedangsedangtinggi
5sedangbesarsedangtinggitinggitinggi
6sedangkecilbesarsedangrendahtinggi
7banyakstandarsedangtinggitinggitinggi
8banyakbesarbesartinggisedangrendah
9banyakbesarsedangsedangtinggitinggi
10sedangstandarbesartinggitinggitinggi
11banyakbesarbesarsedangtinggitinggi
12sedangstandarbesartinggitinggitinggi
13sedangbesarsedangtinggitinggisedang
14sedangstandarbesarsedangtinggirendah
15banyakbesarsedangtinggitinggisedang
16sedangstandarbesartinggitinggitinggi
17banyakbesarbesarsedangtinggitinggi
18sedikitstandarbesartinggisedangtinggi
19banyakstandarbesarsedangtinggitinggi
20sedangstandarbesartinggitinggitinggi
21sedikitkecilsedangtinggisedangtinggi
22banyakstandarbesartinggitinggitinggi
23banyakstandarbesarsedangrendahtinggi
24banyakbesarbesartinggisedangtinggi
25banyakbesarsedangtinggitinggisedang
26sedangstandarsedangtinggirendahtinggi
27banyakstandarbesartinggitinggitinggi
28banyakbesarbesarsedangsedangtinggi
29banyakstandarbesartinggitinggisedang
30sedangbesarbesartinggisedangtinggi
31banyakstandarsedangrendahtinggisedang
32banyakstandarbesarsedangtinggitinggi
33banyakbesarbesartinggitinggitinggi
34banyakbesarbesartinggitinggitinggi
35sedangbesarbesartinggitinggirendah
36sedangstandarbesarsedangtinggitinggi
37sedikitbesarsedangtinggisedangtinggi
38banyakbesarsedangtinggitinggitinggi
39sedangbesarkeciltinggirendahtinggi
40sedangkecilbesarrendahsedangrendah
41banyakbesarbesartinggisedangtinggi
42sedikitbesarkeciltinggisedangrendah
43banyakbesarsedangtinggitinggitinggi
44sedikitbesarbesartinggitinggisedang
45banyakbesarkeciltinggitinggisedang

Perhitungan Manual

Pada bagian ini akan dijelaskan mengenai perhitungan peluang/probabilitas dari data training yang diberikan. Penjelasannya sendiri disajikan secara langkah per langkah agar mudah dipahami.

Terdapat dua jenis peluang (probability) yang perlu dihitung dari dataset untuk model Naive Bayes :

  • Class Probabilities
  • Conditional Probabilities

Menghitung Class Probabilities

Dataset Penggunaan Listrik memiliki 3 kelas masalah, sehingga dapat diketahui probabilitas (P) masing-masing kelas dengan cara membagi nilai frekuensi/jumlah data untuk masing-masing kelas masalah, dengan jumlah total nilai frekuensi/jumlah data pada kelas tersebut, seperti yang ditunjukkan dalam perhitungan berikut ini :

P(penggunaan=rendah) = jumlahpenggunaan=rendah / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=rendah) = 5 / (5 + 7 + 33) = 5 / 45
P(penggunaan=rendah) = 0.111

P(penggunaan=sedang) = jumlahpenggunaan=sedang / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=sedang) = 7 / (5 + 7 + 33) = 7 / 45
P(penggunaan=sedang) = 0.155

P(penggunaan=tinggi) = jumlahpenggunaan=tinggi / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=tinggi) = 33 / (5 + 7 + 33) = 33 / 45
P(penggunaan=tinggi) = 0.733

Class Probabilities ini adalah nilai peluang/probabilitas dari masing-masing kelas masalah dari tujuan yang akan diharapkan/diprediksi. Sehingga dari perhitungan -- berdasarkan data training yang diberikan -- tersebut diperoleh peluang untuk penggunaan=rendah adalah 0.111, penggunaan=sedang adalah 0.155, penggunaan=tinggi adalah 0.733,

Menghitung Conditional Probabilities

Langkah selanjutnya adalah menghitung Conditional Probabilities, yaitu probililitas setiap nilai input terhadap nilai class Penggunaan Listrik.

Sebagai contoh di sini adalah perhitungan untuk masing-masing peluang untuk kriteria/atribut Jumlah Tanggungan terhadap nilai class Penggunaan Listrik. Perhitungan detailnya adalah sebagai berikut:

P(tanggungan=sedikit|penggunaan=rendah) = jumlahtanggungan=sedikit dan penggunaan=rendah / jumlahpenggunaan=rendah
P(tanggungan=sedikit|penggunaan=rendah) = 1 / 5
P(tanggungan=sedikit|penggunaan=rendah) = 0.200


P(tanggungan=sedang|penggunaan=rendah) = jumlahtanggungan=sedang dan penggunaan=rendah / jumlahpenggunaan=rendah
P(tanggungan=sedang|penggunaan=rendah) = 3 / 5
P(tanggungan=sedang|penggunaan=rendah) = 0.600


P(tanggungan=banyak|penggunaan=rendah) = jumlahtanggungan=banyak dan penggunaan=rendah / jumlahpenggunaan=rendah
P(tanggungan=banyak|penggunaan=rendah) = 1 / 5
P(tanggungan=banyak|penggunaan=rendah) = 0.200


P(tanggungan=sedikit|penggunaan=sedang) = jumlahtanggungan=sedikit dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=sedikit|penggunaan=sedang) = 1 / 7
P(tanggungan=sedikit|penggunaan=sedang) = 0.142


P(tanggungan=sedang|penggunaan=sedang) = jumlahtanggungan=sedang dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=sedang|penggunaan=sedang) = 1 / 7
P(tanggungan=sedang|penggunaan=sedang) = 0.142


P(tanggungan=banyak|penggunaan=sedang) = jumlahtanggungan=banyak dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=banyak|penggunaan=sedang) = 5 / 7
P(tanggungan=banyak|penggunaan=sedang) = 0.714


P(tanggungan=sedikit|penggunaan=tinggi) = jumlahtanggungan=sedikit dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=sedikit|penggunaan=tinggi) = 3 / 33
P(tanggungan=sedikit|penggunaan=tinggi) = 0.090


P(tanggungan=sedang|penggunaan=tinggi) = jumlahtanggungan=sedang dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=sedang|penggunaan=tinggi) = 10 / 33
P(tanggungan=sedang|penggunaan=tinggi) = 0.303


P(tanggungan=banyak|penggunaan=tinggi) = jumlahtanggungan=banyak dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=banyak|penggunaan=tinggi) = 20 / 33
P(tanggungan=banyak|penggunaan=tinggi) = 0.606


Dengan perhitungan yang sama, dapat dihitung Conditional Probabilities untuk masing-masing kriteria yang lainnya (hasil selengkapnya dapat dilihat dibagian Kriteria dan Probabilitas berikut ini).

Kriteria dan Probabilitas

Adapun nilai probabilitas dari data training pada tabel 1 untuk setiap kriteria dengan perhitungan sesuai perhitungan manual sebelumnya dapat dirangkum sebagai berikut:

Probabilitas Kriteria Penggunaan Listrik

Berdasarkan tabel 1 dapat diketahui dari 45 data terdapat : 5 data rumah tangga dengan penggunaan listrik rendah , 7 data rumah tangga dengan penggunaan listrik sedang , 33 data rumah tangga dengan penggunaan listrik tinggi.

Probabilitas kriteria penggunaan listrik dapat dilihat pada tabel 2

TABLE 2 : Probabilitas Penggunaan Listrik
Jumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
57330.1110.1550.733

Probabilitas Kriteria Jumlah Tanggungan

Pada kriteria jumlah tanggungan dapat diketahui dari 45 data terdapat : 1 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik rendah , 1 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik sedang , 3 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik tinggi , 3 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik rendah , 1 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik sedang , 10 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik tinggi , 1 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik rendah , 5 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik sedang , 20 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik tinggi.

Probabilitas kriteria jumlah tanggungan dapat dilihat pada tabel 3

TABLE 3 : Probabilitas Jumlah Tanggungan
Jumlah TanggunganJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
sedikit1131/5=0.2001/7=0.1423/33=0.090
sedang31103/5=0.6001/7=0.14210/33=0.303
banyak15201/5=0.2005/7=0.71420/33=0.606

Probabilitas Kriteria Luas Tanah

Pada kriteria luas tanah dapat diketahui dari 45 data terdapat : 1 data rumah tangga dengan luas tanah kecil dan penggunaan listrik rendah , tidak ada data rumah tangga dengan luas tanah kecil dan penggunaan listrik sedang , 2 data rumah tangga dengan luas tanah kecil dan penggunaan listrik tinggi , 1 data rumah tangga dengan luas tanah standar dan penggunaan listrik rendah , 2 data rumah tangga dengan luas tanah standar dan penggunaan listrik sedang , 14 data rumah tangga dengan luas tanah standar dan penggunaan listrik tinggi , 3 data rumah tangga dengan luas tanah besar dan penggunaan listrik rendah , 5 data rumah tangga dengan luas tanah besar dan penggunaan listrik sedang , 17 data rumah tangga dengan luas tanah besar dan penggunaan listrik tinggi.

Probabilitas kriteria luas tanah dapat dilihat pada tabel 4

TABLE 4 : Probabilitas Luas Tanah
Luas TanahJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
kecil1021/5=0.2001/10=0.1002/33=0.060
standar12141/5=0.2003/10=0.30014/33=0.424
besar35173/5=0.6006/10=0.60017/33=0.515

Probabilitas Kriteria Pendapatan

Pada kriteria pendapatan dapat diketahui dari 45 data terdapat : 1 data rumah tangga dengan pendapatan kecil dan penggunaan listrik rendah , 1 data rumah tangga dengan pendapatan kecil dan penggunaan listrik sedang , 3 data rumah tangga dengan pendapatan kecil dan penggunaan listrik tinggi , tidak ada data rumah tangga dengan pendapatan sedang dan penggunaan listrik rendah , 4 data rumah tangga dengan pendapatan sedang dan penggunaan listrik sedang , 8 data rumah tangga dengan pendapatan sedang dan penggunaan listrik tinggi , 4 data rumah tangga dengan pendapatan besar dan penggunaan listrik rendah , 2 data rumah tangga dengan pendapatan besar dan penggunaan listrik sedang , 22 data rumah tangga dengan pendapatan besar dan penggunaan listrik tinggi.

Probabilitas kriteria pendapatan dapat dilihat pada tabel 5

TABLE 5 : Probabilitas Pendapatan
PendapatanJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
kecil1132/8=0.2501/7=0.1423/33=0.090
sedang0481/8=0.1254/7=0.5718/33=0.242
besar42225/8=0.6252/7=0.28522/33=0.666

Probabilitas Kriteria Daya Listrik

Pada kriteria daya listrik dapat diketahui dari 45 data terdapat : 1 data rumah tangga dengan daya listrik rendah dan penggunaan listrik rendah , 1 data rumah tangga dengan daya listrik rendah dan penggunaan listrik sedang , tidak ada data rumah tangga dengan daya listrik rendah dan penggunaan listrik tinggi , 1 data rumah tangga dengan daya listrik sedang dan penggunaan listrik rendah , tidak ada data rumah tangga dengan daya listrik sedang dan penggunaan listrik sedang , 11 data rumah tangga dengan daya listrik sedang dan penggunaan listrik tinggi , 3 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik rendah , 6 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik sedang , 22 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik tinggi.

Probabilitas kriteria daya listrik dapat dilihat pada tabel 6

TABLE 6 : Probabilitas Daya Listrik
Daya ListrikJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
rendah1101/5=0.2002/10=0.2001/36=0.027
sedang10111/5=0.2001/10=0.10012/36=0.333
tinggi36223/5=0.6007/10=0.70023/36=0.638

Probabilitas Kriteria Perlengkapan

Pada kriteria perlengkapan dapat diketahui dari 45 data terdapat : tidak ada data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik rendah , tidak ada data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik sedang , 4 data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik tinggi , 3 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik rendah , tidak ada data rumah tangga dengan perlengkapan sedang dan penggunaan listrik sedang , 11 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik tinggi , 2 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik rendah , 7 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik sedang , 18 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik tinggi.

Probabilitas kriteria perlengkapan dapat dilihat pada tabel 7

TABLE 7 : Probabilitas Perlengkapan
PerlengkapanJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
sedikit0041/8=0.1251/10=0.1004/33=0.121
sedang30114/8=0.5001/10=0.10011/33=0.333
banyak27183/8=0.3758/10=0.80018/33=0.545

Pengujian Metode Naive Bayes

Dari nilai probabilitas di atas akan diuji data sebanyak 45 data dan dihasilkan hasil klasifikasi penggunaan listrik seperti terlihat pada TABEL 8. Untuk memudahkan pemahaman perhitungan prediksinya dicontohkan dalam perhitungan berikut:

Pada data ke-22; untuk Jumlah Tanggungan=banyak , Luas Tanah=standar , Pendapatan=besar , Daya Listrik=tinggi , Perlengkapan=banyak bisa dihitung nilai prediksi probabilitas dari masing-masing nilai kelasnya (berdasarkan persamaan NBC-08 atau NBC-09) sebagai berikut :

P(penggunaan=rendah|X)=(P(jumlah tanggungan=banyak|penggunaan=rendah)*P(luas tanah=standar|penggunaan=rendah)*P(pendapatan=besar|penggunaan=rendah)*P(daya listrik=tinggi|penggunaan=rendah)*P(perlengkapan=banyak|penggunaan=rendah)) * P(penggunaan=rendah)
P(penggunaan=rendah|X)=(0.200 * 0.200 * 0.625 * 0.600 * 0.375) * 0.111
P(penggunaan=rendah|X)=0.000625

P(penggunaan=sedang|X)=(P(jumlah tanggungan=banyak|penggunaan=sedang)*P(luas tanah=standar|penggunaan=sedang)*P(pendapatan=besar|penggunaan=sedang)*P(daya listrik=tinggi|penggunaan=sedang)*P(perlengkapan=banyak|penggunaan=sedang)) * P(penggunaan=sedang)
P(penggunaan=sedang|X)=(0.714 * 0.300 * 0.285 * 0.700 * 0.800) * 0.155
P(penggunaan=sedang|X)=0.0053333333333333

P(penggunaan=tinggi|X)=(P(jumlah tanggungan=banyak|penggunaan=tinggi)*P(luas tanah=standar|penggunaan=tinggi)*P(pendapatan=besar|penggunaan=tinggi)*P(daya listrik=tinggi|penggunaan=tinggi)*P(perlengkapan=banyak|penggunaan=tinggi)) * P(penggunaan=tinggi)
P(penggunaan=tinggi|X)=(0.606 * 0.424 * 0.666 * 0.638 * 0.545) * 0.733
P(penggunaan=tinggi|X)=0.043805053906064

Dari perhitungan tersebut diperoleh nilai probabilitas P(penggunaan=tinggi|X) adalah yang tertinggi (0.043805053906064), sehingga prediksinya adalah Penggunaan Listriknya Tinggi

TABEL 8 : Hasil Pengujian
NoClassInput KategorikalProbabilitasPrediction
X1X2X3X4X5rendahsedangtinggi
1tinggibanyakbesarbesarsedangsedang0.000833333333333330.000190476190476190.016959720663424tinggi
2tinggibanyakstandarkeciltinggisedang0.000333333333333330.000333333333333330.0036504211588387tinggi
3tinggibanyakbesarbesartinggisedang0.00250.00133333333333330.032506131271563tinggi
4tinggibanyakbesarkecilsedangsedang0.000333333333333339.5238095238095E-50.002312689181376tinggi
5tinggisedangbesarsedangtinggibanyak0.0011250.00426666666666670.0096712456675726tinggi
6tinggisedangkecilbesarsedangsedikit0.000208333333333336.3492063492063E-60.00036277477354918tinggi
7tinggibanyakstandarsedangtinggibanyak0.0001250.0106666666666670.015929110511296tinggi
8rendahbanyakbesarbesartinggisedang0.00250.00133333333333330.032506131271563tinggi
9tinggibanyakbesarsedangsedangbanyak0.0001250.0030476190476190.010091734609641tinggi
10tinggisedangstandarbesartinggibanyak0.0018750.00106666666666670.021902526953032tinggi
11tinggibanyakbesarbesarsedangbanyak0.0006250.00152380952380950.027752270176513tinggi
12tinggisedangstandarbesartinggibanyak0.0018750.00106666666666670.021902526953032tinggi
13sedangsedangbesarsedangtinggibanyak0.0011250.00426666666666670.0096712456675726tinggi
14rendahsedangstandarbesarsedangbanyak0.0006250.000152380952380950.011427405366799tinggi
15sedangbanyakbesarsedangtinggibanyak0.0003750.0213333333333330.019342491335145sedang
16tinggisedangstandarbesartinggibanyak0.0018750.00106666666666670.021902526953032tinggi
17tinggibanyakbesarbesarsedangbanyak0.0006250.00152380952380950.027752270176513tinggi
18tinggisedikitstandarbesartinggisedang0.000833333333333330.000133333333333330.0040154632747225tinggi
19tinggibanyakstandarbesarsedangbanyak0.000208333333333330.000761904761904760.022854810733599tinggi
20tinggisedangstandarbesartinggibanyak0.0018750.00106666666666670.021902526953032tinggi
21tinggisedikitkecilsedangtinggisedang0.000166666666666678.8888888888889E-50.00020859549479078tinggi
22tinggibanyakstandarbesartinggibanyak0.0006250.00533333333333330.043805053906064tinggi
23tinggibanyakstandarbesarsedangsedikit6.9444444444444E-59.5238095238095E-50.0050788468296886tinggi
24tinggibanyakbesarbesartinggisedang0.00250.00133333333333330.032506131271563tinggi
25sedangbanyakbesarsedangtinggibanyak0.0003750.0213333333333330.019342491335145sedang
26tinggisedangstandarsedangtinggisedikit0.0001250.000266666666666670.0017699011679218tinggi
27tinggibanyakstandarbesartinggibanyak0.0006250.00533333333333330.043805053906064tinggi
28tinggibanyakbesarbesarsedangsedang0.000833333333333330.000190476190476190.016959720663424tinggi
29sedangbanyakstandarbesartinggibanyak0.0006250.00533333333333330.043805053906064tinggi
30tinggisedangbesarbesartinggisedang0.00750.000266666666666670.016253065635782tinggi
31sedangbanyakstandarsedangrendahbanyak4.1666666666667E-50.0030476190476190.00069257002223026sedang
32tinggibanyakstandarbesarsedangbanyak0.000208333333333330.000761904761904760.022854810733599tinggi
33tinggibanyakbesarbesartinggibanyak0.0018750.0106666666666670.053191851171649tinggi
34tinggibanyakbesarbesartinggibanyak0.0018750.0106666666666670.053191851171649tinggi
35rendahsedangbesarbesartinggibanyak0.0056250.00213333333333330.026595925585825tinggi
36tinggisedangstandarbesarsedangbanyak0.0006250.000152380952380950.011427405366799tinggi
37tinggisedikitbesarsedangtinggisedang0.00050.000533333333333330.0017730617057216tinggi
38tinggibanyakbesarsedangtinggibanyak0.0003750.0213333333333330.019342491335145sedang
39tinggisedangbesarkeciltinggisedikit0.000750.000133333333333330.00080593713896438tinggi
40rendahsedangkecilbesarrendahsedang0.000833333333333331.2698412698413E-58.3135885605021E-5rendah
41tinggibanyakbesarbesartinggisedang0.00250.00133333333333330.032506131271563tinggi
42rendahsedikitbesarkeciltinggisedang0.0010.000133333333333330.00066489813964561rendah
43tinggibanyakbesarsedangtinggibanyak0.0003750.0213333333333330.019342491335145sedang
44sedangsedikitbesarbesartinggibanyak0.0018750.00213333333333330.0079787776757474tinggi
45sedangbanyakbesarkeciltinggibanyak0.000750.00533333333333330.0072534342506794tinggi

Berdasarkan TABEL 8 di atas dapat dilihat persentase untuk Correctly Classified Instance adalah sebesar 80.000 % sementara persentase untuk Incorrectly Classified Instance adalah sebesar 20.000 %. Di mana dari 45 data penggunaan listrik rumah tangga, ada sebanyak 36 data penggunaan listrik rumah tangga berhasil diklasifikasikan dengan benar dan sebanyak 9 data penggunaan listrik rumah tangga tidak berhasil diklasifikasikan dengan benar.

Pembuatan Database

Sebagai bahan pembelajaran Metode Naïve Bayes Classifier ini; dibuat database (dalam hal ini menggunakan MySQL/MariaDB Database server) sebagai berikut:

CREATE DATABASE IF NOT EXISTS db_dm;
USE db_dm;

Awalnya membuat dulu database dengan nama db_dm jika belum ada database dengan nama tersebut, kemudian gunakan database tersebut dengan memakai sintak USE db_dm;

Dalam hal ini, pembuatan database memakai command console dari database server yang bersangkutan

Dari data pada fakta di atas, dapat di representasikan kriteria/atribut dan parameter yang berperan dalam permasalahan ini dalam bentuk tabel database, yaitu tabel nbc_atribut sebagai berikut:

DROP TABLE IF EXISTS nbc_atribut;
CREATE TABLE IF NOT EXISTS nbc_atribut(
  id_atribut TINYINT(3) UNSIGNED AUTO_INCREMENT,
  atribut VARCHAR(100) NOT NULL,
  PRIMARY KEY(id_atribut)
)ENGINE=MyISAM;

INSERT INTO nbc_atribut(id_atribut,atribut)
VALUES
(1,'Penggunaan Listrik'),
(2,'Jumlah Tanggungan Keluarga'),
(3,'Luas Tanah'),
(4,'Pendapatan /bulan'),
(5,'Daya Listrik'),
(6,'Perlengkapan  yang dimiliki');

Record pertama dalam tabel nbc_atribut ini (Penggunaan Listrik) adalah merupakan class atribut, yang merupakan atribut tujuan.

Berikutnya adalah data mengenai parameter-parameter/nilai dari tiap kriteria/atribut yang akan diperhitungkan -- sesuai dengan contoh kasus di atas -- dengan dibuatkan satu tabel baru bernama nbc_parameter.

DROP TABLE IF EXISTS nbc_parameter;
CREATE TABLE IF NOT EXISTS nbc_parameter(
  id_parameter TINYINT(3) UNSIGNED AUTO_INCREMENT,
  id_atribut TINYINT(3) UNSIGNED NOT NULL,
  nilai TINYINT(3) UNSIGNED NOT NULL,
  parameter  VARCHAR(100) NOT NULL,
  PRIMARY KEY(id_parameter)
)ENGINE=MyISAM;

INSERT INTO nbc_parameter(id_atribut,nilai,parameter) 
VALUES
(1,0,'rendah'),(1,1,'sedang'),(1,2,'tinggi'),
(2,0,'sedikit'),(2,1,'sedang'),(2,2,'banyak'),
(3,0,'kecil'),(3,1,'standar'),(3,2,'besar'),
(4,0,'kecil'),(4,1,'sedang'),(4,2,'besar'),
(5,0,'rendah'),(5,1,'sedang'),(5,2,'tinggi'),
(6,0,'sedikit'),(6,1,'sedang'),(6,2,'banyak');

Tabel nbc_responden bersifat optional, tabel ini digunakan untuk menyimpan data detail dari responder dan bisa ditambahkan field/kolom lain jika diperlukan

DROP TABLE IF EXISTS nbc_responden;
CREATE TABLE IF NOT EXISTS nbc_responden(
  id_responden TINYINT(3) UNSIGNED AUTO_INCREMENT,
  responden VARCHAR(50),
  PRIMARY KEY(id_responden)
)ENGINE=MyISAM;

INSERT INTO nbc_responden(id_responden,responden) 
VALUES
(1,'Responden 1'),(2,'Responden 2'),(3,'Responden 3'),(4,'Responden 4'),(5,'Responden 5'),
(6,'Responden 6'),(7,'Responden 7'),(8,'Responden 8'),(9,'Responden 9'),(10,'Responden 10'),
(11,'Responden 11'),(12,'Responden 12'),(13,'Responden 13'),(14,'Responden 14'),(15,'Responden 15'),
(16,'Responden 16'),(17,'Responden 17'),(18,'Responden 18'),(19,'Responden 19'),(20,'Responden 20'),
(21,'Responden 21'),(22,'Responden 22'),(23,'Responden 23'),(24,'Responden 24'),(25,'Responden 25'),
(26,'Responden 26'),(27,'Responden 27'),(28,'Responden 28'),(29,'Responden 29'),(30,'Responden 30'),
(31,'Responden 31'),(32,'Responden 32'),(33,'Responden 33'),(34,'Responden 34'),(35,'Responden 35'),
(36,'Responden 36'),(37,'Responden 37'),(38,'Responden 38'),(39,'Responden 39'),(40,'Responden 40'),
(41,'Responden 41'),(42,'Responden 42'),(43,'Responden 43'),(44,'Responden 44'),(45,'Responden 45'),
;

Data-data training, yaitu data-data sample yang akan diperhitungkan -- sesuai dengan contoh kasus di atas -- disimpan pada satu tabel baru bernama nbc_data sebagai berikut.

DROP TABLE IF EXISTS nbc_data;
CREATE TABLE IF NOT EXISTS nbc_data(
  id_data INT(11) UNSIGNED AUTO_INCREMENT,
  id_responden TINYINT(3) UNSIGNED NOT NULL,
  id_atribut TINYINT(3) UNSIGNED NOT NULL,
  id_parameter TINYINT(3) UNSIGNED NOT NULL,
  PRIMARY KEY(id_data)
)ENGINE=MyISAM;

INSERT INTO nbc_data(id_responden,id_atribut,id_parameter) 
VALUES
(1,1,2),(1,2,2),(1,3,2),(1,4,2),(1,5,1),(1,6,1),
(2,1,2),(2,2,2),(2,3,1),(2,4,0),(2,5,2),(2,6,1),
(3,1,2),(3,2,2),(3,3,2),(3,4,2),(3,5,2),(3,6,1),
(4,1,2),(4,2,2),(4,3,2),(4,4,0),(4,5,1),(4,6,1),
(5,1,2),(5,2,1),(5,3,2),(5,4,1),(5,5,2),(5,6,2),
(6,1,2),(6,2,1),(6,3,0),(6,4,2),(6,5,1),(6,6,0),
(7,1,2),(7,2,2),(7,3,1),(7,4,1),(7,5,2),(7,6,2),
(8,1,0),(8,2,2),(8,3,2),(8,4,2),(8,5,2),(8,6,1),
(9,1,2),(9,2,2),(9,3,2),(9,4,1),(9,5,1),(9,6,2),
(10,1,2),(10,2,1),(10,3,1),(10,4,2),(10,5,2),(10,6,2),
(11,1,2),(11,2,2),(11,3,2),(11,4,2),(11,5,1),(11,6,2),
(12,1,2),(12,2,1),(12,3,1),(12,4,2),(12,5,2),(12,6,2),
(13,1,1),(13,2,1),(13,3,2),(13,4,1),(13,5,2),(13,6,2),
(14,1,0),(14,2,1),(14,3,1),(14,4,2),(14,5,1),(14,6,2),
(15,1,1),(15,2,2),(15,3,2),(15,4,1),(15,5,2),(15,6,2),
(16,1,2),(16,2,1),(16,3,1),(16,4,2),(16,5,2),(16,6,2),
(17,1,2),(17,2,2),(17,3,2),(17,4,2),(17,5,1),(17,6,2),
(18,1,2),(18,2,0),(18,3,1),(18,4,2),(18,5,2),(18,6,1),
(19,1,2),(19,2,2),(19,3,1),(19,4,2),(19,5,1),(19,6,2),
(20,1,2),(20,2,1),(20,3,1),(20,4,2),(20,5,2),(20,6,2),
(21,1,2),(21,2,0),(21,3,0),(21,4,1),(21,5,2),(21,6,1),
(22,1,2),(22,2,2),(22,3,1),(22,4,2),(22,5,2),(22,6,2),
(23,1,2),(23,2,2),(23,3,1),(23,4,2),(23,5,1),(23,6,0),
(24,1,2),(24,2,2),(24,3,2),(24,4,2),(24,5,2),(24,6,1),
(25,1,1),(25,2,2),(25,3,2),(25,4,1),(25,5,2),(25,6,2),
(26,1,2),(26,2,1),(26,3,1),(26,4,1),(26,5,2),(26,6,0),
(27,1,2),(27,2,2),(27,3,1),(27,4,2),(27,5,2),(27,6,2),
(28,1,2),(28,2,2),(28,3,2),(28,4,2),(28,5,1),(28,6,1),
(29,1,1),(29,2,2),(29,3,1),(29,4,2),(29,5,2),(29,6,2),
(30,1,2),(30,2,1),(30,3,2),(30,4,2),(30,5,2),(30,6,1),
(31,1,1),(31,2,2),(31,3,1),(31,4,1),(31,5,0),(31,6,2),
(32,1,2),(32,2,2),(32,3,1),(32,4,2),(32,5,1),(32,6,2),
(33,1,2),(33,2,2),(33,3,2),(33,4,2),(33,5,2),(33,6,2),
(34,1,2),(34,2,2),(34,3,2),(34,4,2),(34,5,2),(34,6,2),
(35,1,0),(35,2,1),(35,3,2),(35,4,2),(35,5,2),(35,6,2),
(36,1,2),(36,2,1),(36,3,1),(36,4,2),(36,5,1),(36,6,2),
(37,1,2),(37,2,0),(37,3,2),(37,4,1),(37,5,2),(37,6,1),
(38,1,2),(38,2,2),(38,3,2),(38,4,1),(38,5,2),(38,6,2),
(39,1,2),(39,2,1),(39,3,2),(39,4,0),(39,5,2),(39,6,0),
(40,1,0),(40,2,1),(40,3,0),(40,4,2),(40,5,0),(40,6,1),
(41,1,2),(41,2,2),(41,3,2),(41,4,2),(41,5,2),(41,6,1),
(42,1,0),(42,2,0),(42,3,2),(42,4,0),(42,5,2),(42,6,1),
(43,1,2),(43,2,2),(43,3,2),(43,4,1),(43,5,2),(43,6,2),
(44,1,1),(44,2,0),(44,3,2),(44,4,2),(44,5,2),(44,6,2),
(45,1,1),(45,2,2),(45,3,2),(45,4,0),(45,5,2),(45,6,2);

Pengambilan Nilai

Sebelum dilakukan perhitungan-perhitungan menggunakan metoda Naive Bayes Classifier dengan menggunakan PHP, maka terlebih dahulu kita menyiapkan data yang akan diolah dengan mengambil (fetching) data dari database, dan disimpan (assign) ke dalam variabel-variabel PHP.

Data-data yang diambil tersebut meliputi data-data primer -- yaitu data kriteria dan parameternya -- serta data-data sekunder yaitu data training (nilai)

Koneksi ke Database

Sebelum melalukan operasi dengan data dari database, perlu dibuat script untuk koneksi ke database terlebih dahulu. Dari database yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli sebagai berikut:

<?php
//-- konfigurasi database
$dbhost 'localhost';
$dbuser 'root';
$dbpass '';
$dbname 'db_dm';
//-- koneksi ke database server dengan extension mysqli
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- hentikan program dan tampilkan pesan kesalahan jika koneksi gagal
if ($db->connect_error) {
    die(
'Connect Error ('.$db->connect_errno.')'.$db->connect_error);
}
?>

Sesuaikan nilai-nilai $dbhost,$dbuser,$dbpass dan $dbname dengan konfigurasi database yg digunakan.

Pengambilan Nilai Atribut

Data atribut yang akan digunakan dalam perhitungan metode Naïve Bayes Classifier ini diambil dari tabel nbc_atribut dan dimasukkan ke dalam variabel $atribut yang berupa array multidimensi. Variabel $atribut ini mempunyai index berupa id_atribut dan berisi item data nama atribut dari masing-masing atribut tersebut.

<?php
//-- query untuk mendapatkan semua data atribut di tabel nbc_atribut
$sql 'SELECT * FROM nbc_atribut';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$atribut=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
    
$atribut[$row['id_atribut']]=$row['atribut'];
}
?>

Pengambilan Nilai Parameter

Data nilai parameter yang akan digunakan dalam perhitungan berikutnya, diambil dari tabel nbc_parameter dan dimasukkan ke dalam variabel array multidimensi $parameter.

<?php
//-- query untuk mendapatkan semua data atribut di tabel nbc_atribut
$sql 'SELECT * FROM nbc_parameter ORDER BY id_atribut,id_parameter';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$parameter=array();
$id_atribut=0;
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
    if(
$id_atribut!=$row['id_atribut']){
        
$parameter[$row['id_atribut']]=array();
        
$id_atribut=$row['id_atribut'];
    }
    
$parameter[$row['id_atribut']][$row['nilai']]=$row['parameter'];
}
?>

Sebagai contoh adalah, dari record yang pertama didapat data array $parameter[1][0]='rendah'. Indeks pertama dari variabel $parameter tersebut adalah nilai dari id_atribut, dan indeks keduanya adalah nilai-nya (numerik), dan isinya berupa data literal (string) dari parameter tersebut.

Pengambilan Nilai Data Training

Nilai data training yang tersimpan dalam tabel nbc_data dan nbc_responder diambil dan dimasukkan dalam variabel $data untuk diolah pada perhitungan berikutnya. Pengambilan nilai data training tersebut dapat dituliskan dalam script PHP sebagai berikut:

<?php
//-- query untuk mendapatkan semua data training di tabel nbc_responden dan nbc_data
$sql 'SELECT * FROM nbc_data a JOIN nbc_responden b USING(id_responden) ORDER BY a.id_data';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$data=array();
$responden=array();
$id_responden=0;
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
    if(
$id_responden!=$row['id_responden']){
        
$responden[$row['id_responden']]=$row['responden'];
        
$data[$row['id_responden']]=array();
        
$id_responden=$row['id_responden'];
    }
    
$data[$row['id_responden']][$row['id_atribut']]=$row['id_parameter'];
}
//-- menampilkan data training dalam bentuk tabel
?>
<table border='1'>
<caption>TABEL 1 : Data Training</caption>
<tr><th>Responden</th>
<?php 
//-- menampilkan header table
for($i=2;$i<=$jml_atribut;$i++){ 
    echo 
"<th>{$atribut[$i]}</th>";
}
?>
<th><?php echo $atribut[1];?></th></tr>
<?php
//-- menampilkan data secara literal
foreach($data as $id_responden=>$dt_atribut){
    echo 
"<tr><td>{$responden[$id_responden]}</td>";
    for(
$i=2;$i<=$jml_atribut;$i++){ 
        echo 
"<td>{$parameter[$i][$dt_atribut[$i]]}</td>";
    }
    echo 
"<td>{$parameter[1][$dt_atribut[1]]}</td></tr>";
}
?>
</table>

Dari script tersebut didapatkan nilai data training , semisal untuk data dari record pertama, yaitu $data[1][1]=2; yang maksudnya adalah Nilai data training dari responder # 1 untuk atribut #1 (Penggunaan Listrik) adalah = 2 (tinggi)

Perhitungan

Pada bagian ini dihitung probabilitas dari tiap-tiap nilai atribut dan kelas dari data training yang diberikan

Perhitungan yang dilakukan meliputi penghitungan jumlah data/frekuensi untuk setiap nilai atribut dan kelas, penghitungan nilai probabilitas tiap nilai kelas (Class Probabilities), serta penghitungan nilai probabilitas tiap nilai atribut (Conditional Probabilities)

Perhitungan Frekuensi Data

Sebelum menghitung nilai probabilitas/peluang untuk setiap nilai atribut dan kelas dari data training, maka dihitung terlebih dahulu frekuensi/jumlah data untuk maasing-masing nilai atribut dan kelasnya sebagai berikut:

<?php
//-- menyiapkan variable penampung utk freq tiap atribut berupa array $freq
$freq=array();
//-- inisialisasi data awal $freq
for($i=2;$i<=$jml_atribut;$i++){
    for(
$j=0;$j<3;$j++){
        for(
$k=0;$k<3;$k++){
            
$freq[$i][$j][$k]=0;
        }
    }
}
//-- menyiapkan variable penampung utk freq prior berupa array $prior_freq
$prior_freq=array();
//-- iterasi tiap data training
foreach($data as $i=>$v){
    
//-- hitung freq tiap atribut
    
for($j=2;$j<=$jml_atribut;$j++){
        
$freq[$j][$v[$j]][$v[1]]+=1;
    }
    
//-- hitung feq prior/kelas
    
if(!isset($prior_freq[$v[1]])) $prior_freq[$v[1]]=0;
    
$prior_freq[$v[1]]+=1;
}
ksort($prior_freq);
//-- menampilkan tabel frekuensi/jumlah data kelas
?>
<table border='1'>
<caption>TABEL 2 : Jumlah Data Kelas <?php echo $atribut[1];?></caption>
<tr><?php foreach($parameter[1] as $nilai=>$param){ echo "<th>{$param}</th>"; }?></tr>
<tr><?php foreach($prior_freq as $nilai=>$nfreq){ echo "<td>{$nfreq}</td>"; }?></tr>
</table>
<?php 
//-- menampilkan tabel frekuensi/jumlah data tiap atribut
for($i=2;$i<=$jml_atribut;$i++){
    echo 
"<table border='1'>";
    
//-- caption tabel utk masing-masing atribut
    
echo "<caption>TABEL ".($i+1)." : Jumlah Data Atribut {$atribut[$i]}</caption>";
    echo 
"<tr><th rowspan='2'>{$atribut[1]}</th><th colspan='3'>{$atribut[$i]}</th></tr><tr>"
    
//-- item nilai literal tiap atribut
    
foreach($parameter[$i] as $nilai=>$param){ 
        echo 
"<th>{$param}</th>"
    }
    echo 
"</tr>";
    
//-- iterasi utk tiap nilai kelas
    
foreach($parameter[1] as $n=>$p){
        echo 
"<tr><td>{$p}</td>";
        
//-- iterasi jumlah data/freq tiap nilai atribut
        
for($j=0;$j<=2;$j++){
        echo 
"<td>{$freq[$i][$j][$n]}</td>";
        }
        echo 
"</tr>";
    }
    echo 
"</table>";
}
?>

Perhitungan Class Probabilities

Perhitungan Class Probabilities adalah jumlah/frekuensi data untuk setiap nilai kelas dibagi dengan total jumlah/frekuensi data training

<?php
//-- menyiapkan variable penampung untuk class probabilities $prior
$prior=array();
//-- hitung nilai masing2 class probabilities
foreach($prior_freq as $p=>$v){
    
$prior[$p]=$v/array_sum($prior_freq);
}
ksort($prior);
?>
<table border='1'> 
<caption>TABEL 8 : Probabilitas Kelas <?php echo $atribut[1];?></caption> 
<tr><?php foreach($parameter[1] as $nilai=>$param){ echo "<th>{$param}</th>"; }?></tr> 
<tr><?php foreach($prior as $nilai=>$nprior){ echo "<td>{$nprior}</td>"; }?></tr> 
</table> 

Perhitungan Conditional Probabilities

Perhitungan Conditional Probabilities di sini adalah jumlah/frekuensi data untuk setiap nilai atribut terhadap nilai kelas dibagi dengan jumlah/frekuensi data nilai kelas tersebut. Pada perhitungan ini dimasukkan juga routine untuk mengecek apakah ada jumlah/frekuensi data yang 0(nol) pada nilai kelas yang diperhitungkan tersebut. Jika ditemukan nilai 0(nol) maka akan dilakukan Laplace Correction pada perhitungan probabilitas tersebut.

<?php
//-- menyiapkan variable penampung utk conditional probabilities $likehood
$likehood=array();
//-- iterasi mulai atribut ke-2 sampai terakhir
for($i=2;$i<=$jml_atribut;$i++){
    
//-- iterasi nilai atribut
    
for($j=0;$j<3;$j++){
        
//-- iterasi nilai kelas
        
for($k=0;$k<3;$k++){
            
//-- tes kondisi jika terdapat freq yang 0(nol) utk kelas=$k
            
$t_nol=($freq[$i][0][$k]==|| $freq[$i][1][$k]==|| $freq[$i][2][$k]==0);
            
//-- lakukan laplace correction jika ditemukan freq 0(nol) $t_nol=true
            
$likehood[$i][$j][$k]=($freq[$i][$j][$k]+($t_nol?1:0))/($prior_freq[$k]+($t_nol?count($prior_freq):0));
        }
    }
}
//-- menampilkan tabel probabilitas tiap atribut 
for($i=2;$i<=$jml_atribut;$i++){ 
    echo 
"<table border='1'>"
    
//-- caption tabel utk masing-masing atribut 
    
echo "<caption>TABEL ".($i+7)." : Probabilitas Atribut {$atribut[$i]}</caption>"
    echo 
"<tr><th rowspan='2'>{$atribut[1]}</th><th colspan='3'>{$atribut[$i]}</th></tr><tr>"
    
//-- item nilai literal tiap atribut 
    
foreach($parameter[$i] as $nilai=>$param){  
        echo 
"<th>{$param}</th>";  
    } 
    echo 
"</tr>"
    
//-- iterasi utk tiap nilai kelas 
    
foreach($parameter[1] as $n=>$p){ 
        echo 
"<tr><td>{$p}</td>"
        
//-- iterasi probabilitas tiap nilai atribut 
        
for($j=0;$j<=2;$j++){ 
            echo 
"<td>{$likehood[$i][$j][$n]}</td>"
        } 
        echo 
"</tr>"
    } 
    echo 
"</table>"

?>

Pengujian

Pengujian terhadap data training dibandingkan dengan hasil prediksi, dan memprediksi nilai kelas terhadap inputan sembarang

Pengujian Data Training

Pengujian data yang pertama dilakukan terhadap data training dengan membandingkan nilai kelas pada data training dengan hasil prediksi dari perhitungan probabilitas dengan metode Naïve Bayes. Hasil yang diperoleh berupa prosentase perbandingan prediksi yang benar (Correctly Classified Instance) dan prosentase prediksi yang tidak benar (Incorrectly Classified Instance)

<?php
//-- menyiapkan variabel penampung probabilitas per data training thd kelas
$prob=array();
//-- inisialisasi jumlah kumulatif prediksi benar dari data training
$right=0;
//-- iterasi utk setiap data training
foreach($data as $n=>$v){
    
$m=array();
    
//-- iterasi utk setiap nilai kelas
    
for($i=0;$i<3;$i++){
        
//-- inisialisasi probabilitas awal
        
$m[$i]=1;
        
//-- perkalian nilai probabilitas tiap atribut
        
for($j=2;$j<=$jml_atribut;$j++){
            
$m[$i]*=$likehood[$j][$v[$j]][$i];
        }
        
//-- kalikan dengan prior probabilitasnya
        
$m[$i]*=$prior[$i];
    }
    
//-- menentukan nilai prediksi kelas per data training
    
$predict[$n]=array_search(max($m),$m);
    
$prob[$n]=$m;
    
//-- hitung kumulatif prediksi yang benar
    
$right+=($predict[$n]==$v[1]?1:0);
}
//-- menampilkan prosentase data training yg diprediksi benar
echo "Correctly Classified Instance = ".($right/count($data)*100)."% <br>";
//-- menampilkan prosentase data training yg diprediksi tidak benar
echo "Incorrectly Classified Instance = ".((1-$right/count($data))*100)."% <br>";
?>

Prediksi Terhadap Inputan

Hasil perhitungan probabilitas dari data training yang diberikan bisa dijadikan patokan untuk memprediksi nilai kelas dari suatu set nilai atribut inputan. Pada contoh script berikut ini, nilai inputan disimulasikan dari hasil data random.

<?php
//-- menyiapkan variabel penampung data inputan
$input=array();
//-- membuat data input simulasi dengan fungsi random untuk masing2 atribut
for($i=2;$i<=$jml_atribut;$i++){
    
$input[$i]=rand(0,2);
}    
$m=array();
//-- iterasi utk setiap nilai kelas
for($i=0;$i<3;$i++){
    
//-- inisialisasi probabilitas awal
    
$m[$i]=1;
    
//-- perkalian nilai probabilitas tiap atribut
    
for($j=2;$j<=$jml_atribut;$j++){
        
$m[$i]*=$likehood[$j][$input[$j]][$i];
    }
    
//-- kalikan dengan prior probabilitasnya
    
$m[$i]*=$prior[$i];
}
//-- menentukan prediksi nilai kelas, berdasar probabilitas terbesar
$result=array_search(max($m),$m);

//-- menampilkan hasil prediksi nilai kelas
$s_list=array();
foreach(
$input as $i=>$n){
    
$s_list[]="<b>{$atribut[$i]}</b>=<i>{$parameter[$i][$n]}</i>";
}
echo 
"Untuk ".implode(' , ',$s_list)." masuk ke kelas <b>{$atribut[1]}</b>=<i>{$parameter[1][$result]}</i> ";
echo 
"dengan probabilitas sebesar <b>{$m[$result]}</b> ";
?>

  • Bustami., (2013), Penerapan Algoritma Naive Bayes Untuk Mengklasifikasi Data Nasabah Asuransi, TECHSI : Jurnal Penelitian Teknik Informatika, Vol. 3, No.2, Hal. 127-146.
  • Nasari, F., (2014), Analisa Faktor Penyebab Tingginya Pemakaian Listrik Rumah Tangga Menggunakan Algoritma C 4.5 (Studi Kasus di Kelurahan Tanjung Mulia), Tesis, Program Pasca Sarjana Ilmu Komputer, Universitas Putra Indonesia (YPTK), Padang
  • Patil, T. R., Sherekar, M. S., (2013), Performance Analysis of Naive Bayes and J48 Classification Algorithm for Data Classification, International Journal of Computer Science and Applications, Vol. 6, No. 2, Hal 256-261.
  • Pattekari, S. A., Parveen, A., (2012), Prediction System for Heart Disease Using Naive Bayes, International Journal of Advanced Computer and Mathematical Sciences, ISSN 2230-9624, Vol. 3, No 3, Hal 290-294.
  • Saleh, A. (2015) Implementasi Metode Klasifikasi Naïve Bayes Dalam Memprediksi Besarnya Penggunaan Listrik Rumah Tangga Citec Journal, Vol. 2, No. 3, ISSN: 2354-5771
  • Ridwan, M., Suyono, H., Sarosa, M., (2013), Penerapan Data Mining untuk Evaluasi Kinerja Akademik Mahasiswa Menggunakan Algoritma Naive Bayes Classifier, Jurnal EECCIS, Vol 1, No. 7, Hal. 59-64.
  • Santosa, B. (2007). Data Mining: Teknik Pemanfaatan Data untuk Keperluan Bisnis. Graha Ilmu. Yogyakarta.
  • Xhemali, Daniela, Hinde, C.J., and Stone, R.G. (2009) Naive Bayes vs. Decision Trees vs. Neural Networks in the Classification of Training Web Pages