Langsung ke konten utama

Natural Language Processing (NLP) Penerapan Stopwords Bahasa Indonesia dengan R: Topik Sepinya Jalur Pantura Akibat Adanya Tol Trans Jawa

Natural Language Processing : Stopwords Bahasa Indonesia dengan R Halo teman-teman, berjumpa lagi dengan blog sederhana ini. Pada pembahasan sebelumnya, kita telah bersama belajar penerapan stemming teks yang merupakan bagian dari Natural Language Processing (NLP) menggunakan R. Pada perjumpaan kali ini, kita akan melanjutkan perjuangan kita berbagi ilmu mengenai NLP, tepatnya adalah penerapan stopwords Bahasa Indonesia dengan R. Perlu diketahui bahwa di dalam NLP, untuk menambah keluasan dan mempertajam analisis teks, proses stemming teks saja belum cukup. Kita juga perlu membersihkan teks yang relatif atau mutlak tidak bermakna di dalam analisis teks. Biasanya teks yang dieliminasi dalam NLP merupakan kata penghubunga atau konjungsi, atau kata yang berupa ekspresi yang bercampur di dalam data teks, misalkan ekspresi tertawa "wkwk", ekspresi penolakan "gak, nggak, tidak, atau gk", bahasa asing (selain Indonesia), atau juga kata-kata yang tidak memenuhi kaidah ta

Machine Learning: Naive Bayes Classifier dengan R

Machine Learning, Supervised Learning, Naive Bayes Classification Model

Halo teman-teman, apa kabarnya? Sebelumnya saya mohon maaf ya karena beberapa waktu ini kita break sejenak belajar dan berbaginya. Di awal Bulan Mei ini, kita akan mencoba sedikit demi sedikit membahas dan belajar bersama mengenai Machine Learning (ML) yang akhir-akhir ini booming di kalangan analis data (data analyst) atau yang cakupannya lebih luas dan mendalam, yaitu sains data (data science).

Jadi, di dalam machine learning, intinya itu  kita mencoba membangun sebuah algoritma olah data dengan cara berinteraksi dengan mesin. Kita beri mesin tersebut sekumpulan data agar ia dapat memahami logika atau pola dari data yang kita berikan, kemudian kita lakukan pengujian hasil dari pembelajaran mesin tersebut terhadap secuplik data sebagai dasar pengambilan keputusan. Karena kita perlu menyiapkan sekumpulan data sebagai media pembelajaran mesinnya dan untuk pengujian, maka dalam bahasa kerennya muncul istilah train dataset dan test dataset. Train dataset digunakan sebagai media pembelajaran untuk mesin, sedangkan test dataset-nya untuk melakukan pengujian hasil pembelajaran mesin tersebut. Adapun pembagian porsi train dataset dan test dataset sendiri masih debatable, namun kita mencoba mengambil amannya saja di kisaran 70 persen sampai 80 persen untuk train dataset, sedangkan sisanya sebagai test dataset.

Baik, itu sekilas tentang Machine Learning. Kita lanjut ke intinya sekarang, yaitu membahas salah satu model Machine Learning yang termasuk ke dalam Supervised Learning, yaitu Naive Bayes Classifier (NBC). Algoritma dari NBC ini pada dasarnya menggunakan prinsip peluang bersyarat Naive Bayes. Adapun asumsi yang berlaku dalam NBC ini adalah independensi, bahwa ada atau tidaknya satu elemen atau event tidak memberikan pengaruh terhadap probabilitas (peluang) elemen atau event lainnya. Secara umum, kaidah Bayes digambarkan sebagai berikut:

"Peluang kejadian A saat kejadian B telah terjadi sama dengan peluang kejadian B saat kejadian A telah terjadi dan peluang kejadian A dibagi dengan peluang kejadian B"

Peluang kejadian B saat kejadian A telah terjadi diistilahkan sebagai Likelihood, mengikuti sebaran normal. Bila normal Gaussian maka disebut Gaussian Naive Bayes, bila mengikuti distribusi Bernoulli maka disebut Bernoulli Naive Bayes. Sedangkan peluang kejadian A kemudian diistilahkan sebagai prior probability, kemudian peluang kejadian B disebut sebagai Evidence/predictor probability, dan Peluang kejadian A saat kejadian B telah terjadi diistilahkan sebagai posterior probability.

Apa saja manfaat dari Naive Bayes Classifier (NBC) ini? Sebenarnya banyak sekali aplikasi atau manfaat dari NBC ini teman-teman, namun yang umum biasanya digunakan untuk mengklasifikasikan atau mendeteksi email sampah (spam email), analisis sentimen kata atau kalimat (sentiment analysis), dan sistem rekomendasi keputusan berdasarkan data-data tertentu.

Bagaimana cara mengimplementasikan NBC ini dengan R? Dalam kesempatan ini, kita akan langsung mempraktikkan Naive Bayes Classifier Algorithm dengan menggunakan data dummy yang telah saya siapkan pada tautan berikut. Dalam praktik kali ini, kita akan menggunakan sebuah data dengan variabel dependenya adalah keputusan untuk membeli komputer atau tidak. Adapun variabel independen yang kita gunakan meliputi umur, pendapatan, status seorang murid atau bukan, serta kondisi kredit yang dijalankan berkategori Baik atau Sedang.

Untuk menentukan probabilitas pada setiap keputusan pembelian komputer menurut variabel independennya, dapat kita lihat pada bagian tabel probabilitas. Setelah itu, kita hitung peluang Likelihoodnya untuk keputusan pembelian komputer masing-masing kategorinya, Ya dan Tidak membeli komputer. Berikut penghitungan secara manualnya agar mampu memperjelas pemahaman kita semua.



Kaidah Bayes untuk menentukan peluang

Itu tadi kalau kita mau hitung dan perkirakan secara manual. Selanjutnya, bila datanya sudah diunduh, kita lanjutkan dengan praktik menggunakan R menggunakan beberapa code berikut:

Code:

#Install dan aktivasi package
install.packages("e1070")
install.packages("caret")
library(e1071)
library(caret)

#Memanggil Data
library(readxl)
datareal <- read_excel("C:/Users/Joko Ade/Downloads/datareal.xlsx")

#Mengecek Struktur Data
str(datareal)

Hasil:

tibble [14 x 5] (S3: tbl_df/tbl/data.frame)
 $ umur         : chr [1:14] "<=30" "<=30" "31-40" ">40" ...
 $ pendapatan   : chr [1:14] "Tinggi" "Tinggi" "Tinggi" "Sedang" ...
 $ status_murid : chr [1:14] "Tidak" "Tidak" "Tidak" "Tidak" ...
 $ rating_kredit: chr [1:14] "Sedang" "Baik" "Sedang" "Sedang" ...
 $ beli_komputer: chr [1:14] "Tidak" "Tidak" "Ya" "Ya" ...

Code:

#mengubah tipe data
datareal$umur <- as.factor(datareal$umur)
datareal$pendapatan <- as.factor(datareal$pendapatan)
datareal$status_murid <- as.factor(datareal$status_murid)
datareal$rating_kredit <- as.factor(datareal$rating_kredit)
datareal$beli_komputer <- as.factor(datareal$beli_komputer)

#Partisi Data kita coba partisi train dataset 70%, 30% untuk test dataset
inTrain <- createDataPartition(y=datareal$beli_komputer, p = 0.70, list = F)
train <- datareal[inTrain,]
test <- datareal[-inTrain,]

#mengattach data
attach(train)

Hasil:

# A tibble: 11 x 5
   umur  pendapatan status_murid rating_kredit beli_komputer
   <fct> <fct>      <fct>        <fct>         <fct>        
 1 <=30  Tinggi     Tidak        Sedang        Tidak        
 2 <=30  Tinggi     Tidak        Baik          Tidak        
 3 31-40 Tinggi     Tidak        Sedang        Ya           
 4 >40   Sedang     Tidak        Sedang        Ya           
 5 >40   Rendah     Ya           Sedang        Ya           
 6 >40   Rendah     Ya           Baik          Tidak        
 7 <=30  Sedang     Tidak        Sedang        Tidak        
 8 <=30  Rendah     Ya           Sedang        Ya           
 9 >40   Sedang     Ya           Sedang        Ya           
10 <=30  Sedang     Ya           Baik          Ya           
11 31-40 Tinggi     Ya           Sedang        Ya

# A tibble: 3 x 5
  umur  pendapatan status_murid rating_kredit beli_komputer
  <fct> <fct>      <fct>        <fct>         <fct>        
1 31-40 Rendah     Ya           Baik          Ya           
2 31-40 Sedang     Tidak        Baik          Ya           
3 >40   Sedang     Tidak        Baik          Tidak

Code:

#Pemodelan Naive Bayes
nb <- naiveBayes(beli_komputer~umur+status_murid+pendapatan+rating_kredit,
                 data = train)
print(nb)

Hasil:

Naive Bayes Classifier for Discrete Predictors

Call:
naiveBayes.default(x = X, y = Y, laplace = laplace)

A-priori probabilities:
Y
    Tidak        Ya
0.3636364 0.6363636

Conditional probabilities:
       umur
Y            <=30       >40     31-40
  Tidak 0.7500000 0.2500000 0.0000000
  Ya    0.2857143 0.4285714 0.2857143

       status_murid
Y           Tidak        Ya
  Tidak 0.7500000 0.2500000
  Ya    0.2857143 0.7142857

       pendapatan
Y          Rendah    Sedang    Tinggi
  Tidak 0.2500000 0.2500000 0.5000000
  Ya    0.2857143 0.4285714 0.2857143

       rating_kredit
Y            Baik    Sedang
  Tidak 0.5000000 0.5000000
  Ya    0.1428571 0.8571429

Code:

#Prediksi dari Model Train
p2 <- predict(nb, train)
head(train$beli_komputer)
head(p2)

#Akurasi Prediksi
confusionMatrix(p2, train$beli_komputer)

Hasil:

Confusion Matrix and Statistics

          Reference
Prediction Tidak Ya
     Tidak     3  1
     Ya        1  6
                                          
               Accuracy : 0.8182          
                 95% CI : (0.4822, 0.9772)

    No Information Rate : 0.6364          
    P-Value [Acc > NIR] : 0.175           
                                          
                  Kappa : 0.6071          
                                          
 Mcnemar's Test P-Value : 1.000           
                                          
            Sensitivity : 0.7500          
            Specificity : 0.8571          
         Pos Pred Value : 0.7500          
         Neg Pred Value : 0.8571          
             Prevalence : 0.3636          
         Detection Rate : 0.2727          
   Detection Prevalence : 0.3636          
      Balanced Accuracy : 0.8036          
                                          
       'Positive' Class : Tidak

Code:

#Prediksi dengan Test
predtest <- predict(nb, test)
head(test$beli_komputer)
head(predtest)

#Confusion Matriks Test
confusionMatrix(predtest, test$beli_komputer)

Hasil:

Confusion Matrix and Statistics

          Reference
Prediction Tidak Ya
     Tidak     1  0
     Ya        0  2

                                     
               Accuracy : 1          
                 95% CI : (0.2924, 1)

    No Information Rate : 0.6667     
    P-Value [Acc > NIR] : 0.2963     
                                     
                  Kappa : 1          
                                     
 Mcnemar's Test P-Value : NA         
                                     
            Sensitivity : 1.0000     
            Specificity : 1.0000     
         Pos Pred Value : 1.0000     
         Neg Pred Value : 1.0000     
             Prevalence : 0.3333     
         Detection Rate : 0.3333     
   Detection Prevalence : 0.3333     
      Balanced Accuracy : 1.0000     
                                     
       'Positive' Class : Tidak

Terlihat bahwa pada hasil pengujian menggunakan train dataset, model Naive Bayes Classifier (NBC) dihasilkan cukup akurat dengan accuracy sebesar 81,82 persen. Dan bila kita ujikan hasil pembelajaran mesin NBC terhadap test dataset kita mendapatkan accuracy sebesar 100 persen. Terbukti pada tabel Confusion Matix and Statistics bahwa hasil prediksi NBC tidak ada yang salah klasifikasi.

Baik, demikian sekilas pembahasan kita mengenai Machine Learning jenis Supervised Learning: Naive Bayes Classifier dengan menggunakan R. Jangan lupa share dan terus menyimak unggahan-unggahan berikutnya. Selamat mempraktikkan!

Komentar

Postingan populer dari blog ini

Pemodelan Autoregressive Integrated Moving Average (ARIMA Model) dengan R

ARIMA dengan R Jumpa lagi teman-teman, sebelumnya saya mohon maaf karena kemarin tidak sempat membuat unggahan terbaru di blog ini. Baik, sebelumnya kita telah mengulas tentang pemodelan Geographically Weigthed Regression (GWR) dengan R. Kali ini, kita akan melanjutkan belajar bersama mengenai pemodelan yang tak asing lagi dan populer hingga kini, yaitu pemodelan Autoregressive Integrated Moving Average (ARIMA). Kita akan membahas ARIMA secara langsung tanpa membahas AR dan MA secara tersendiri mengingat pada dasarnya ARIMA adalah model perpaduan antara model AR dengan order p , MA dengan order q dan aspek differencing dengan order d . Artinya, ketika kita mendengar istilah AR(1), maka sebenarnya itu adalah ARIMA(1, 0, 0), ketika kita mendengar ARI(1,1), maka aslinya itu ARIMA(1, 1, 0), atau bila mendengar MA(3), itu sebenarnya ARIMA(0, 0, 3) atau IMA(2,1) sebenarnya adalah ARIMA(0, 2, 1). Data runtun waktu atau time series merupakan salah satu jenis data yang hingga kini banyak digun

Machine Learning: Memahami Reinforcement Learning

Reinforcement Learning Halo teman-teman, pada pembahasan sebelumnya, kita telah berusaha memahami mengenai supervised learning dan unsupervised learning . Sebelum lanjut ke pemodelan statistik selanjutnya, ada baiknya kita membahas tentang satu lagi jenis algoritma machine learning yang akhir-akhir ini banyak digunakan dalam membentuk artificial intelligence (AI), yaitu algoritma reinforcement learning . Kita ke pengertian berdasarkan studi literatur daring ( online ) dulu teman-teman. Saya coba mengambil salah satu pengertian reinforcement learning, misalkan dari situsnya Algoritma, menyatakan bahwa reinforcement learning merupakan algoritma yang diterapkan untuk pembelajaran mesin ( machine learning ) sedemikian rupa sehingga dapat menentukan aksi yang tepat dan pada akhirnya sebuah program dapat bekerja secara otomatis memberikan hasil atau putusan yang benar. Lebih lanjut dalam situs algoritma mengangkat sebuah perumpamaan reinforcement learning dengan menggunakan proses penugasan

Machine Learning: Perbedaan Supervised Learning dan Unsupervised Learning

Perbedaan supervised learning dan unsupervised learning Halo teman-teman, kemarin kita telah mengawali bahasan mengenai salah satu anggota dari Machine Learning sekaligus merupakan contoh dari algoritma supervised learning , yaitu Naive Bayes Classifier (NBC). Akhir-akhir ini, dunia sains data dihebohkan dengan berbagai istilah statistik yang berkaitan erat dengan komputasi atau komputasi statistik, yaitu supervised learning dan unsupervised learning . Sebenarnya ada lagi istilah baru dan cukup makin sulit menyederhanakan definisinya, yaitu reinforcement learning , tapi khusus reinforcement learning nanti akan kita bahas tersendiri karena kita mulai bersinggungan dengan Artificial Intelligence atau kecerdasan buatan. Jujur, saya mengakui bahwa tidak semua dari kita memiliki latar belakang apalagi pakar teknologi informasi (IT). Sehingga, bila kita cermati bahasan-bahasan atau istilah komputasi statistik, sains data, atau data engineering , kita mungkin akan sejenak loading , bahkan s