Algoritma Naive Bayes dengan R

Algoritma Naive Bayes

Naive Bayes adalah metode yang cocok untuk klasifikasi biner dan multiclass. Metode yang juga dikenal sebagai Naive Bayes Classifier ini menerapkan teknik supervised klasifikasi objek di masa depan dengan menetapkan label kelas ke instance/catatan menggunakan probabilitas bersyarat. Probabilitas bersyarat adalah ukuran peluang suatu peristiwa yang terjadi berdasarkan peristiwa lain yang telah (dengan asumsi, praduga, pernyataan, atau terbukti) terjadi.

Tahapan Algoritma Naive Bayes

  1. Menghitung jumlah kelas / label
  2. Menghitung Jumlah Kasus Per Kelas
  3. Kalikan Semua Variable Kelas
  4. Bandingkan Hasil Per Kelas

Kelebihan

1. Mudah untuk dibuat

2. Hasil yang diperoleh bagus

3. Algoritma  ini  bekerja  sangat  cepat  dan  dapat  dengan mudah memprediksi kelasdari kumpulan data pengujian.

4. Pengklasifikasi  algoritma  naive  bayes  berkinerja  lebih  baik daripada model lain dengan lebih sedikit training data jika asumsi independensi fitur berlaku

5. Algoritma  ini  bekerja sangat baik dengan variabel input kategoris, di bandingkan dengan variabel numerik.

6. Hanya memerlukan jumlah data sedikit yang dibutuhkan untuk klasifikasi.

7. Cepat, efisien, dan mudah untuk dibuat.

8. Kokoh pada atribut yang tidak relevan.

9. Bisa dipakai untuk data kuantitatif maupun kualitatif

10.Tidak perlu melakukan data training yang banyak

11.Jika ada nilai yang hilang, maka bisa diabaikan dalam perhitungan.

12.Perhitungannya cepat dan efisien

13.Mudah dipahami

14.Mudah dibuat

15.Pengklasifikasian dokumen bisa dipersonalisasi, disesuaikan dengan kebutuhan setiap orang

16. Jika digunakan dalam bahasa pemrograman, codenya sederhana

17. Bisa digunakan untuk klasifikasi masalah biner ataupun multiclas

Kekurangan

1. Asumsi independence antar atribut membuat akurasi berkurang (karena biasanya ada keterkaitan)

2. Apabila probabilitas kondisionalnya bernilai nol, maka probabilitas prediksi juga akan bernilai nol

3. Keakuratannya tidak bisa diukur menggunakan satu probabilitas saja. Butuh bukti-bukti lain untuk membuktikannya.

4. Untuk membuat keputusan, diperlukan pengetahuan awal atau pengetahuan mengenai  masa  sebelumnya. Keberhasilannya  sangat  bergantung  pada pengetahuan awal tersebut

Eksperimen Algoritma Naive Bayes

library

library (knitr)
library (ggplot2)
library (tidyr)
library (caret)
library (e1071)
library (ROCR)

# Import Data 
steel <- read.csv(hargasaham_2012_2016)
str (steel)

Data

library(readr)
## Warning: package 'readr' was built under R version 4.1.3
hargasaham_2012_2016 <- read_csv("~/dataset/hargasaham-2012-2016.csv")
## Rows: 29 Columns: 7
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): Ticker, Date/Time
## dbl (5): Open, High, Low, Close, Vol
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
hargasaham_2012_2016
## # A tibble: 29 x 7
##    Ticker `Date/Time`   Open   High    Low  Close      Vol
##    <chr>  <chr>        <dbl>  <dbl>  <dbl>  <dbl>    <dbl>
##  1 AALI   1/2/2012    20680. 20775. 20489. 20728.   69780.
##  2 AALI   1/3/2012    20489. 20871. 20489. 20775.  282267 
##  3 AALI   1/4/2012    20871. 21061. 20632. 20918.  833684.
##  4 AALI   1/5/2012    20966. 21014. 20585. 20585.  831061.
##  5 AALI   1/6/2012    20680. 20871. 20489. 20728.  164219.
##  6 AALI   1/9/2012    20394. 20680. 20299. 20680.  793286.
##  7 AALI   1/10/2012   20489. 20680. 20394. 20632.  692026.
##  8 AALI   1/11/2012   20680. 20918. 20680. 20728.  740820.
##  9 AALI   1/12/2012   20918. 21252. 20918. 21204. 1802731.
## 10 AALI   1/13/2012   20966. 21490. 20966. 21252. 1266529.
## # ... with 19 more rows

Membuat Data Training dan Data Tasting

set.seed
## function (seed, kind = NULL, normal.kind = NULL, sample.kind = NULL) 
## {
##     kinds <- c("Wichmann-Hill", "Marsaglia-Multicarry", "Super-Duper", 
##         "Mersenne-Twister", "Knuth-TAOCP", "user-supplied", "Knuth-TAOCP-2002", 
##         "L'Ecuyer-CMRG", "default")
##     n.kinds <- c("Buggy Kinderman-Ramage", "Ahrens-Dieter", "Box-Muller", 
##         "user-supplied", "Inversion", "Kinderman-Ramage", "default")
##     s.kinds <- c("Rounding", "Rejection", "default")
##     if (length(kind)) {
##         if (!is.character(kind) || length(kind) > 1L) 
##             stop("'kind' must be a character string of length 1 (RNG to be used).")
##         if (is.na(i.knd <- pmatch(kind, kinds) - 1L)) 
##             stop(gettextf("'%s' is not a valid abbreviation of an RNG", 
##                 kind), domain = NA)
##         if (i.knd == length(kinds) - 1L) 
##             i.knd <- -1L
##     }
##     else i.knd <- NULL
##     if (!is.null(normal.kind)) {
##         if (!is.character(normal.kind) || length(normal.kind) != 
##             1L) 
##             stop("'normal.kind' must be a character string of length 1")
##         normal.kind <- pmatch(normal.kind, n.kinds) - 1L
##         if (is.na(normal.kind)) 
##             stop(gettextf("'%s' is not a valid choice", normal.kind), 
##                 domain = NA)
##         if (normal.kind == 0L) 
##             stop("buggy version of Kinderman-Ramage generator is not allowed", 
##                 domain = NA)
##         if (normal.kind == length(n.kinds) - 1L) 
##             normal.kind <- -1L
##     }
##     if (!is.null(sample.kind)) {
##         if (!is.character(sample.kind) || length(sample.kind) != 
##             1L) 
##             stop("'sample.kind' must be a character string of length 1")
##         sample.kind <- pmatch(sample.kind, s.kinds) - 1L
##         if (is.na(sample.kind)) 
##             stop(gettextf("'%s' is not a valid choice", sample.kind), 
##                 domain = NA)
##         if (sample.kind == 0L) 
##             warning("non-uniform 'Rounding' sampler used", domain = NA)
##         if (sample.kind == length(s.kinds) - 1L) 
##             sample.kind <- -1L
##     }
##     .Internal(set.seed(seed, i.knd, normal.kind, sample.kind))
## }
## <bytecode: 0x000000002115cf28>
## <environment: namespace:base>
intrain<-sample(nrow(hargasaham_2012_2016),nrow(hargasaham_2012_2016))
hargasaham_2012_2016_train<-hargasaham_2012_2016[intrain,]
hargasaham_2012_2016_test<-hargasaham_2012_2016[-intrain,]
#Mengimput Dataset dan Packages yang di Butuhkan
library(e1071)
## Warning: package 'e1071' was built under R version 4.1.3
library(caret)
## Warning: package 'caret' was built under R version 4.1.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## Loading required package: lattice

Pemodelan

View(hargasaham_2012_2016_train)
modelNB <- naiveBayes(hargasaham_2012_2016 ~ ., data = train(hargasaham_2012_2016) 
# Melakukan Prediksi
prediksi <- predict(modelNB, hargasaham_2012_2016_test)

hasil=confusionMatrix(table(prediksi,hargasaham_2012_2016_test) 

Refrensi

1. https://rpubs.com/awanindra01/NaiveBayes_new

2. https://rpubs.com/presda/988784

3. https://github.com/Agneskartika/Algoritma-Naive-Bayes

4. https://drive.google.com/file/d/17erhFSQ8ThgnBP5Oo5RhE1PyOYSUa7Iw/view?usp=sharing

5. https://algorit.ma/blog/naive-bayes-2022/

6. https://medium.com/@hasna.firda14/implementasi-algoritma-naive-bayes-classifier-with-r-984808f3d996

7. https://www.studocu.com/id/document/universitas-lambung-mangkurat/ilmu-komputer/klasifikasi-naive-bayes-konsep-tipe-kelebihan-kekurangan-aplikasi-dan-tahapan-persamaan/37420170