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 16 sampel, ada 0 sampel dengan Perlengkapan=sedikit, 3 sampel dengan Perlengkapan=sedang, dan 13 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.187 (dari 3/16), dan
P(Perlengkapan=banyak|Penggunaan Listrik=sedang)=0.812 (dari 13/16).

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

P(Perlengkapan=sedikit|Penggunaan Listrik=sedang)=0.052 (dari 1/19),
P(Perlengkapan=sedang|Penggunaan Listrik=sedang)=0.210 (dari 4/19), dan
P(Perlengkapan=banyak|Penggunaan Listrik=sedang)=0.736 (dari 14/19)

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 46 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
1banyakbesarbesartinggitinggitinggi
2banyakstandarsedangrendahtinggisedang
3sedikitstandarbesarsedangsedangtinggi
4banyakbesarbesartinggitinggisedang
5banyakstandarsedangsedangtinggisedang
6sedangbesarsedangtinggitinggitinggi
7banyakbesarsedangtinggitinggitinggi
8banyakstandarbesartinggitinggitinggi
9sedikitbesarbesartinggitinggisedang
10sedikitkecilbesartinggitinggisedang
11banyakbesarsedangsedangsedangsedang
12banyakbesarbesartinggitinggisedang
13banyakbesarkeciltinggirendahtinggi
14banyakbesarsedangtinggitinggirendah
15sedangbesarsedangtinggisedangsedang
16sedikitbesarsedangtinggisedangrendah
17banyakstandarsedangtinggitinggitinggi
18banyakstandarsedangsedangtinggitinggi
19banyakkecilsedangtinggitinggisedang
20banyakstandarbesartinggitinggitinggi
21banyakstandarkecilsedangtinggitinggi
22sedangstandarbesartinggisedangsedang
23banyakbesarsedangtinggisedangrendah
24banyakstandarbesartinggisedangrendah
25banyakbesarbesartinggitinggisedang
26banyakbesarbesarsedangtinggitinggi
27banyakstandarbesarrendahtinggisedang
28sedangbesarsedangtinggitinggitinggi
29banyakstandarbesarsedangtinggitinggi
30banyakbesarbesarsedangtinggisedang
31banyakbesarbesarsedangsedangtinggi
32sedangbesarbesartinggitinggitinggi
33sedikitbesarbesartinggisedangtinggi
34banyakbesarbesarsedangtinggitinggi
35sedangbesarbesarsedangtinggirendah
36sedangstandarbesartinggitinggisedang
37sedikitstandarbesarrendahtinggitinggi
38sedikitkecilbesarsedangtinggitinggi
39banyakkecilbesartinggitinggitinggi
40banyakbesarbesartinggisedangtinggi
41banyakbesarsedangtinggitinggisedang
42sedangstandarsedangrendahtinggitinggi
43banyakstandarbesartinggitinggitinggi
44banyakstandarbesartinggitinggisedang
45sedangbesarbesarsedangtinggitinggi
46banyakbesarbesartinggitinggitinggi

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 + 16 + 25) = 5 / 46
P(penggunaan=rendah) = 0.108

P(penggunaan=sedang) = jumlahpenggunaan=sedang / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=sedang) = 16 / (5 + 16 + 25) = 16 / 46
P(penggunaan=sedang) = 0.347

P(penggunaan=tinggi) = jumlahpenggunaan=tinggi / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=tinggi) = 25 / (5 + 16 + 25) = 25 / 46
P(penggunaan=tinggi) = 0.543

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.108, penggunaan=sedang adalah 0.347, penggunaan=tinggi adalah 0.543,

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) = 1 / 5
P(tanggungan=sedang|penggunaan=rendah) = 0.200


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


P(tanggungan=sedikit|penggunaan=sedang) = jumlahtanggungan=sedikit dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=sedikit|penggunaan=sedang) = 2 / 16
P(tanggungan=sedikit|penggunaan=sedang) = 0.125


P(tanggungan=sedang|penggunaan=sedang) = jumlahtanggungan=sedang dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=sedang|penggunaan=sedang) = 3 / 16
P(tanggungan=sedang|penggunaan=sedang) = 0.187


P(tanggungan=banyak|penggunaan=sedang) = jumlahtanggungan=banyak dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=banyak|penggunaan=sedang) = 11 / 16
P(tanggungan=banyak|penggunaan=sedang) = 0.687


P(tanggungan=sedikit|penggunaan=tinggi) = jumlahtanggungan=sedikit dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=sedikit|penggunaan=tinggi) = 4 / 25
P(tanggungan=sedikit|penggunaan=tinggi) = 0.160


P(tanggungan=sedang|penggunaan=tinggi) = jumlahtanggungan=sedang dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=sedang|penggunaan=tinggi) = 5 / 25
P(tanggungan=sedang|penggunaan=tinggi) = 0.200


P(tanggungan=banyak|penggunaan=tinggi) = jumlahtanggungan=banyak dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=banyak|penggunaan=tinggi) = 16 / 25
P(tanggungan=banyak|penggunaan=tinggi) = 0.640


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 46 data terdapat : 5 data rumah tangga dengan penggunaan listrik rendah , 16 data rumah tangga dengan penggunaan listrik sedang , 25 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
516250.1080.3470.543

Probabilitas Kriteria Jumlah Tanggungan

Pada kriteria jumlah tanggungan dapat diketahui dari 46 data terdapat : 1 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik rendah , 2 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik sedang , 4 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik tinggi , 1 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik rendah , 3 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik sedang , 5 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik tinggi , 3 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik rendah , 11 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik sedang , 16 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
sedikit1241/5=0.2002/16=0.1254/25=0.160
sedang1351/5=0.2003/16=0.1875/25=0.200
banyak311163/5=0.60011/16=0.68716/25=0.640

Probabilitas Kriteria Luas Tanah

Pada kriteria luas tanah dapat diketahui dari 46 data terdapat : tidak ada data rumah tangga dengan luas tanah kecil dan penggunaan listrik rendah , 2 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 , 6 data rumah tangga dengan luas tanah standar dan penggunaan listrik sedang , 10 data rumah tangga dengan luas tanah standar dan penggunaan listrik tinggi , 4 data rumah tangga dengan luas tanah besar dan penggunaan listrik rendah , 8 data rumah tangga dengan luas tanah besar dan penggunaan listrik sedang , 13 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
kecil0221/8=0.1252/16=0.1252/25=0.080
standar16102/8=0.2506/16=0.37510/25=0.400
besar48135/8=0.6258/16=0.50013/25=0.520

Probabilitas Kriteria Pendapatan

Pada kriteria pendapatan dapat diketahui dari 46 data terdapat : tidak ada data rumah tangga dengan pendapatan kecil dan penggunaan listrik rendah , tidak ada data rumah tangga dengan pendapatan kecil dan penggunaan listrik sedang , 2 data rumah tangga dengan pendapatan kecil dan penggunaan listrik tinggi , 3 data rumah tangga dengan pendapatan sedang dan penggunaan listrik rendah , 6 data rumah tangga dengan pendapatan sedang dan penggunaan listrik sedang , 6 data rumah tangga dengan pendapatan sedang dan penggunaan listrik tinggi , 2 data rumah tangga dengan pendapatan besar dan penggunaan listrik rendah , 10 data rumah tangga dengan pendapatan besar dan penggunaan listrik sedang , 17 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
kecil0021/8=0.1251/19=0.0522/25=0.080
sedang3664/8=0.5007/19=0.3686/25=0.240
besar210173/8=0.37511/19=0.57817/25=0.680

Probabilitas Kriteria Daya Listrik

Pada kriteria daya listrik dapat diketahui dari 46 data terdapat : tidak ada data rumah tangga dengan daya listrik rendah dan penggunaan listrik rendah , 2 data rumah tangga dengan daya listrik rendah dan penggunaan listrik sedang , 2 data rumah tangga dengan daya listrik rendah dan penggunaan listrik tinggi , 1 data rumah tangga dengan daya listrik sedang dan penggunaan listrik rendah , 3 data rumah tangga dengan daya listrik sedang dan penggunaan listrik sedang , 9 data rumah tangga dengan daya listrik sedang dan penggunaan listrik tinggi , 4 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik rendah , 11 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik sedang , 14 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
rendah0221/8=0.1252/16=0.1252/25=0.080
sedang1392/8=0.2503/16=0.1879/25=0.360
tinggi411145/8=0.62511/16=0.68714/25=0.560

Probabilitas Kriteria Perlengkapan

Pada kriteria perlengkapan dapat diketahui dari 46 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 , 1 data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik tinggi , 3 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik rendah , 3 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik sedang , 4 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik tinggi , 2 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik rendah , 13 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik sedang , 20 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
sedikit0011/8=0.1251/19=0.0521/25=0.040
sedang3344/8=0.5004/19=0.2104/25=0.160
banyak213203/8=0.37514/19=0.73620/25=0.800

Pengujian Metode Naive Bayes

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

Pada data ke-31; untuk Jumlah Tanggungan=banyak , Luas Tanah=besar , Pendapatan=besar , Daya Listrik=sedang , Perlengkapan=sedang 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=besar|penggunaan=rendah)*P(pendapatan=besar|penggunaan=rendah)*P(daya listrik=sedang|penggunaan=rendah)*P(perlengkapan=sedang|penggunaan=rendah)) * P(penggunaan=rendah)
P(penggunaan=rendah|X)=(0.600 * 0.625 * 0.375 * 0.250 * 0.500) * 0.108
P(penggunaan=rendah|X)=0.0019106657608696

P(penggunaan=sedang|X)=(P(jumlah tanggungan=banyak|penggunaan=sedang)*P(luas tanah=besar|penggunaan=sedang)*P(pendapatan=besar|penggunaan=sedang)*P(daya listrik=sedang|penggunaan=sedang)*P(perlengkapan=sedang|penggunaan=sedang)) * P(penggunaan=sedang)
P(penggunaan=sedang|X)=(0.687 * 0.500 * 0.578 * 0.187 * 0.210) * 0.347
P(penggunaan=sedang|X)=0.0027324461038179

P(penggunaan=tinggi|X)=(P(jumlah tanggungan=banyak|penggunaan=tinggi)*P(luas tanah=besar|penggunaan=tinggi)*P(pendapatan=besar|penggunaan=tinggi)*P(daya listrik=sedang|penggunaan=tinggi)*P(perlengkapan=sedang|penggunaan=tinggi)) * P(penggunaan=tinggi)
P(penggunaan=tinggi|X)=(0.640 * 0.520 * 0.680 * 0.360 * 0.160) * 0.543
P(penggunaan=tinggi|X)=0.0070842991304348

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

TABEL 8 : Hasil Pengujian
NoClassInput KategorikalProbabilitasPrediction
X1X2X3X4X5rendahsedangtinggi
1tinggibanyakbesarbesartinggibanyak0.00358249830163040.0350663916656630.055100104347826tinggi
2sedangbanyakstandarsedangrendahbanyak0.000382133152173910.00304295134288810.0021370434782609sedang
3tinggisedikitstandarbesarsedangsedang0.000254755434782610.000372606286884260.0013623652173913tinggi
4sedangbanyakbesarbesartinggibanyak0.00358249830163040.0350663916656630.055100104347826tinggi
5sedangbanyakstandarsedangsedangbanyak0.000764266304347830.00456442701433220.0096166956521739tinggi
6tinggisedangbesarsedangtinggibanyak0.00159222146739130.00608590268577620.0060772173913043sedang
7tinggibanyakbesarsedangtinggibanyak0.00477666440217390.0223149765145130.019447095652174sedang
8tinggibanyakstandarbesartinggibanyak0.00143299932065220.0262997937492470.042384695652174tinggi
9sedangsedikitbesarbesartinggibanyak0.00119416610054350.00637570757557510.013775026086957tinggi
10sedangsedikitkecilbesartinggibanyak0.00023883322010870.00159392689389380.0021192347826087tinggi
11sedangbanyakbesarsedangsedangsedang0.00254755434782610.00173882933879320.0025003408695652rendah
12sedangbanyakbesarbesartinggibanyak0.00358249830163040.0350663916656630.055100104347826tinggi
13tinggibanyakbesarkeciltinggisedikit0.000398055366847830.000227703841984820.00032411826086957rendah
14rendahbanyakbesarsedangtinggibanyak0.00477666440217390.0223149765145130.019447095652174sedang
15sedangsedangbesarsedangtinggisedang0.00212296195652170.00173882933879320.0012154434782609rendah
16rendahsedikitbesarsedangtinggisedang0.00212296195652170.00115921955919550.0009723547826087rendah
17tinggibanyakstandarsedangtinggibanyak0.00191066576086960.0167362323858850.014959304347826sedang
18tinggibanyakstandarsedangsedangbanyak0.000764266304347830.00456442701433220.0096166956521739tinggi
19sedangbanyakkecilsedangtinggibanyak0.000955332880434780.00557874412862820.0029918608695652sedang
20tinggibanyakstandarbesartinggibanyak0.00143299932065220.0262997937492470.042384695652174tinggi
21tinggibanyakstandarkecilsedangbanyak0.000191066576086960.000652061002047450.0032055652173913tinggi
22sedangsedangstandarbesartinggisedang0.000636888586956520.00204933457786340.0026490434782609tinggi
23rendahbanyakbesarsedangtinggisedang0.00636888586956520.00637570757557510.0038894191304348sedang
24rendahbanyakstandarbesartinggisedang0.00191066576086960.00751422678549920.0084769391304348tinggi
25sedangbanyakbesarbesartinggibanyak0.00358249830163040.0350663916656630.055100104347826tinggi
26tinggibanyakbesarbesarsedangbanyak0.00143299932065220.00956356136336260.035421495652174tinggi
27sedangbanyakstandarbesarrendahbanyak0.000286599864130430.00478178068168130.0060549565217391tinggi
28tinggisedangbesarsedangtinggibanyak0.00159222146739130.00608590268577620.0060772173913043sedang
29tinggibanyakstandarbesarsedangbanyak0.000573199728260870.0071726710225220.027247304347826tinggi
30sedangbanyakbesarbesarsedangbanyak0.00143299932065220.00956356136336260.035421495652174tinggi
31tinggibanyakbesarbesarsedangsedang0.00191066576086960.00273244610381790.0070842991304348tinggi
32tinggisedangbesarbesartinggibanyak0.00119416610054350.00956356136336260.017218782608696tinggi
33tinggisedikitbesarbesartinggisedang0.00159222146739130.00182163073587860.0027550052173913tinggi
34tinggibanyakbesarbesarsedangbanyak0.00143299932065220.00956356136336260.035421495652174tinggi
35rendahsedangbesarbesarsedangbanyak0.000477666440217390.00260824400818980.011069217391304tinggi
36sedangsedangstandarbesartinggibanyak0.000477666440217390.0071726710225220.013245217391304tinggi
37tinggisedikitstandarbesarrendahbanyak9.5533288043478E-50.00086941466939660.0015137391304348tinggi
38tinggisedikitkecilbesarsedangbanyak9.5533288043478E-50.00043470733469830.0013623652173913tinggi
39tinggibanyakkecilbesartinggibanyak0.000716499660326090.00876659791641580.0084769391304348sedang
40tinggibanyakbesarbesartinggisedang0.00477666440217390.0100189690473320.011020020869565tinggi
41sedangbanyakbesarsedangtinggibanyak0.00477666440217390.0223149765145130.019447095652174sedang
42tinggisedangstandarsedangrendahbanyak0.00012737771739130.000829895820787670.00066782608695652sedang
43tinggibanyakstandarbesartinggibanyak0.00143299932065220.0262997937492470.042384695652174tinggi
44sedangbanyakstandarbesartinggibanyak0.00143299932065220.0262997937492470.042384695652174tinggi
45tinggisedangbesarbesarsedangbanyak0.000477666440217390.00260824400818980.011069217391304tinggi
46tinggibanyakbesarbesartinggibanyak0.00358249830163040.0350663916656630.055100104347826tinggi

Berdasarkan TABEL 8 di atas dapat dilihat persentase untuk Correctly Classified Instance adalah sebesar 47.826 % sementara persentase untuk Incorrectly Classified Instance adalah sebesar 52.173 %. Di mana dari 46 data penggunaan listrik rumah tangga, ada sebanyak 22 data penggunaan listrik rumah tangga berhasil diklasifikasikan dengan benar dan sebanyak 24 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'),
(46,'Responden 46');

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,2),(1,6,2),
(2,1,1),(2,2,2),(2,3,1),(2,4,1),(2,5,0),(2,6,2),
(3,1,2),(3,2,0),(3,3,1),(3,4,2),(3,5,1),(3,6,1),
(4,1,1),(4,2,2),(4,3,2),(4,4,2),(4,5,2),(4,6,2),
(5,1,1),(5,2,2),(5,3,1),(5,4,1),(5,5,1),(5,6,2),
(6,1,2),(6,2,1),(6,3,2),(6,4,1),(6,5,2),(6,6,2),
(7,1,2),(7,2,2),(7,3,2),(7,4,1),(7,5,2),(7,6,2),
(8,1,2),(8,2,2),(8,3,1),(8,4,2),(8,5,2),(8,6,2),
(9,1,1),(9,2,0),(9,3,2),(9,4,2),(9,5,2),(9,6,2),
(10,1,1),(10,2,0),(10,3,0),(10,4,2),(10,5,2),(10,6,2),
(11,1,1),(11,2,2),(11,3,2),(11,4,1),(11,5,1),(11,6,1),
(12,1,1),(12,2,2),(12,3,2),(12,4,2),(12,5,2),(12,6,2),
(13,1,2),(13,2,2),(13,3,2),(13,4,0),(13,5,2),(13,6,0),
(14,1,0),(14,2,2),(14,3,2),(14,4,1),(14,5,2),(14,6,2),
(15,1,1),(15,2,1),(15,3,2),(15,4,1),(15,5,2),(15,6,1),
(16,1,0),(16,2,0),(16,3,2),(16,4,1),(16,5,2),(16,6,1),
(17,1,2),(17,2,2),(17,3,1),(17,4,1),(17,5,2),(17,6,2),
(18,1,2),(18,2,2),(18,3,1),(18,4,1),(18,5,1),(18,6,2),
(19,1,1),(19,2,2),(19,3,0),(19,4,1),(19,5,2),(19,6,2),
(20,1,2),(20,2,2),(20,3,1),(20,4,2),(20,5,2),(20,6,2),
(21,1,2),(21,2,2),(21,3,1),(21,4,0),(21,5,1),(21,6,2),
(22,1,1),(22,2,1),(22,3,1),(22,4,2),(22,5,2),(22,6,1),
(23,1,0),(23,2,2),(23,3,2),(23,4,1),(23,5,2),(23,6,1),
(24,1,0),(24,2,2),(24,3,1),(24,4,2),(24,5,2),(24,6,1),
(25,1,1),(25,2,2),(25,3,2),(25,4,2),(25,5,2),(25,6,2),
(26,1,2),(26,2,2),(26,3,2),(26,4,2),(26,5,1),(26,6,2),
(27,1,1),(27,2,2),(27,3,1),(27,4,2),(27,5,0),(27,6,2),
(28,1,2),(28,2,1),(28,3,2),(28,4,1),(28,5,2),(28,6,2),
(29,1,2),(29,2,2),(29,3,1),(29,4,2),(29,5,1),(29,6,2),
(30,1,1),(30,2,2),(30,3,2),(30,4,2),(30,5,1),(30,6,2),
(31,1,2),(31,2,2),(31,3,2),(31,4,2),(31,5,1),(31,6,1),
(32,1,2),(32,2,1),(32,3,2),(32,4,2),(32,5,2),(32,6,2),
(33,1,2),(33,2,0),(33,3,2),(33,4,2),(33,5,2),(33,6,1),
(34,1,2),(34,2,2),(34,3,2),(34,4,2),(34,5,1),(34,6,2),
(35,1,0),(35,2,1),(35,3,2),(35,4,2),(35,5,1),(35,6,2),
(36,1,1),(36,2,1),(36,3,1),(36,4,2),(36,5,2),(36,6,2),
(37,1,2),(37,2,0),(37,3,1),(37,4,2),(37,5,0),(37,6,2),
(38,1,2),(38,2,0),(38,3,0),(38,4,2),(38,5,1),(38,6,2),
(39,1,2),(39,2,2),(39,3,0),(39,4,2),(39,5,2),(39,6,2),
(40,1,2),(40,2,2),(40,3,2),(40,4,2),(40,5,2),(40,6,1),
(41,1,1),(41,2,2),(41,3,2),(41,4,1),(41,5,2),(41,6,2),
(42,1,2),(42,2,1),(42,3,1),(42,4,1),(42,5,0),(42,6,2),
(43,1,2),(43,2,2),(43,3,1),(43,4,2),(43,5,2),(43,6,2),
(44,1,1),(44,2,2),(44,3,1),(44,4,2),(44,5,2),(44,6,2),
(45,1,2),(45,2,1),(45,3,2),(45,4,2),(45,5,1),(45,6,2),
(46,1,2),(46,2,2),(46,3,2),(46,4,2),(46,5,2),(46,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