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
- Menghitung jumlah kelas / label
- Menghitung Jumlah Kasus Per Kelas
- Kalikan Semua Variable Kelas
- 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