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

Supervised Learning: Artificial Neural Network (ANN) dengan R

Artificial Neural Network (ANN) dengan R

Halo teman-teman, jumpa lagi dengan blog sederhana ini. Kita kemarin telah banyak membahas mengenai salah satu model machine learning berjenis unsupervised learning, yaitu Fuzzy C Means Clustering. Kali ini kita akan beranjak belajar bersama-sama mengenai salah satu jenis supervised learning yang saya sendiri merupakan model yang cukup "berat", yaitu Artificial Neural Network (ANN) atau disebut pula Neural Network Model.

Model yang disebut-sebut jaringan syaraf tiruan (Neural Network) ini saya rasa menjadi poin awal kita membahas model yang advance, karena dari model inilah lahir dan berkembang model-model lain yang semakin rumit untuk dijelaskan secara sederhana dan renyah. Tetapi, kita di sini bersama-sama untuk mengupas Artificial Neural Network ini langkah demi langkah.

Seperti adat istiadat dalam blog ini, sebelum praktikum, kita akan mengulas model secara teoritis terlebih dahulu. Jaringan syarat tiruan (Artificial Neural Network) atau ANN ini sejatinya merupakan algoritma yang lahir sebagai tiruan atau miniatur dari sistem jaringan syaraf pada ilmu biologi. Kalau dalam biologi, sistem syaraf yang kita kenal memiliki beberapa elemen pembangun, yaitu badan sel, dendrit, akson, nodus ranvier, selubung mielin, sel Schwan, serta celah sinapsis. Masing-masing dari elemen sistem syaraf ini memiliki fungsi masing-masing. Demikian halnya dengan jaringan syaraf tiruan yang kemudian kita kenal sebagai Artificial Neural Network. Seperti halnya sistem syaraf manusia atau mahluk hidup lainnya, ANN juga belajar berdasarkan secuplik pengalaman (data sampel atau contoh) untuk kemudian mampu membuat sebuah keputusan bila menemui situasi yang sama dengan pengalaman sebelumnya.

Kalau di dalam sebuah sel syaraf (neuron) atau node, kita mengenal istilah efek stimulus, maka kalau di dalam ANN kita akan mengenal istilah efek masukan (input). Efek inilah yang dinotasikan sebagai penimbang atau pembobot dalam proses penghitungan keluaran (output) ANN. Setiap input yang menstimulus masuk dalam neuron akan memiliki bobot masing-masing dan kemudian dijumlahkan menjadi sebuah nilai tertentu. Kalau di biologi, setiap input yang masuk dalam neuron diistilahkan sebagai dendrit. Dendrit inilah yang menerima setiap impuls yang masuk. Sedangkan 1 nilai hasil penjumlahan setiap input dengan penimbang masing-masing berada pada bagian badan sel (nukleus).

Proses berikutnya terjadi konversi nilai pada badan sel tadi, kalau dalam biologi dikenal dengan neuron sensorik (neuron aferen). Proses konversi ini dalam ANN melibatkan sejumlah fungsi matematis untuk mengubah 1 nilai tadi sehingga menjadi nilai baru. Beberapa fungsi matematis ini kemudian dikenal sebagai fungsi aktivasi (activation function) sebagai berikut:

Beberapa jenis fungsi aktivasi ANN

Dengan menggunakan fungsi aktivasi ini, Artificial Neural Network hakikatnya memiliki tujuan melakukan transformasi sejumlah input menjadi sebuah output yang memiliki makna dan manfaat dalam pengambilan keputusan, khususnya di bidang statistika.

Kalau berdasarkan pengalaman, sulit menerjemahkan ANN secara teoritis ke praktis, tetapi kita akan coba melakukannya dengan beberapa ilustrasi berikut:

Ilustrasi Artificial Neural Network paling sederhana

Gambar di atas merupakan arsitektur ANN paling sederhana. Input yang masuk ke dalam sistem memiliki efek masing-masing sebagai penimbang (weigthed) pada layer 0. Proses berikutnya, informasi akan dikonversi menggunakan fungsi aktivasi dan di dalam proses ini sejumlah informasi mengandung bias. Setelah setiap input dikalikan dengan penimbang dan ditambahkan bias, kemudian masuk dalam fungsi aktivasi. Nilai yang dihasilkan dari proses ini kemudian menjadi input untuk kemudian dikonversi kembali dengan fungsi aktivasi sebelum menjadi nilai akhir (output).

Dalam praktiknya, visualisasi output ANN di R biasanya kita peroleh sebagai berikut:

Output Artificial Neural Network Model dengan R

Awalnya, saya sendiri masih bingung bagaimana cara menerjemahkan atau menginterpretasikan output ANN R pada gambar di atas. Namun, setelah saya baca beragam referensi termasuk buku-buku tekstual, saya peroleh simpulan yang saya tuangkan pada gambar tersebut. Arsiterktur ANN tersebut terdiri atas 3 lapis (layer), 5 input, 1 hidden layer yang terdiri atas 3 nodes, dan garis warna biru itu menunjukkan bias di setiap lapis, bias pertama terjadi di dalam hidden layer dan bias kedua terjadi di output layer.

Lantas, bagaimana cara kita menentukan nilai output dalam Artificial Neural Network (ANN)? Agar lebih mudah, kita gunakan lagi ilustrasi ANN yang paling sederhana dengan 3 layer dan 1 hidden layer berikut:

Alur matematis arsitek ANN 3 layer
 
Misalkan ada input bernilai 10, maka sebelum menuju fungsi aktivasi, ia akan dikalikan dengan penimbang w1 = 0,2 sehingga menjadi (10 x 0,2) = 2. Setelah itu, ditambah dengan bias sebagai efek dalam fungsi aktivasi, misalkan biasnya -2,5, maka (2 + (-2,5)) = -0,5. Nilai -0,5 inilah yang kemudian dimasukkan dalam fungsi aktivasi, dalam kasus kita ini misalkan fungsi aktivasinya adalah Sigmoid dengan rumus yang tertera pada gambar didapatkan hasil f(-0,5) = 0,38. Setelah itu, angka 0,38 ini masuk ke layer ke-3, yaitu layer output dengan cara dikalikan lagi dengan penimbang sebelum masuk fungsi aktivasi (0,38 x 0,3) = 0,114. Setelah itu, karena di dalam layer output juga terdapat bias maka nilainya menjadi (0,114 + 0,5) = 0,614. Pada kasus kita ini, fungsi aktivasi output menggunakan fungsi ReLU dengan f(x) = nilai maksimum dari (0, x) sehingga f(0,614) = max(0, 0,614) = 0,614. Maka, output akhir dari proses ANN sederhana ini sama dengan 0,614 dari input sebesar 10 tadi.
 
Lalu, apa saja tipe-tipe arsitektur dasar Artificial Neural Network (ANN) yang sering digunakan? Setidaknya ada 3 jenis arsitektur, yaitu single layer Feed-forward neural network, multilayer Feed-forward neural network, dan recurrent neural network. Sebenarnya, Feed-forward neural network sendiri merupakan bentuk dasar dari tipe perceptron neural network. Tipe ini juga mirip dengan radial basis network (RBF) yang kemudian dikembangkan menjadi beragam bentuk Artificial Neural Network (ANN) lebih kompleks, terlebih untuk keperluan deep learning. Misalnya, Long/Short Term Memory (LSTM), Gated recurrent Unit (GRU), Auto encoder (AE), Variational AE (VAE), Denoising AE (DAE), Sparse AE (SAE), Markov-Chain, Hopefield Network, Boltzman Network, Restricted BM, Deep Belief Network, Deep Convolutional Nertwork (DCN), Deconvolutional Network (DN), Deep Convolutional Graphics Network (DCGN), Generative Adversarial Network, Liquid State Machine, Extreme Learning Machine, Echo State Network, Deep Residual Network, Kohonen Network, Support Vector Machine (SVM), serta Neural Tuning Machine (NTM).

Baik, kita telah sedikit mengulas mengenai teori dan beberapa bentuk pengembangan Artificial neural Network (ANN). Selanjutnya, kita akan melakukan praktik bagaimana cara memodelkan ANN menggunakan R. Dalam praktikum kali ini, saya telah menyiapkan data mengenai Indeks Kualitas Udara (IKU) yang saya peroleh dari web scraping menggunakan R. Data ini merupakan data IKU beserta komponennya dari situs iqair.com. Teman-teman dapat mengunduhnya terlebih dahulu pada tautan berikut. Setelah diunduh, Artificial Neural Network (ANN) dapat mengikuti beberapa codei berikut:
#Instal dan aktivasi package
library(neuralnet)
library(MASS)
#Import Data Indeks Kualitas Udara 232 wilayah Jawa Timur
library(readxl)
dataiku2 <- read_excel("C:/Users/Joko Ade/Downloads/dataiku.xlsx")
head(dataiku2, 10)
## # A tibble: 10 x 7
##    Konsentrasi Cuaca  Suhu Kelembapan Kecangin Tekud   IKU
##          <dbl> <dbl> <dbl>      <dbl>    <dbl> <dbl> <dbl>
##  1        46.2     5    28       0.75      5    1011   127
##  2        46.2     5    28       0.72      5.3  1011   127
##  3        46.2     5    27       0.73      6.2  1011   127
##  4        44.2     5    28       0.75     10.9  1010   122
##  5        40.2     5    28       0.74     14.4  1010   112
##  6        40.2     5    28       0.73     12.7  1010   112
##  7        40.2     5    28       0.74     13.1  1011   112
##  8        40.2     5    27       0.79      5.3  1011   112
##  9        40.2     5    28       0.7       7.8  1011   112
## 10        39.2     3    26       0.79      5.3  1011   110
#Melihat Sebara Data dengan Faset Histogram
library(tidyverse)
library(ggplot2)
dataiku2 %>%
  gather(power, value, 1:7) %>%
  ggplot(aes(x=value)) +
  geom_histogram(fill = "steelblue", color = "black", bins = 30) +
  facet_wrap(~power, scales = "free_x") +
  labs(x = "Nilai", y = "Frekuensi")
plot of chunk unnamed-chunk-17
Visualisasi sebaran data dengan facet ggplot2

#Membuat Matriks Korelasi antar Variabel
library(reshape2)
corrku <- cor(dataiku2)
melt_cor <- melt(corrku)
ggplot(data = melt_cor, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(aes(fill = value), color = "white") +
  scale_fill_gradient(low = "white", high = "#ff8c00") +
  geom_text(aes(Var1, Var2, label = round(value, 2)), size = 3)
plot of chunk unnamed-chunk-18
Visualisasi matriks korelasi antar variabel dalam data

#Menormalkan Data karena beda satuan
#Membuat fungsi normalisasi dengan minimal-maksimal
normal <- function(x){
  (x - min(x))/(max(x) - min(x))
}
#Penerapan fungsi normalisasi dengan lapply()
skala <- as.data.frame(lapply(dataiku2[1:7], FUN = normal))
head(skala, 10)
##    Konsentrasi Cuaca      Suhu Kelembapan  Kecangin     Tekud       IKU
## 1    0.6774194   1.0 0.9090909 0.24242424 0.2336449 0.5000000 0.8037975
## 2    0.6774194   1.0 0.9090909 0.15151515 0.2476636 0.5000000 0.8037975
## 3    0.6774194   1.0 0.8181818 0.18181818 0.2897196 0.5000000 0.8037975
## 4    0.6480938   1.0 0.9090909 0.24242424 0.5093458 0.3333333 0.7721519
## 5    0.5894428   1.0 0.9090909 0.21212121 0.6728972 0.3333333 0.7088608
## 6    0.5894428   1.0 0.9090909 0.18181818 0.5934579 0.3333333 0.7088608
## 7    0.5894428   1.0 0.9090909 0.21212121 0.6121495 0.5000000 0.7088608
## 8    0.5894428   1.0 0.8181818 0.36363636 0.2476636 0.5000000 0.7088608
## 9    0.5894428   1.0 0.9090909 0.09090909 0.3644860 0.5000000 0.7088608
## 10   0.5747801   0.5 0.7272727 0.36363636 0.2476636 0.5000000 0.6962025
#Memecah data dalam data training dan testing
indeks <- sample(1:nrow(dataiku2), round(0.75*nrow(dataiku2)))
train <- skala[indeks,]
head(train, 10)
##      Konsentrasi Cuaca       Suhu Kelembapan  Kecangin     Tekud       IKU
## 838    0.2214076  0.50 0.54545455  0.4545455 0.2149533 0.8333333 0.3607595
## 1319   0.2214076  0.50 0.27272727  0.5151515 0.2196262 0.6666667 0.3607595
## 1023   0.5894428  0.50 0.36363636  0.4242424 0.1588785 0.5000000 0.7088608
## 1055   0.5307918  0.50 0.54545455  0.5151515 0.2242991 0.1666667 0.6518987
## 1074   0.4721408  0.50 0.27272727  0.3939394 0.1308411 0.6666667 0.5886076
## 962    0.6774194  0.50 0.45454545  0.6363636 0.1542056 0.3333333 0.8037975
## 1155   0.8240469  0.25 0.36363636  0.6969697 0.3971963 0.5000000 0.9556962
## 978    0.6334311  0.50 0.54545455  0.4242424 0.3831776 0.3333333 0.7594937
## 300    0.3533724  0.50 0.27272727  0.8181818 0.1308411 0.5000000 0.4810127
## 1188   0.5747801  0.25 0.09090909  0.5757576 0.2663551 0.6666667 0.6962025
test <- skala[-indeks,]
head(test, 10)
##    Konsentrasi Cuaca      Suhu Kelembapan  Kecangin     Tekud       IKU
## 3    0.6774194   1.0 0.8181818 0.18181818 0.2897196 0.5000000 0.8037975
## 12   0.5601173   1.0 0.7272727 0.18181818 0.3831776 0.3333333 0.6835443
## 17   0.5307918   0.5 0.7272727 0.15151515 0.3971963 0.3333333 0.6518987
## 18   0.5307918   1.0 0.7272727 0.15151515 0.3411215 0.3333333 0.6518987
## 23   0.5161290   1.0 0.9090909 0.12121212 0.4065421 0.5000000 0.6265823
## 25   0.5161290   1.0 0.9090909 0.18181818 0.1915888 0.5000000 0.6265823
## 28   0.5161290   1.0 0.2727273 0.21212121 0.1121495 0.5000000 0.6265823
## 34   0.5014663   1.0 0.7272727 0.66666667 0.3457944 0.3333333 0.6139241
## 36   0.5014663   0.0 0.7272727 0.66666667 0.3457944 0.3333333 0.6139241
## 44   0.5014663   0.5 0.7272727 0.06060606 0.2663551 0.3333333 0.6139241
#Mengattach Data
attach(train)
## The following objects are masked from test:
## 
##     Cuaca, IKU, Kecangin, Kelembapan, Konsentrasi, Suhu, Tekud
## The following objects are masked from train (pos = 5):
## 
##     Cuaca, IKU, Kecangin, Kelembapan, Konsentrasi, Suhu, Tekud
attach(test)
## The following objects are masked from train (pos = 3):
## 
##     Cuaca, IKU, Kecangin, Kelembapan, Konsentrasi, Suhu, Tekud
## The following objects are masked from test (pos = 5):
## 
##     Cuaca, IKU, Kecangin, Kelembapan, Konsentrasi, Suhu, Tekud
## The following objects are masked from train (pos = 6):
## 
##     Cuaca, IKU, Kecangin, Kelembapan, Konsentrasi, Suhu, Tekud
#Membangun Model ANN untuk data train
nn <- neuralnet(IKU ~ Konsentrasi + Cuaca + Suhu + Kelembapan + Tekud, data = train, 
                hidden = c(5, 3),
                linear.output = T)

#Visualisasi Model ANN Train
plot(nn)
Visalisasi model Artificial Neural Network yang terbentuk
 
#Membuat Confusion Matrix Train
temp_train <- subset(train, select = c("IKU", "Konsentrasi", "Cuaca", "Suhu", "Kelembapan",
                                       "Tekud"))
nn.results_train <- neuralnet::compute(nn, temp_train)
results_train <- data.frame(actual = train$IKU, prediction = nn.results_train$net.result)
roundedresults_train <- sapply(results_train, FUN = round, digits = 0)
roundedresultsdf_train <- data.frame(roundedresults_train)
cm_train <- table(roundedresultsdf_train$actual, roundedresultsdf_train$prediction)
cm_train
##    
##       0   1
##   0 555   0
##   1   7 477
#Akurasi Model
akurasi_train <- (sum(diag(cm_train)))/sum(cm_train)
akurasi_train
## [1] 0.9932628
#Memprediksi dengan menggunakan data test
pred_nn <- neuralnet::compute(nn, test)

#Mendapatkan Nilai Prediksi dan Aktual
results <- data.frame("aktual" = test, "prediksi" = pred_nn)

#Membuat Confusion Matriks dengan data test
temp_test <- subset(test, select = c("IKU", "Konsentrasi", "Cuaca", "Suhu", "Kelembapan",
                                     "Tekud"))
nn.results <- neuralnet::compute(nn, temp_test)
results <- data.frame(actual = test$IKU, prediction = nn.results$net.result)
roundedresults<- sapply(results, FUN = round, digits = 0)
roundedresultsdf <- data.frame(roundedresults)
cm <- table(roundedresultsdf$actual, roundedresultsdf$prediction)
cm
##    
##       0   1
##   0 181   0
##   1   4 161
#Akurasi Model data test
akurasi_test <- (sum(diag(cm)))/sum(cm)
akurasi_test
## [1] 0.9884393
#Menghitung MSE Model
pred_nn_ <- pred_nn$net.result * (max(dataiku2$IKU) - min(dataiku2$IKU)) + min(dataiku2$IKU)
test.r <- (test$IKU) * (max(dataiku2$IKU) - min(dataiku2$IKU)) + min(dataiku2$IKU)
MSE_nn <- sum((test.r - pred_nn_)^2) / nrow(test)
MSE_nn
## [1] 8.543266
#Visualisasi Nilai Prediksi dan Aktual
plot(results, col = c("blue", "red"))
legend("bottomright", legend = c("Nilai Aktual", "Nilai Prediksi ANN"), fill = c("blue", "red"),
       bty = "n", cex = 0.8, title = "Keterangan")
plot of chunk unnamed-chunk-28
Visualisasi plot antara hasil prediksi dengan nilai aktual data

Demikian sedikit kebersamaan kita membahas pemodelan supervised learning: Artificial Neural Network (ANN) menggunakan R. Jangan lupa untuk terus mengikuti unggahan terbaru dari blog ini. Semoga bermanfaat dan 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