Machine Learning: Gaussian Naive Bayes
Pendahuluan
Naive Bayes Classifier merupakan sebuah metode klasifikasi yang berakar pada pengklasifikasian dengan menggunakan metode probabilitas dan statistik yang dikemukakan oleh ilmuwan Inggris Thomas Bayes, yaitu memprediksi peluang di masa depan berdasarkan pengalaman di masa sebelumnya sehingga dikenal sebagai Teorema Bayes. Ciri utama dari Naive Bayes Classifier ini adalah asumsi yang sangat kuat akan independensi dari masing-masing kondisi/kejadian (Sihombing, J., 2021).
Gaussian Naive Bayes merupakan salah satu varian dari Naive Bayes. Prinsip dasarnya sama dengan Naive Bayes, namun pada Naïve Bayeskita tidak dapat menghitung probabilitas data continues. (Yunardi, Dina, 2022)
Berdasarkan definisi tersebut, dapat disimpulkan bahwa gaussian naive bayes adalah varian dari algoritma Naive Bayes yang digunakan untuk menangani data kontinu, dengan asumsi bahwa data tersebut terdistribusi secara normal (Gaussian). (Doka, M. M., Kristina, K., & Hendro, H., 2025)
Kelebihan dan Kelemahan
Kelebihan
- Sangat efektif untuk data numerik kontinu (misalnya: tinggi badan, suhu, tekanan darah)
- Komputasi cepat dan efisien, tidak memerlukan banyak memori
- Secara alami menangani missing values (tidak perlu imputasi rumit)
- Relatif tahan terhadap noise dalam data karena efek smoothing dari distribusi probabilitas
Kelemahan
Asumsi Distribusi Normal: Asumsi bahwa semua fitur numerik mengikuti distribusi Gaussian seringkali tidak realistis untuk data dunia nyata (misalnya: data usia yang multimodal atau data pendapatan yang skewed).
Sensitif terhadap Outlier: Mean dan varians sangat dipengaruhi oleh nilai ekstrim (outlier), yang dapat mendistorsi kurva probabilitas secara signifikan. Outlier pada data suhu tubuh (misalnya 45°C) akan menggeser mean dan memperbesar varians.
Zero-Frequency Problem (di Categorical): Pada Gaussian NB, masalah ini tidak ada karena probabilitas dihitung dari fungsi densitas kontinu, bukan frekuensi diskrit.
Metodologi Penelitian
Langkah-langkah Perhitungan Manual Gaussian Naive Bayes
Perhitungan manual Gaussian Naive Bayes dilakukan dengan mengikuti tahapan berikut:
- Pengumpulan dan Analisis Data: Memahami distribusi dan karakteristik dataset numerik.
- Perhitungan Probabilitas Prior: Menghitung probabilitas dasar setiap kelas.
- Perhitungan Parameter Gaussian: Menghitung Mean ($\mu$) dan Varians ($\sigma^2$) untuk setiap fitur numerik dalam setiap kelas.
- Perhitungan Likelihood: Menggunakan Probability Density Function (PDF) dari distribusi Gaussian untuk menghitung probabilitas nilai fitur tertentu.
- Prediksi Data Baru: Mengaplikasikan Teorema Bayes untuk kasus baru dan menentukan kelas dengan probabilitas tertinggi.
Studi Kasus: Data Diagnosis Penyakit
Dataset ini berisi 20 sampel pasien dengan informasi gejala numerik (suhu tubuh dan kadar oksigen) serta diagnosis penyakit. Data ini digunakan untuk analisis klasifikasi menggunakan algoritma Gaussian Naive Bayes.
Dataset
Tabel Data Pasien
| No | Usia (Tahun) | Suhu Tubuh (°C) | Kadar Oksigen (%) | Diagnosis |
|---|---|---|---|---|
| 1 | 25 (Muda) | 38.5 | 96 | Flu |
| 2 | 70 (Tua) | 39.0 | 88 | Covid |
| 3 | 22 (Muda) | 36.8 | 98 | Flu |
| 4 | 65 (Tua) | 39.2 | 85 | Covid |
| 5 | 28 (Muda) | 37.0 | 97 | Flu |
| 6 | 68 (Tua) | 38.7 | 90 | Covid |
| 7 | 30 (Muda) | 38.2 | 98 | Flu |
| 8 | 72 (Tua) | 36.9 | 92 | Covid |
| 9 | 26 (Muda) | 36.5 | 99 | Flu |
| 10 | 69 (Tua) | 36.8 | 97 | Sehat |
| 11 | 24 (Muda) | 38.0 | 98 | Flu |
| 12 | 71 (Tua) | 36.9 | 86 | Covid |
| 13 | 67 (Tua) | 37.5 | 94 | Flu |
| 14 | 29 (Muda) | 38.8 | 97 | Flu |
| 15 | 66 (Tua) | 38.4 | 95 | Flu |
| 16 | 27 (Muda) | 36.6 | 87 | Covid |
| 17 | 70 (Tua) | 36.7 | 98 | Sehat |
| 18 | 23 (Muda) | 37.2 | 93 | Sehat |
| 19 | 69 (Tua) | 39.1 | 89 | Covid |
| 20 | 31 (Muda) | 38.3 | 96 | Flu |
Catatan: Untuk menyederhanakan perhitungan manual, fitur Usia dikelompokkan secara kategorikal (Muda/Tua), namun fitur Suhu Tubuh dan Kadar Oksigen akan diproses menggunakan Gaussian Naive Bayes.
Distribusi Diagnosis
| Diagnosis | Jumlah | Persentase |
|---|---|---|
| Sehat | 3 | 15% |
| Flu | 10 | 50% |
| Covid | 7 | 35% |
| Total | 20 | 100% |
Perhitungan Manual Gaussian Naive Bayes
Langkah 1: Hitung Probabilitas Prior
Prior probability dihitung berdasarkan frekuensi setiap kelas dalam data latih.
$$ P(\text{Sehat}) = \frac{3}{20} = 0.1500 \quad (15\%) $$
$$ P(\text{Flu}) = \frac{10}{20} = 0.5000 \quad (50\%) $$
$$ P(\text{Covid}) = \frac{7}{20} = 0.3500 \quad (35\%) $$
Langkah 2: Hitung Parameter Gaussian (Mean dan Varians)
Untuk setiap fitur numerik (Suhu Tubuh dan Kadar Oksigen) dalam setiap kelas, kita hitung Mean ($\mu$) dan Varians ($\sigma^2$).
Rumus Mean dan Varians
$$ \mu = \frac{1}{n} \sum_{i=1}^{n} x_i $$
$$ \sigma^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2 $$
Catatan: Untuk sampel populasi, kita bagi dengan n. Untuk estimasi varians populasi yang tidak bias, biasanya digunakan n-1, namun dalam konteks likelihood Naive Bayes, pembagian dengan n sudah cukup.
2.1 Kelas Sehat (3 pasien)
Data Pasien Sehat:
- Suhu: 36.8, 36.7, 37.2
- Oksigen: 97, 98, 93
Perhitungan Suhu: $$ \mu_{\text{Suhu, Sehat}} = \frac{36.8 + 36.7 + 37.2}{3} = \frac{110.7}{3} = 36.9000 $$
$$ \begin{aligned} \sigma^2_{\text{Suhu, Sehat}} &= \frac{(36.8-36.9)^2 + (36.7-36.9)^2 + (37.2-36.9)^2}{3} = \frac{0.01 + 0.04 + 0.09}{3} = \frac{0.1400}{3} = 0.0467 \end{aligned} $$
Perhitungan Oksigen: $$ \mu_{\text{Oksigen, Sehat}} = \frac{97 + 98 + 93}{3} = \frac{288}{3} = 96.0000 $$
$$ \begin{aligned} \sigma^2_{\text{Oksigen, Sehat}} &= \frac{(97-96)^2 + (98-96)^2 + (93-96)^2}{3} = \frac{1 + 4 + 9}{3} = \frac{14}{3} = 4.6667 \end{aligned} $$
2.2 Kelas Flu (10 pasien)
Data Pasien Flu:
- Suhu: 38.5, 36.8, 37.0, 38.2, 36.5, 38.0, 37.5, 38.8, 38.4, 38.3
- Oksigen: 96, 98, 97, 98, 99, 98, 94, 97, 95, 96
Perhitungan Suhu: $$ \begin{aligned} \mu_{\text{Suhu, Flu}} &= \frac{38.5 + 36.8 + 37.0 + 38.2 + 36.5 + 38.0 + 37.5 + 38.8 + 38.4 + 38.3}{10} = \frac{378.0}{10} = 37.8000 \end{aligned} $$
$$ \begin{aligned} \sigma^2_{\text{Suhu, Flu}} &= \frac{(38.5-37.8)^2 + (36.8-37.8)^2 + (37.0-37.8)^2 + (38.2-37.8)^2 + (36.5-37.8)^2}{10} = \frac{0.49 + 1.00 + 0.64 + 0.16 + 1.69 + 0.04 + 0.09 + 1.00 + 0.36 + 0.25}{10} = \frac{5.72}{10} = 0.5720 \end{aligned} $$
Perhitungan Oksigen: $$ \begin{aligned} \mu_{\text{Oksigen, Flu}} &= \frac{96 + 98 + 97 + 98 + 99 + 98 + 94 + 97 + 95 + 96}{10} = \frac{968}{10} = 96.8000 \end{aligned} $$
$$ \begin{aligned} \sigma^2_{\text{Oksigen, Flu}} &= \frac{(96-96.8)^2 + (98-96.8)^2 + (97-96.8)^2 + (98-96.8)^2 + (99-96.8)^2}{10} = \frac{0.64 + 1.44 + 0.04 + 1.44 + 4.84 + 1.44 + 7.84 + 0.04 + 3.24 + 0.64}{10} = \frac{21.60}{10} = 2.1600 \end{aligned} $$
2.3 Kelas Covid (7 pasien)
Data Pasien Covid:
- Suhu: 39.0, 39.2, 38.7, 36.9, 36.9, 36.6, 39.1
- Oksigen: 88, 85, 90, 92, 86, 87, 89
Perhitungan Suhu: $$ \begin{aligned} \mu_{\text{Suhu, Covid}} &= \frac{39.0 + 39.2 + 38.7 + 36.9 + 36.9 + 36.6 + 39.1}{7} = \frac{266.4}{7} = 38.0571 \end{aligned} $$
Perhitungan detail $(x - \mu)^2$:
| No | Suhu | x - µ | (x - µ)² |
|---|---|---|---|
| 1 | 39.0 | 0.9429 | 0.8891 |
| 2 | 39.2 | 1.1429 | 1.3062 |
| 3 | 38.7 | 0.6429 | 0.4133 |
| 4 | 36.9 | -1.1571 | 1.3389 |
| 5 | 36.9 | -1.1571 | 1.3389 |
| 6 | 36.6 | -1.4571 | 2.1232 |
| 7 | 39.1 | 1.0429 | 1.0876 |
$$ \begin{aligned} \sigma^2_{\text{Suhu, Covid}} &= \frac{0.8891 + 1.3062 + 0.4133 + 1.3389 + 1.3389 + 2.1232 + 1.0876}{7} \ &= \frac{8.4972}{7} = 1.2139 \end{aligned} $$
Perhitungan Oksigen: $$ \begin{aligned} \mu_{\text{Oksigen, Covid}} &= \frac{88 + 85 + 90 + 92 + 86 + 87 + 89}{7} \ &= \frac{617}{7} = 88.1429 \end{aligned} $$
Perhitungan detail $(x - \mu)^2$:
| No | Oksigen | x - µ | (x - µ)² |
|---|---|---|---|
| 1 | 88 | -0.1429 | 0.0204 |
| 2 | 85 | -3.1429 | 9.8778 |
| 3 | 90 | 1.8571 | 3.4488 |
| 4 | 92 | 3.8571 | 14.8772 |
| 5 | 86 | -2.1429 | 4.5920 |
| 6 | 87 | -1.1429 | 1.3062 |
| 7 | 89 | 0.8571 | 0.7346 |
$$ \begin{aligned} \sigma^2_{\text{Oksigen, Covid}} &= \frac{0.0204 + 9.8778 + 3.4488 + 14.8772 + 4.5920 + 1.3062 + 0.7346}{7} \ &= \frac{34.8570}{7} = 4.9796 \end{aligned} $$
Tabel Ringkasan Parameter Gaussian
| Kelas | Fitur | Mean (µ) | Varians (σ²) |
|---|---|---|---|
| Sehat | Suhu Tubuh | 36.9000 | 0.0467 |
| Kadar Oksigen | 96.0000 | 4.6667 | |
| Flu | Suhu Tubuh | 37.8000 | 0.5720 |
| Kadar Oksigen | 96.8000 | 2.1600 | |
| Covid | Suhu Tubuh | 38.0571 | 1.2139 |
| Kadar Oksigen | 88.1429 | 4.9796 |
Langkah 3: Hitung Probabilitas Likelihood dengan PDF Gaussian
Untuk menghitung probabilitas sebuah nilai numerik x pada kelas C dengan mean $\mu$ dan varians $\sigma^2$, digunakan Probability Density Function (PDF) dari distribusi Gaussian:
Rumus PDF Gaussian
$$ P(x \mid C) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{(x - \mu)^2}{2\sigma^2}\right) $$
Prediksi untuk Pasien Baru
Kasus: Pasien dengan Gejala Baru
Misalkan datang pasien baru dengan hasil pengukuran:
- Usia: Muda (tidak digunakan dalam perhitungan Gaussian)
- Suhu Tubuh: 38.5°C
- Kadar Oksigen: 92%
Perhitungan Likelihood untuk Setiap Kelas
3.1 Likelihood untuk Kelas Sehat ($\mu = 36.9000$, $\sigma^2 = 0.0467$)
Untuk Suhu = 38.5:
$$ \begin{aligned} P(\text{Suhu}=38.5 \mid \text{Sehat}) &= \frac{1}{\sqrt{2 \pi (0.0467)}} \exp\left(-\frac{(38.5 - 36.9000)^2}{2(0.0467)}\right) \ &= \frac{1}{\sqrt{0.2934}} \exp\left(-\frac{(1.6000)^2}{0.0934}\right) = \frac{1}{0.5417} \exp\left(-\frac{2.5600}{0.0934}\right) \ &= 1.8460 \times \exp(-27.4090) \approx 2.261 \times 10^{-12} \end{aligned} $$
Untuk Oksigen = 92:
$$ \begin{aligned} P(\text{Oksigen}=92 \mid \text{Sehat}) &= \frac{1}{\sqrt{2 \pi (4.6667)}} \exp\left(-\frac{(92 - 96.0000)^2}{2(4.6667)}\right) \ &= \frac{1}{\sqrt{29.3200}} \exp\left(-\frac{(-4.0000)^2}{9.3334}\right) = \frac{1}{5.4150} \exp\left(-\frac{16.0000}{9.3334}\right) \ &= 0.1847 \times \exp(-1.7143) \approx 0.0333 \end{aligned} $$
3.2 Likelihood untuk Kelas Flu ($\mu = 37.8000$, $\sigma^2 = 0.5720$)
Untuk Suhu = 38.5:
$$ \begin{aligned} P(\text{Suhu}=38.5 \mid \text{Flu}) &= \frac{1}{\sqrt{2 \pi (0.5720)}} \exp\left(-\frac{(38.5 - 37.8000)^2}{2(0.5720)}\right) \ &= \frac{1}{\sqrt{3.5940}} \exp\left(-\frac{(0.7000)^2}{1.1440}\right) = \frac{1}{1.8960} \exp\left(-\frac{0.4900}{1.1440}\right) \ &= 0.5274 \times \exp(-0.4283) \approx 0.3437 \end{aligned} $$
Untuk Oksigen = 92:
$$ \begin{aligned} P(\text{Oksigen}=92 \mid \text{Flu}) &= \frac{1}{\sqrt{2 \pi (2.1600)}} \exp\left(-\frac{(92 - 96.8000)^2}{2(2.1600)}\right) \ &= \frac{1}{\sqrt{13.5700}} \exp\left(-\frac{(-4.8000)^2}{4.3200}\right) = \frac{1}{3.6840} \exp\left(-\frac{23.0400}{4.3200}\right) \ &= 0.2715 \times \exp(-5.3333) \approx 0.001311 \end{aligned} $$
3.3 Likelihood untuk Kelas Covid ($\mu = 38.0571$, $\sigma^2 = 1.2139$)
Untuk Suhu = 38.5:
$$ \begin{aligned} P(\text{Suhu}=38.5 \mid \text{Covid}) &= \frac{1}{\sqrt{2 \pi (1.2139)}} \exp\left(-\frac{(38.5 - 38.0571)^2}{2(1.2139)}\right) \ &= \frac{1}{\sqrt{7.6279}} \exp\left(-\frac{(0.4429)^2}{2.4278}\right) = \frac{1}{2.7619} \exp\left(-\frac{0.1962}{2.4278}\right) \ &= 0.3620 \times \exp(-0.0808) \approx 0.3340 \end{aligned} $$
Untuk Oksigen = 92:
$$ \begin{aligned} P(\text{Oksigen}=92 \mid \text{Covid}) &= \frac{1}{\sqrt{2 \pi (4.9796)}} \exp\left(-\frac{(92 - 88.1429)^2}{2(4.9796)}\right) \ &= \frac{1}{\sqrt{31.2870}} \exp\left(-\frac{(3.8571)^2}{9.9592}\right) = \frac{1}{5.5935} \exp\left(-\frac{14.8772}{9.9592}\right) \ &= 0.1788 \times \exp(-1.4939) \approx 0.0401 \end{aligned} $$
Langkah 4: Hitung Skor Posterior (Tanpa Normalisasi)
Rumus Skor
$$ \text{Skor}(C) = P(C) \times P(\text{Suhu} \mid C) \times P(\text{Oksigen} \mid C) $$
Skor untuk Kelas Sehat
$$ \text{Skor(Sehat)} = 0.1500 \times (2.261 \times 10^{-12}) \times 0.0333 \approx 1.128 \times 10^{-14} $$
Skor untuk Kelas Flu
$$ \text{Skor(Flu)} = 0.5000 \times 0.3437 \times 0.001311 = 0.5000 \times 0.0004506 = 0.0002253 $$
Skor untuk Kelas Covid
$$ \begin{aligned} \text{Skor(Covid)} &= 0.3500 \times 0.3340 \times 0.0401 \ &= 0.3500 \times 0.013393 = 0.004687 \end{aligned} $$
Langkah 5: Normalisasi dan Keputusan Akhir
Total Skor
$$ \text{Total} = 1.128 \times 10^{-14} + 0.0002253 + 0.004687 = 0.0049123 $$
Probabilitas Normalisasi
$$ P(\text{Sehat} \mid X) = \frac{1.128 \times 10^{-14}}{0.0049123} \approx 2.30 \times 10^{-12} \quad (\approx 0\%) $$
$$ P(\text{Flu} \mid X) = \frac{0.0002253}{0.0049123} = 0.0459 \quad (4.59\%) $$
$$ P(\text{Covid} \mid X) = \frac{0.004687}{0.0049123} = 0.9541 \quad (95.41\%) $$
Tabel Hasil Prediksi
| Kelas | Skor Awal | Probabilitas | Persentase |
|---|---|---|---|
| Sehat | $1{,}13 \times 10^{-14}$ | ~0.0000 | ~0.00% |
| Flu | 0.0002253 | 0.0459 | 4.59% |
| Covid | 0.004687 | 0.9541 | 95.41% |
Kesimpulan Prediksi
Keputusan: Pasien tersebut paling mungkin terdiagnosis Covid-19 dengan probabilitas 95.41%.
Interpretasi Klinis: Hasil ini sangat kuat karena:
- Suhu tubuh pasien (38.5°C) paling mendekati distribusi suhu pasien Covid ($\mu = 38.06$°C) dibandingkan Flu ($\mu = 37.80$°C) maupun Sehat ($\mu = 36.90$°C).
- Kadar oksigen pasien (92%) sangat dekat dengan mean oksigen pasien Covid (88.14%) dan sangat jauh dari mean oksigen pasien Flu (96.80%) dan Sehat (96.00%).
- Kombinasi demam ringan-sedang dengan hipoksia ringan (oksigen 92%) adalah pola khas untuk infeksi Covid-19.
Diskusi dan Analisis Kritis
Analisis Hasil
Dominasi Likelihood: Meskipun probabilitas prior Flu (50%) lebih tinggi dari Covid (35%), nilai likelihood dari fitur numerik sangat mendominasi hasil akhir. Hal ini menunjukkan bahwa dalam kasus ini, gejala objektif (suhu dan oksigen) lebih informatif daripada distribusi dasar populasi.
Pengaruh Varians: Perhatikan bahwa varians suhu pada kelas Sehat sangat kecil (0.0467). Akibatnya, nilai suhu 38.5°C yang jauh dari mean 36.9°C menghasilkan probabilitas yang sangat kecil ($10^{-12}$), secara efektif “membunuh” kemungkinan diagnosis Sehat.
Interpretasi PDF vs Probabilitas: Nilai PDF bisa lebih besar dari 1 (misalnya pada distribusi dengan varians kecil). Nilai ini bukan probabilitas riil, melainkan densitas. Yang penting adalah perbandingan relatif antar kelas.
Perbandingan dengan Categorical Naive Bayes
| Aspek | Categorical Naive Bayes | Gaussian Naive Bayes |
|---|---|---|
| Tipe Data | Kategorikal / Diskrit | Numerik Kontinu |
| Perhitungan | Frekuensi + Laplace Smoothing | Mean + Varians + PDF |
| Zero-Frequency | Perlu Laplace Smoothing | Tidak ada masalah |
| Sensitivitas | Terhadap data langka | Terhadap outlier |
| Contoh Fitur | Jenis kelamin, warna | Suhu, berat badan, waktu |
Kesimpulan
Implementasi Gaussian Naive Bayes untuk klasifikasi diagnosis penyakit berdasarkan data numerik kontinu menunjukkan bahwa algoritma ini sangat efektif untuk tipe data seperti suhu tubuh dan kadar oksigen. Analisis terhadap dataset terbatas yang terdiri dari 20 sampel pasien berhasil mengidentifikasi Covid-19 sebagai diagnosis paling probable (95.41%) untuk kasus uji dengan gejala suhu 38.5°C dan oksigen 92%.
Keunggulan utama Gaussian Naive Bayes terletak pada kemampuannya menangani fitur numerik secara alami tanpa perlu proses diskretisasi yang dapat menghilangkan informasi. Namun, kelemahan utamanya adalah asumsi kuat bahwa setiap fitur mengikuti distribusi Gaussian, serta sensitivitas terhadap outlier yang dapat menggeser parameter mean dan varians secara signifikan.
Penerapan Probability Density Function (PDF) terbukti kritis dalam menghitung likelihood, terutama ketika varians suatu fitur sangat kecil (seperti suhu pada kelas Sehat). Hasil klasifikasi menunjukkan bahwa kombinasi demam (suhu 38.5°C) dan hipoksia ringan (oksigen 92%) merupakan indikator kuat untuk Covid-19, bahkan ketika probabilitas prior Flu lebih tinggi.
Referensi
Sihombing, J. (2021). Klasifikasi data antroprometri individu menggunakan algoritma Naïve Bayes Classifier. BIOS Jurnal Teknologi Informasi Dan Rekayasa Komputer, 2(1), 1–10.
Doka, M. M., Kristina, K., & Hendro, H. (2025, October 13). APLIKASI DETEKSI STATUS STUNTING PADA BALITA MENGGUNAKAN GAUSSIAN NAIVE BAYES BERBASIS WEBSITE.
Dina dan Yunardi. (2022). Data Mining dan Machine Learning dengan Orange3 Tutorial dan Aplikasinya. Airlangga University Press.