Uploaded by boot.loop.false

Belajar Data Science ISBN

advertisement
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/312160783
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R
Book · February 2019
CITATIONS
READS
11
22,152
2 authors:
Mohammad Reza Faisal
Dodon Turianto Nugrahadi
Universitas Lambung Mangkurat
Universitas Lambung Mangkurat
89 PUBLICATIONS 295 CITATIONS
27 PUBLICATIONS 82 CITATIONS
SEE PROFILE
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
IT Asset Management View project
Effect of features Generated from additional segments in protein sequence classification View project
All content following this page was uploaded by Mohammad Reza Faisal on 28 March 2019.
The user has requested enhancement of the downloaded file.
Belajar
DATA SCIENCE
Klasifikasi dengan Bahasa Pemrograman R
M. Reza Faisal
Dodon T. Nugrahadi
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R
© 2019 M. Reza Faisal & Dodon T. Nugrahadi
270 halaman, 16,5 x 23 cm
Katalog dalam Terbitan (KDT)
Perpustakaan Nasional Republik Indonesia
ISBN: 978-602-0950-59-4
Hak cipta dilindungi undang-undang. Dilarang memperbanyak sebagian atau seluruh isi buku
ini dalam bentuk apa pun, baik secara elektronik, termasuk memfotokopi, merekam, atau
dengan menggunakan sistem penyimpanan lainnya, tanpa izin tertulis dari penulis atau
penerbit.
Cetakan I: Februari 2019
Penerbit
Scripta Cendekia
Banjarbaru, Kalimantan Selatan, Indonesia
E: scriptacendekia@gmail.com
ii │ M. Reza Faisal & Dodon T. Nugrahadi
Daftar Isi
Daftar Isi ................................................................................................iii
Daftar Gambar....................................................................................... ix
Bab I Pendahuluan ..................................................................................1
1.1 Bagaimana Manusia Belajar Mengenali? ...........................1
1.2 Kenapa Komputer Perlu Mempunyai Kemampuan
Belajar Seperti Manusia? ...................................................2
1.3 Machine Learning .................................................................2
Domain Model ................................................................................ 2
Definisi ............................................................................................. 4
Istilah-Istilah .................................................................................... 4
Tipe ................................................................................................... 6
Langkah-Langkah Implementasi.................................................. 8
1.5 Machine Learning & Data Mining ......................................9
Bab II Pengantar Pemrograman R ......................................................11
2.1 Installasi ................................................................................11
Comprehensive R Archive Network (CRAN) .......................... 11
Microsoft R Archive Network (MRAN) .................................... 17
2.2 Tool Pemrograman .............................................................22
RGui................................................................................................ 22
RStudio ........................................................................................... 26
R Tools for Visual Studio ............................................................. 32
Bab III Fungsi-Fungsi Dasar R............................................................35
3.1 Package .................................................................................35
Installasi Package .......................................................................... 35
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ iii
Memuat Package .......................................................................... 36
3.2 Working Directory ............................................................. 37
Mendapatkan Working Directory .............................................. 37
Menentukan Working Directory ................................................ 38
3.3 Dataset ................................................................................. 38
3.4 Menulis Data Ke File .......................................................... 39
write.csv() ...................................................................................... 39
write.table() ................................................................................... 40
3.5 Membaca File Text ............................................................. 40
read.csv() ....................................................................................... 40
read.table()..................................................................................... 41
3.5 Membaca File Excel ............................................................ 41
3.6 Akses Database ................................................................... 42
Akses Database MySQL .............................................................. 42
Akses Database SQL Server ........................................................ 43
3.7 Menampilkan Data............................................................. 44
head() ............................................................................................. 45
tail() ................................................................................................ 45
View() ............................................................................................. 45
obyek$rowName .......................................................................... 47
3.8 Memfilter Data .................................................................... 48
obyek[,x:y] ..................................................................................... 48
obyek[x:y,] ..................................................................................... 48
obyek[x1:y1, x2:y2] ....................................................................... 48
obyek[which(), ] ............................................................................ 49
3.9 Menggabung Data .............................................................. 49
rbind() ............................................................................................ 49
cbind() ............................................................................................ 50
3.10 Explorasi Data ................................................................... 51
iv │ M. Reza Faisal & Dodon T. Nugrahadi
dim() ............................................................................................... 51
names() ........................................................................................... 51
str() .................................................................................................. 52
table() .............................................................................................. 52
summary() ..................................................................................... 53
3.11 Grafik ..................................................................................54
plot() ............................................................................................... 54
scatterplot3() .................................................................................. 56
plot3d() ........................................................................................... 57
hist() ................................................................................................ 59
density() ......................................................................................... 60
pie() ................................................................................................. 61
barplot() ......................................................................................... 63
boxplot() ......................................................................................... 64
par() ................................................................................................ 64
3.12 Visualisasi Data .................................................................66
Principal Component Analysis (PCA) ....................................... 67
Visualisasi 2D ................................................................................ 69
Visualisasi 3D ................................................................................ 70
3.13 Help .....................................................................................71
Bab IV Pengantar Klasifikasi ..............................................................73
4.1 Definisi ..................................................................................73
4.2 Data .......................................................................................73
4.3 Langkah-Langkah Pengembangan ...................................78
Pengenalan Data ........................................................................... 78
Pembagian Data ............................................................................ 79
Implementasi Algoritma Klasifikasi .......................................... 82
Pengukuran Kinerja Algoritma Klasifikasi ............................... 84
Bab V Pengenalan & Pembagian Data...............................................91
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ v
5.1 Pengenalan Data ................................................................. 91
Dataset Iris ..................................................................................... 91
Dataset Titanic .............................................................................. 97
Dataset Yeast ............................................................................... 100
5.2 Pembagian Data................................................................ 105
Persiapan Working Directory ................................................... 106
Data untuk Klasifikasi Binary Class ........................................ 106
Data untuk Klasifikasi Multi Class .......................................... 112
Bab VI Rancangan Aplikasi Klasifikasi ......................................... 115
6.1 Apa Langkah Selanjutnya? ............................................. 115
6.2 Rancangan Aplikasi ......................................................... 115
Rancangan Aplikasi 1 ................................................................ 116
Rancangan Aplikasi 2 ................................................................ 117
Rancangan Aplikasi 3 ................................................................ 117
Bab VII K-Nearest Neighbors (KNN)............................................... 121
7.1 Cara Kerja .......................................................................... 121
7.2 Persiapan ........................................................................... 122
7.3 Sintaks ................................................................................ 122
7.4 Implementasi..................................................................... 123
Aplikasi 1 ..................................................................................... 123
Aplikasi 2 ..................................................................................... 126
Aplikasi 3 ..................................................................................... 134
7.5 Catatan ............................................................................... 145
Bab VIII Naïve Bayes ......................................................................... 147
8.1 Cara Kerja .......................................................................... 147
8.2 Persiapan ........................................................................... 152
8.3 Sintaks ................................................................................ 152
8.4 Implementasi..................................................................... 154
vi │ M. Reza Faisal & Dodon T. Nugrahadi
Aplikasi 1 ..................................................................................... 155
Aplikasi 2 ..................................................................................... 159
Aplikasi 3 ..................................................................................... 162
8.5 Catatan ................................................................................166
Bab IX Support Vector Machine (SVM) ...........................................169
9.1 Cara Kerja ...........................................................................169
9.2 Persiapan ............................................................................171
9.3 Sintaks .................................................................................172
9.4 Implementasi .....................................................................173
Aplikasi 1 ..................................................................................... 173
Aplikasi 2 ..................................................................................... 176
Aplikasi 3 ..................................................................................... 180
9.5 Catatan ................................................................................187
Bab X Decision Tree ............................................................................189
10.1 Cara Kerja .........................................................................189
10.2 Persiapan ..........................................................................196
10.3 Sintaks ...............................................................................196
10.4 Implementasi ...................................................................197
Aplikasi 1 ..................................................................................... 197
Aplikasi 2 ..................................................................................... 201
Aplikasi 3 ..................................................................................... 206
10.5 Catatan ..............................................................................212
Bab XI Klasifikasi Kelas Tidak Seimbang ......................................213
11.1 Definisi & Efek Kelas Tidak Seimbang ........................213
KNN ............................................................................................. 214
Naïve Bayes ................................................................................. 215
SVM .............................................................................................. 216
Decision Tree ............................................................................... 218
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ vii
11.2 Solusi Masalah ................................................................ 219
11.3 Dataset Class Tidak Seimbang ..................................... 220
11.4 Solusi Pendekatan Data ................................................. 222
Undersampling ........................................................................... 222
Oversampling ............................................................................. 232
Gabungan Undersampling & Oversampling ......................... 239
11.5 Solusi Pendekatan Algoritma ....................................... 246
Bootstrap Aggregating (Bagging) ............................................ 246
Boosting ....................................................................................... 247
Stacking........................................................................................ 248
11.6 Catatan ............................................................................. 249
Daftar Pustaka ................................................................................... 251
Tentang Penulis................................................................................... 253
viii │ M. Reza Faisal & Dodon T. Nugrahadi
Daftar Gambar
Gambar 1. Data, metode statistik dan kekuatan komputasi computer
(sumber: Machine Learning with R). .................................................... 3
Gambar 2. Dataset iris.................................................................................... 5
Gambar 3. Halaman download R-3.3.2 for Windows. ............................ 12
Gambar 4. Window Select Setup Language. ............................................ 12
Gambar 5. Window Setup - Welcome. ...................................................... 13
Gambar 6. Window Setup - Informasi lisensi........................................... 13
Gambar 7. Windows Setup - Lokasi folder installasi. ............................. 14
Gambar 8. Window Setup - Pemilihan komponen. ................................. 14
Gambar 9. Window Setup - Pemilihan opsi startup. ............................... 15
Gambar 10. Window Setup - Memilih lokasi folder Start Menu. .......... 15
Gambar 11. Window Setup - Pemilihan task tambahan. ........................ 16
Gambar 12. Windows Setup - Proses installasi. ....................................... 16
Gambar 13. Window informasi akhir proses installasi. .......................... 17
Gambar 14. Window Microsoft R Open 3.3.1 Setup – Welcome. .......... 18
Gambar 15. Window Microsoft R Open 3.3.1 Setup – Informasi lisensi.
.................................................................................................................. 18
Gambar 16. Window Microsoft R Open 3.3.1 Setup – Install Math Kernel
Library. ................................................................................................... 19
Gambar 17. Window Microsoft R Open 3.3.1 – Lisensi Math Kernel
Library. ................................................................................................... 19
Gambar 18. Window Microsoft R Open 3.3.1 Setup – Folder installasi.20
Gambar 19. Window Microsoft R Open 3.3.1 Setup – Memulai installasi.
.................................................................................................................. 20
Gambar 20. Window Microsoft R Open 3.3.1 Setup - Proses instalasi.. 21
Gambar 21. Window Microsoft R Open 3.3.1 Setup – proses installasi
selesai. ..................................................................................................... 21
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ ix
Gambar 22. RGui. ......................................................................................... 22
Gambar 23. R Console. ................................................................................. 23
Gambar 24. Window R Editor..................................................................... 24
Gambar 25. Menyimpan file script R. ........................................................ 24
Gambar 26. Eksekusi file script R. .............................................................. 25
Gambar 27. Window R Graphics. ............................................................... 26
Gambar 28. Window RStudio Setup - Welcome. ..................................... 27
Gambar 29. Window RStudio Setup - Lokasi installasi. ......................... 27
Gambar 30. Window RStudio Setup - Memilih lokasi folder Start Menu.
.................................................................................................................. 28
Gambar 31. Window RStudio Setup - proses installasi........................... 28
Gambar 32. Window RStudio Setup - detail proses installasi................ 29
Gambar 33. Window RStudio Setup - Proses installasi selesai. ............. 29
Gambar 34. Antarmuka RStudio. ............................................................... 30
Gambar 35. Fitur auto complete kode. ...................................................... 31
Gambar 36. Window Plots untuk menampilkan grafik. ......................... 31
Gambar 37. Installasi R Tool 0.5 for Visual Studio 2015. ........................ 32
Gambar 38. Proses installasi R Tool 0.5 for Visual Studio. ..................... 33
Gambar 39. Proses installasi R Tool 0.5 for Visual Studio 2015 selesai. 33
Gambar 40. Antarmuka R Tool for Visual Studio. ................................... 34
Gambar 41. Proses installasi package pada R Tool for Visual Studio 2015.
.................................................................................................................. 36
Gambar 42. Proses installasi package pada RStudio. .............................. 36
Gambar 43. Daftar dataset pada RStudio. ................................................. 38
Gambar 44. Daftar dataset pada R Tools for Visual Studio. ................... 39
Gambar 45. Output fungsi View() pada R Tool for Visual Studio. ....... 46
Gambar 46. Output fungsi View() pada RStudio. .................................... 46
Gambar 47. Output fungsi View() pada RGui. ......................................... 47
x │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 48. Grafik plot(iris[,1], iris[,2]) ..................................................... 54
Gambar 49. Grafik plot(cars)....................................................................... 55
Gambar 50. Grafik plot(iris). ....................................................................... 56
Gambar 51. Grafik scatterplot3d().............................................................. 57
Gambar 52. Grafik plot3d(). ........................................................................ 58
Gambar 53. Grafik hist(mtcars[,1])............................................................. 60
Gambar 54. Grafik density. ......................................................................... 61
Gambar 55. Grafik pie() ............................................................................... 62
Gambar 56. Grafik pie dataset iris.............................................................. 62
Gambar 57. Grafik barplot vertical. ........................................................... 63
Gambar 58. Grafik barplot horizontal. ...................................................... 63
Gambar 59. Grafik fungsi boxplot(). .......................................................... 64
Gambar 60. Fungsi par() untuk membuat 2 grafik dalam 1 kolom....... 65
Gambar 61. Fungsi par() untuk membuat 3 grafik dalam 1 kolom....... 65
Gambar 62. Fungsi par() untuk membuat 4 grafik dalam 2 baris dan 2
kolom. ..................................................................................................... 66
Gambar 63. Grafik visualisasi 2D dengan fungsi biplot(). ..................... 69
Gambar 64. Grafik 2 dimensi fungsi pca2d(). ........................................... 70
Gambar 65. Grafik 3 dimensi fungsi pca3d() ............................................ 71
Gambar 66. Output fungsi help() pada R Tools for Visual Studio. ....... 72
Gambar 67. Output fungsi help() pada RStudio. ..................................... 72
Gambar 68. Data yang dimiliki. ................................................................. 79
Gambar 69. Data dibagi menjadi data training dan testing. .................. 79
Gambar 70. Membagi data menjadi 2. ....................................................... 80
Gambar 71. Data dibagi 5 bagian. .............................................................. 80
Gambar 72. Data proses pertama. .............................................................. 80
Gambar 73. Data proses kedua. .................................................................. 81
Gambar 74. Data proses ketiga. .................................................................. 81
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ xi
Gambar 75. Data proses keempat. .............................................................. 81
Gambar 76. Data proses keempat. .............................................................. 81
Gambar 77. 5-fold cross validation data iris. ............................................ 82
Gambar 78. 5-fold cross validation data contoh. ...................................... 82
Gambar 79. Kasus klasifikasi binary class................................................. 85
Gambar 80. Precision & recall. .................................................................... 88
Gambar 81. Kurva Receiver Operation Characteristics (ROC) .............. 89
Gambar 82. Dataset iris ditampilkan dengan fungsi View(). ................. 92
Gambar 83. Sebaran data iris dalam 2 dimensi. ....................................... 94
Gambar 84. Sebaran data iris dalam 3 dimensi. ....................................... 94
Gambar 85. Sebaran data obyek iris2class pada ruang 2 dimensi. ........ 96
Gambar 86. Sebaran data obyek iris2class pada ruang 3 dimensi. ....... 96
Gambar 87. Dataset Titanic. ........................................................................ 98
Gambar 88. Web UCI Machine Learning Repository. ........................... 100
Gambar 89. Isi file yeast.data. ................................................................... 101
Gambar 90. Output fungsi View(yeast)................................................... 102
Gambar 91. Sebaran data yeast pada ruang 2 dimensi. ........................ 104
Gambar 92. Sebaran data yeast pada ruang 3 dimensi. ........................ 105
Gambar 93. Pembagian dataset iris2class................................................ 106
Gambar 94. Output dari kode program iris2class.5fold.crossvalidation.R
................................................................................................................ 108
Gambar 95. Pembagian data titanic. ........................................................ 109
Gambar 96. Output dari kode program titanic.kfold.crossvalidation.R
................................................................................................................ 111
Gambar 97. Pembagian data iris. ............................................................. 112
Gambar 98. Alur proses aplikasi 1. .......................................................... 116
Gambar 99. Alur proses aplikasi 2. .......................................................... 117
Gambar 100. Alur proses aplikasi 3. ........................................................ 118
xii │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 101. Cara kerja algoritma K-Nearest Neighbors (KNN). ....... 121
Gambar 102. Grafik ROC Aplikasi 2 KNN. ............................................ 133
Gambar 103. Grafik ROC gabungan Aplikasi 3 KNN........................... 137
Gambar 104. Grafik ROC Aplikasi 2 Naïve Bayes. ................................ 162
Gambar 105. Grafik ROC gabungan Aplikasi 3 Naïve Bayes. ............. 164
Gambar 106. Sebaran instance class Women & Men. ............................ 169
Gambar 107. Hyperplane pada SVM. ..................................................... 170
Gambar 108. Hyperplane optimal............................................................ 171
Gambar 109. Kurva ROC kasus klasifikasi Titanic dengan SVM. ....... 179
Gambar 110. Grafik ROC kasus klasifikasi Iris dengan SVM. ............. 180
Gambar 111. Kurva ROC kasus dataset Titanic pada aplikasi 3. ........ 182
Gambar 112. Kurva ROC kasus dataset Irispada aplikasi 3. ................ 184
Gambar 113. Kurva ROC kasus dataset Iris pada kasus multiclass
classification. ........................................................................................ 186
Gambar 114. Decision tree (pohon keputusan) data cuaca. ................. 189
Gambar 115. Pohon tahap 1. ..................................................................... 192
Gambar 116. Pohon tahap 2. ..................................................................... 193
Gambar 117. Pohon tahap 3. ..................................................................... 194
Gambar 118. Pohon tahap akhir. .............................................................. 195
Gambar 119. Decision tree dataset Iris. ................................................... 198
Gambar 120. Decision tree dataset Titanic. ............................................. 200
Gambar 121. Kurva ROC aplikasi 2 fungsi J48() dataset Iris................ 204
Gambar 122. Kurva ROC aplikasi 2 fungsi J48() kasus Titanic. ........... 205
Gambar 123. Kurva ROC aplikasi 3 dengan fungsi J48() dan cross
validation kasus dataset Iris. ............................................................. 207
Gambar 124. Kurva ROC aplikasi 3 dengan fungsi J48() dan cross
validation kasus dataset Titanic. ....................................................... 209
Gambar 125. Decision tree dataset iris 3 class. ....................................... 211
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ xiii
Gambar 126. Sebaran dataset hacide. ...................................................... 214
Gambar 127. Kurva ROC klasifikasi dataset hacide dengan KNN. .... 215
Gambar 128. Kurva ROC klasifikasi dataset hacide dengan Naïve Bayes.
................................................................................................................ 216
Gambar 129. Kurva ROC klasifikasi dataset hacide dengan SVM. ..... 217
Gambar 130. Kurva ROC klasifikasi dataset hacide dengan Decision
Tree. ....................................................................................................... 219
Gambar 131. Kurva ROC untuk kasus klasifikasi dengan KNN dan
undersampling..................................................................................... 224
Gambar 132. Kurva ROC untuk kasus klasifikasi dengan Naïve Bayes
dan undersampling. ............................................................................ 227
Gambar 133. Kurva ROC untuk kasus klasifikasi dengan SVM dan
undersampling..................................................................................... 229
Gambar 134. Kurva ROC untuk kasus klasifikasi dengan decision tree
dan undersampling ............................................................................. 231
Gambar 135. Kurva ROC untuk kasus klasifikasi dengan KNN dan
oversampling. ...................................................................................... 234
Gambar 136. Kurva ROC untuk kasus klasifikasi dengan Naïve Bayes
dan oversampling................................................................................ 235
Gambar 137. Kurva ROC untuk kasus klasifikasi dengan SVM dan
oversampling. ...................................................................................... 236
Gambar 138. Kurva ROC untuk kasus klasifikasi dengan decision tree
dan oversampling................................................................................ 238
Gambar 139. Kurva ROC untuk kasus klasifikasi dengan KNN dan
gabungan oversampling dan undersampling. ................................ 241
Gambar 140. Kurva ROC untuk kasus klasifikasi dengan Naïve Bayes
dan gabungan oversampling dan undersampling. ........................ 242
Gambar 141. Kurva ROC untuk kasus klasifikasi dengan SVM dan
gabungan oversampling dan undersampling. ................................ 243
Gambar 142. Kurva ROC untuk kasus klasifikasi dengan decision tree
dan gabungan oversampling dan undersampling. ........................ 245
Gambar 143. Skema teknik bagging......................................................... 246
xiv │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 144. Skema teknik boosting. ...................................................... 248
Gambar 145. Skema teknik stacking. ....................................................... 249
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ xv
Bab I Pendahuluan
1.1 Bagaimana Manusia Belajar Mengenali?
Anak kecil mempunyai keingintahuan yang sangat tinggi. Saat seorang
anak kecil dan orang tuanya duduk di depan rumah maka anak kecil
tersebut mungkin akan bertanya tentang apa saja yang lewat di depan
rumahnya.
Saat mobil lewat, sang anak bertanya: “Itu apa?”. “Itu mobil nak”, jawab
sang orang tua. Pertanyaan serupa mungkin diulang-ulang oleh sang
anak sampai puluhan mobil lewat di depan rumahnya. Sampai suatu
saat hal itu tidak akan ditanyakan lagi oleh sang anak. Karena sang anak
telah mengenal ciri-ciri bermacam-macam mobil yang telah lewat di
depan rumahnya.
Suatu saat mungkin sang anak akan memiliki pertanyaan lain. Tetapi
pertanyaannya masih berkaitan tentang mobil. Sang anak bertanya: “Itu
mobil ya?”. Sang orang tua akan menjawab: “Iya nak” ketika yang lewat
adalah mobil. Dan menjawab: “Bukan nak” ketika yang lewat bukan
mobil.
Hal yang sama mungkin akan terjadi lagi ketika sang anak melihat
sepeda motor. Dan kembali sang anak akan berhenti bertanya ketika
sang anak telah mengenal ciri-ciri bermacam-macam sepeda motor yang
dia lihat. Ketika proses belajar pengenalan mobil dan sepeda motor
selesai, maka sang anak akan dengan gampang mengklasifikasikan
mana mobil dan sepeda motor.
Cerita di atas adalah contoh sederhana supervised learning. Karena
data tentang setiap mobil memiliki labelnya. Jika data tentang setiap
mobil adalah setiap pertanyaan tentang mobil, maka label adalah
jawaban sang orang tua.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 1
1.2 Kenapa Komputer Perlu Mempunyai Kemampuan
Belajar Seperti Manusia?
Tetapi masalah yang dihadapi manusia tidak hanya masalah
menentukan dan membedakan sepeda motor dan mobil saja. Banyak
hal-hal serupa yang ingin diketahui oleh manusia sebagai contoh adalah
bagaimana membedakan email spam dan email bukan spam. Jika
manusia belajar mengidentifikasi email spam dan bukan seperti
bagaimana sang anak di atas belajar, maka dengan mudah dapat
membedakan email spam dan bukan.
Tetapi masalahnya tidak mungkin untuk mempekerjakan manusia
untuk memfilter email spam yang jumlahnya jutaan bahkan milyaran
lebih email pada Yahoo! Mail atau Gmail. Karena manusia mempunyai
kebatasan dalam hal kecepatan melakukan menghadapi jumlah yang
banyak, selain itu keterbatasan stamina untuk bekerja dalam waktu
yang lama atau tanpa istirahat.
Selain masalah filter email spam juga ada masalah lain seperti:
1. Menentukan penipuan transaksi di bank.
2. Pada bidang bioinformatika terdapat masalah seperti klasifikasi
kanker, DNA, genome dan lain-lain.
3. Klasifikasi lahan pada citra GIS.
4. Dan lain-lain.
1.3 Machine Learning
Domain Model
Pada sub bab pertama telah disebutkan bagaimana anak mengenali
sesuatu. Manusia dapat melakukan hal karena otak mampu membuat
model berdasarkan masalah yang dihadapi yang disebut domain model.
Dengan model tersebut maka dapat dilakukan proses seperti:
1. Klasifikasi.
2. Prediksi.
3. Clustering.
2 │ M. Reza Faisal & Dodon T. Nugrahadi
4. Explanation.
Pada sub bab pertama terdapat dua domain yaitu “sepeda motor atau
mobil” dan “email spam atau bukan”. Untuk membuat domain model
dapat digunakan dua pendekatan yaitu:
1. Pendekatan basis pengetahuan (knowledge-based)
Pendekatan ini dapat dilakukan jika ada seorang ahli di suatu
domain yang memberikan pengetahuan eksplisit untuk
mengidentifikasi sesuatu. Seorang ahli pada suatu domain lebih
dikenal sebagai expert system.
Jika pendekatan ini
diimplementasikan pada perangkat lunak maka pembuat
perangkat akan menjadi pemberi pengetahuan secara eksplisit
tentang domain model.
2. Pendekatan data-driven
Pendekatan ini memanfaatkan data yang telah ada untuk
membangun konsep model secara implisit sehingga dapat
digunakan untuk mengidentifikasi sesuatu.
Pada buku ini akan berfokus pada pendekatan data-driven. Untuk
membuat data menjadi domain model agar didapat informasi yang
dapat digunakan untuk melakukan aksi maka digunakan metodemetode yang telah dikenal pada bidang statistik. Proses data dengan
metode-metode statistik tersebut dibantu dengan bantuan kekuatan
komputasi yang dimiliki oleh komputer.
Gambar 1. Data, metode statistik dan kekuatan komputasi computer
(sumber: Machine Learning with R).
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 3
Karena menggunakan metode statistik maka proses di atas disebut
statistical learning, tetapi lebih populer atau lebih dikenal dengan
istilah machine learning.
Definisi
Mechine learning adalah bidang yang mempelajari pengembangan
algoritma komputer untuk mengubah data menjadi aksi yang cerdas
(Machine Learning with R). atau secara singkat dapat juga diartikan
sebagai proses mengubah data menjadi informasi (Machine Learning in
Action).
Selain machine learning, juga sering didengar istilah data mining yang
merupakan saudara kandungnya.
Tetapi ada pendapat yang
menyatakan tumpang tinding machine learning dan data mining
dimana secara virtual pada seluruh data mining pasti melibatkan
penggunaan machine learning tetapi tidak seluruh machine learning
melibatkan data mining. Sebagai contoh machine learning digunakan
untuk melakukan proses data mining data lalu lintas kendaraan
bermotor untuk mendapatkan pola yang berhubungan dengan tingkat
kecelakaan.
Kemudian bedakan dengan bagaimana proses
pembelajaran komputer untuk mengendarai mobil dimana hal tersebut
murni machine learning tanpa ada data mining. Maka dapat ditarik
kesimpulan singkat yaitu:
1. Machine learning berfokus pada bagaimana pembelajaran
komputer menggunakan komputer untuk memecahkan
masalah.
2. Data mining berfokus pada bagaimana pembelajaran komputer
mengindentifikasi pola yang akan digunakan manusia untuk
memecahkan masalah.
Istilah-Istilah
Sebelum membahas tentang machine learning lebih dalam, maka pada
sub bab ini akan disebutkan dan diterangkan terminologi atau istilahistilah yang umum digunakan.
4 │ M. Reza Faisal & Dodon T. Nugrahadi
Dataset, Instance & Feature
Dengan menggunakan pendekatan data-driven maka pembelajaran
dapat dilakukan jika telah dimiliki data atau sering disebut sebagai
dataset. Di bawah ini ditampilkan dataset iris yang terdiri atas 150
baris atau record yang akan lebih dikenal dengan istilah instance.
…
Gambar 2. Dataset iris.
Pada dataset di atas dapat dilihat 5 kolom yaitu:
1.
2.
3.
4.
5.
Sepal.Length.
Sepal.Width.
Petal.Length.
Petal.Width.
Species.
Istilah yang digunakan untuk kolom adalah feature, artinya dataset di
atas memiliki 5 feature. Pada beberapa algoritma, feature dapat
dibedakan menjadi dua yaitu: feature dan target variable (target
feature). Sebagai contoh jika dataset di atas diproses dengan algoritma
klasifikasi maka target variable (target feature) adalah Species sedangkan
sisanya adalah feature.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 5
Training Set & Test Set
Dataset akan digunakan pada proses pembelajaran algoritma paling
tidak terdapat dua tahap yang harus dilakukan, yaitu tahap training dan
pengujian (test). Jika dimiliki 150 instance pada dataset maka harus
dibagi menjadi dua. Data yang digunakan pada tahap training akan
disebut dengan istilah training set. Sedangkan yang digunakan pada
tahap pengujian disebut test set.
Untuk teknik pembagian dataset menjadi training dan test set akan
diterangkan pada bab yang lain.
Tipe
Machine learning dapat dibedakan menjadi dua tipe.
dimaksudkan di sini adalah tipe algoritma yaitu:
Tipe yang
1. Supervised learning.
2. Unsupervised learning.
Supervised Learning
Pembelajaran pada tipe ini telah diketahui apa yang akan diprediksi
atau target variablenya. Sehingga tujuan membangun algoritma sudah
jelas hal apa yang akan diprediksi. Oleh karena itu model yang
dihasilkan dari tipe ini adalah model prediksi.
Model prediksi digunakan untuk melakukan proses prediksi target
variable (target feature) berdasarkan feature-feature lain pada suatu
dataset. Algoritma pembelajaran yang dibangun mencoba untuk
menemukan dan memodelkan hubungan antara target variable (target
feature) tersebut dengan feature-feature lainnya.
Klasifikasi adalah contoh task mechine learning tipe supervised untuk
melakukan prediksi. Beberapa contoh penerapan klasifikasi adalah
sebagai berikut:
1. Penentuan email adalah email spam.
2. Penentuan seseorang mengidap kanker.
6 │ M. Reza Faisal & Dodon T. Nugrahadi
3. Penentuan kemenangan suatu tim sepakbola.
Pada klasifikasi, target feature yang akan diprediksi adalah feature
terkategori yang dikenal dengan istilah kelas (class) dan dapat dibagi
menjadi kategori yang disebut dengan istilah level.
Kasus klasifikasi dapat dibedakan berdasarkan tipe masalah yang
umumnya ditemui, yaitu:
1. Klasifikasi 1 class.
2. Klasifikasi 2 class (binary).
3. Klasifikasi multiclass, terdapat lebih dari 2 class.
Saat ini telah banyak teknik/metode klasifikasi yang dikembangkan
untuk menyelesaikan masalah klasifikasi 2 class. Sehingga untuk
menyelesaikan masalah klasifikasi multiclass dapat digunakan
kombinasi teknik/metode yang biasa digunakan untuk menyelesaikan
klasifikasi 2 class
Supervised learning juga dapat digunakan untuk memprediksi data
numerik. Task seperti ini dikenal dengan istilah regresi.
Berikut ini adalah beberapa nama algoritma tipe supervised leaning
yaitu:
1.
2.
3.
4.
5.
6.
K-Nearest Neighbors.
Naïve Bayes.
Suport Vector Machine.
Decision Trees.
Linear Regression.
Neural Network.
Unsupervised Learning
Unsupervised learning merupakan kebalikan dari tipe sebelumnya
dimana tidak terdapat target variable (target feature) pada dataset.
Model yang dihasilkan dari tipe ini adalah descriptive model.
Salah satu task descriptive model untuk menemukan pola yang bisa
mengidentifikasi asosiasi pada dataset. Contoh implementasinya dapat
dilakukan pada menemukan pola pada proses analisis barang yang
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 7
dibeli oleh pembeli pada suatu super market atau mini market. Tujuan
dari analisis ini adalah untuk mengetahui barang-barang yang sering
dibeli bersama-sama. Sebagai contoh jika pembeli membeli roti maka
otomatis juga membeli keju dan susu kental manis. Atau jika pembeli
membeli sabun cuci maka juga membeli pengharum pakaian. Dengan
informasi pola tersebut maka pemilik super market dapat
menggunakannya untuk membuat iklan diskon untuk kelompok barang
tersebut, atau pemilik juga dapat membuat agar tata letak barangbarang tersebut dibuat berdekatan.
Task descriptive model yang lain adalah mengelompokkan dataset ke
dalam kelompok-kelompok yang homogen yang disebut dengan istilah
clustering.
Kelompok-kelompok homogen yang dihasilkan dari
clustering perlu bantuan manusia untuk melakukan intepretasi hasil
tersebut untuk menentukan atau mendeskripsikan apa isi dari
kelompok-kelompok tersebut.
Contoh unsupervised learning adalah:
1. Association rule.
2. K-Mean clustering.
Langkah-Langkah Implementasi
Berikut ini adalah langkah-langkah yang digunakan untuk melakukan
implementasi machine learning untuk menyelesaikan kasus yang
dihadapi. Terdapat 5 tahap yang dapat diterapkan pada pada setiap
algoritma machine learning, yaitu:
1. Pengumpulan data.
2. Eksplorasi dan persiapan data, langkah eksplorasi data
bertujuan untuk lebih mengenal data yang digunakan.
Sedangkan langkah persiapan data bertujuan untuk
meningkatkan kualitas data seperti menghilangkan data yang
tidak diperlukan. Karena kualitas model yang dihasilkan sangat
bergantung pada data yang digunakan.
3. Training/pelatihan model, langkah pembangunan model. Pada
langkah ini digunakan training set sebagai input data.
8 │ M. Reza Faisal & Dodon T. Nugrahadi
4. Evaluasi model, langkah evaluasi dilakukan untuk mengetahui
performansi dari model yang dihasilkan maka model yang
dihasilkan pada tahap sebelumnya akan diuji dengan
menggunakan test set sebagai input data.
5. Perbaikan model, langkah ini diperlukan jika diinginkan
performansi yang lebih baik. Ada beberapa cara yang dapat
dilakukan untuk itu mendapatkan performansi yang lebih baik,
diantaranya adalah mengganti tipe learning atau algoritma yang
digunakan. Atau dengan cara melakukan perbaikan pada data
yang digunakan baik dengan cara menambah data, mengurangi
feature pada dataset dan lain-lain.
1.5 Machine Learning & Data Mining
Berikut ini adalah penjelasan secara singkat keterkaitan atau hubungan
antara machine learning dan data mining.
Secara singkat, data mining menggunakan metode statistik untuk
mencari pola tersembunyi pada database agar dapat menjelaskan suatu
fenomena. Sedangkan machine learning menggunakan teknik-teknik
data mining dan algoritma pembelajaran lainnya untuk membuat model
dari hal-hal yang terjadi pada data untuk memprediksi kejadian
selanjutnya. Selanjutnya machine learning akan digunakan pada bidang
artificial intelligence untuk membuat model yang digunakan untuk
pengenalan kebiasaan dan prediksi aksi sebagai contoh implementasi
pada game atau mobil pintar yang bisa berjalan sendiri.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 9
Bab II Pengantar Pemrograman R
R bukan saja bahasa tetapi juga lingkungan/environment untuk
komputasi statistik dan grafik. R merupakan project GNU yang
dikembangkan oleh Bell Laboratories (sebelumnya AT&T, sekarang
Lucent Technologies). Team pengembang R adalah John Chamber dan
teman-temannya.
R menyediakan berbagai macam tool statistik dari linier dan memodelan
non linier, uji statistik klasik, analisis time-series, klasifikasi, clustering
dan lain-lain. R juga menyediakan tool teknik grafis yang bertujuan
untuk menampilkan data yang telah diolah secara visual dalam bentuk
grafik.
R merupakan project open-source yang memungkinkan banyak pihak
untuk memberikan kontribusi dalam proses pengembangan.
2.1 Installasi
Comprehensive R Archive Network (CRAN)
Installer atau source code R tersedia dalam beberapa platform yaitu
Windows, Mac OS X dan Linux. Pada buku ini digunakan installer yang
diunduh
dari
link
berikut
ini
https://cran.rproject.org/bin/windows/base/.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 11
Gambar 3. Halaman download R-3.3.2 for Windows.
Klik link “Download R.3.3.2 for Windows. Nama file installernya adalah
R.3.3.2-win.exe. File ini berukuran sekitar 70MB.
Setelah proses download selesai, klik double pada file R.3.3.2-win.exe.
Langkah pertama adalah memilih bahasa yang digunakan.
Gambar 4. Window Select Setup Language.
Klik tombol OK, kemudian akan ditampilkan window yang berisi
ucapan selamat datang seperti gambar di bawah ini.
12 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 5. Window Setup - Welcome.
Klik tombol Next, kemudian akan ditampilkan informasi penting
tentang lisensi.
Gambar 6. Window Setup - Informasi lisensi.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 13
Klik tombol Next, kemudian akan ditampilkan window untuk memilih
folder installasi. Klik Browse jika ingin mengubah lokasi folder
installasi.
Gambar 7. Windows Setup - Lokasi folder installasi.
Klik Next, kemudian akan window pemilihan komponen untuk
diinstall. Centang 32-bit Files jika menggunakan komputer dengan
processor 32-bit. Atau centang 64-bit Files jika menggunakan komputer
dengan processor 64-bit.
Gambar 8. Window Setup - Pemilihan komponen.
14 │ M. Reza Faisal & Dodon T. Nugrahadi
Klik Next, kemudian akan ditampilkan window untuk memilih opsi
startup. Untuk memudahkan pilih No agar menggunakan opsi default
startup.
Gambar 9. Window Setup - Pemilihan opsi startup.
Kemudian akan ditampilkan window untuk memilih lokasi folder Start
Menu. Klik tombol Browse jika ingin menganti lokasi folder Start Menu.
Gambar 10. Window Setup - Memilih lokasi folder Start Menu.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 15
Klik tombol Next, kemudian akan ditampilkan window untuk memilih
task tambahan yang akan dilakukan pada proses installasi. Pilih task
tambahan sesuai keinginan.
Gambar 11. Window Setup - Pemilihan task tambahan.
Klik tombol Next, kemudian proses installasi akan dilakukan.
Gambar 12. Windows Setup - Proses installasi.
16 │ M. Reza Faisal & Dodon T. Nugrahadi
Setelah proses installasi selesai maka akan ditampilkan window seperti
gambar di bawah ini.
Gambar 13. Window informasi akhir proses installasi.
Klik tombol Finish untuk menutup proses installasi.
Microsoft R Archive Network (MRAN)
Platform R juga dapat diunduh dari Microsoft R Archive Network
(MRAN). Nama platform R pada sumber ini adalah Microsoft R Open.
Saat buku ini ditulis versi terbaru adalah 3.3.1. Platform R dari sumber
ini telah dimodifikasi untuk meningkatkan kinerja komputasi multithread.
Installer Microsoft R Open 3.3.1 dapat diunduh pada link berikut ini
https://mran.revolutionanalytics.com/download/.
Ukuran file
installer adalah 149MB. Untuk memulai proses installasi, klik double
pada file microsoft-r-open-3.3.1.msi.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 17
Gambar 14. Window Microsoft R Open 3.3.1 Setup – Welcome.
Klik tombol Next, kemudian akan ditampilkan window informasi
seperti gambar di bawah ini.
Gambar 15. Window Microsoft R Open 3.3.1 Setup – Informasi lisensi.
Centang checkbox I acknoledge the above licnesing information,
kemudian klik tombol Next. Kemudian akan ditampilkan window opsi
untuk menginstall Math Kernel Library.
18 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 16. Window Microsoft R Open 3.3.1 Setup – Install Math Kernel
Library.
Klik tombol Next, kemudian akan ditampilkan window lisensi Math
Kernel Library. Centang checkbox I accept the MKL license terms.
Gambar 17. Window Microsoft R Open 3.3.1 – Lisensi Math Kernel Library.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 19
Klik tombol Next, kemudian akan ditampilkan window untuk
menentukan lokasi folder installasi. Klik tombol Change jika ingin
mengubah folder installasi.
Gambar 18. Window Microsoft R Open 3.3.1 Setup – Folder installasi.
Klik tombol Next, kemudian akan ditampilkan window konfirmasi
memulai installasi.
Gambar 19. Window Microsoft R Open 3.3.1 Setup – Memulai installasi.
20 │ M. Reza Faisal & Dodon T. Nugrahadi
Klik tombol Install, kemudian proses installasi dimulai.
Gambar 20. Window Microsoft R Open 3.3.1 Setup - Proses instalasi.
Window dibawah ini akan ditampilkan setelah proses installasi selesai.
Klik tombol Finish untuk menutup window dan menyelesaikan proses
installasi.
Gambar 21. Window Microsoft R Open 3.3.1 Setup – proses installasi
selesai.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 21
2.2 Tool Pemrograman
RGui
RGui adalah tool pemrograman R. RGui merupakan bagian dari
plotform R yang telah diinstall pada sub bab sebelumnya. RGui dapat
dijalankan dengan memilih icon R x64 3.3.2 pada desktop atau memilih
pada start menu.
Antarmuka RGui dapat dilihat pada gambar di bawah ini.
Gambar 22. RGui.
Console
Console atau R Console adalah window yang digunakan untuk
mengeksekusi fungsi R. Pada console dapat dieksekusi lebih dari satu
fungsi. Console ini juga dapat digunakan untuk mengeksekusi program
yang disimpan di dalam file script R. R Console dapat dilihat pada
gambar di atas.
Berikut adalah contoh penggunaan R Console. Ketik kode berikut pada
window R Console.
print("hello world of R")
22 │ M. Reza Faisal & Dodon T. Nugrahadi
Kemudian tekan tombol Enter.
gambar di bawah ini.
Maka hasilnya dapat dilihat pada
Gambar 23. R Console.
Editor
Editor adalah window untuk mengetik kumpulan fungsi R atau
program script R.
Window ini tidak dapat digunakan untuk
menjalankan fungsi R. Window editor dapat ditampilkan dengan cara
memilih menu File > New script atau dengan menekan tombol Ctrl+N.
Maka akan ditampilkan window R Editor. Tuliskan kode program
seperti berikut pada window R Editor.
for(i in 1:10) {
print(paste(i,". hello world of R"))
}
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 23
Hasilnya dapat dilihat seperti pada gambar di bawah ini.
Gambar 24. Window R Editor.
Untuk menyimpan ke dalam file, pilih menu File > Save atau dengan
cara menekan tombol Ctrl+S. Kemudian berikan nama file yaitu
HelloWorld.R, seperti pada gambar di bawah ini.
Gambar 25. Menyimpan file script R.
24 │ M. Reza Faisal & Dodon T. Nugrahadi
Selanjutnya, pilih menu File > Source R Code. Kemudian pilih file
HelloWorld.R. Makan akan dapat dilihat hasil seperti pada gambar di
bawah ini.
Gambar 26. Eksekusi file script R.
Grafik
RGui memiliki window grafik untuk menampilkan hasil dari fungsi
menggambar grafik. Contoh fungsi untuk mengambar grafik adalah
plot(). Di bawah ini adalah contoh penggunaan fungsi plot().
x = c(1,2,3,4)
y = c(2,4,6,8)
plot(x,y)
Eksekusi setiap baris di atas pada window console.
ditampilkan window grafik seperti berikut ini.
Maka akan
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 25
Gambar 27. Window R Graphics.
RStudio
RStudio tool pemrograman atau integrated development environment
(IDE) bahasa R yang memiliki antarmuka lebih baik daripada RGui.
RStudio memiliki 2 versi lisensi, yaitu Open Source Edition dan
Commercial Edition.
Installer RStudio dapat didownload di
https://www.rstudio.com/products/RStudio/. RStudio tersedia untuk
platform Windows, Mac OS X dan Linux versi Ubuntu dan Fedora.
Installasi
Versi RStudio saat buku ini ditulis adalah 1.0.44. Nama file installer
untuk versi ini adalah RStudio-1.0.44.exe yang berukuran 82MB. Setelah
proses download selesai, klik double pada file installer.
26 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 28. Window RStudio Setup - Welcome.
Klik tombol Next, kemudian akan ditampilkan window untuk memilih
lokasi installasi. Klik tombol Browse jika ingin menganti lokasi folder
installasi.
Gambar 29. Window RStudio Setup - Lokasi installasi.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 27
Klik tombol Next, kemudian akan ditampilkan window untuk memilih
folder Start Menu.
Gambar 30. Window RStudio Setup - Memilih lokasi folder Start Menu.
Klik tombol Install, maka proses installasi dimulai.
Gambar 31. Window RStudio Setup - proses installasi.
28 │ M. Reza Faisal & Dodon T. Nugrahadi
Klik tombol Show details jika ingin melihat daftar file yang diinstall.
Gambar 32. Window RStudio Setup - detail proses installasi.
Setelah proses installasi selesai, maka akan ditampilkan window seperti
pada gambar di bawah ini. Klik tombol Finish untuk mengakhiri proses
installasi.
Gambar 33. Window RStudio Setup - Proses installasi selesai.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 29
Antarmuka
Antarmuka RStudio dapat dilihat pada gambar di bawah ini.
Gambar 34. Antarmuka RStudio.
RStudio memiliki window Editor, Console dan Plot (untuk
menampilkan grafik) yang terintegrasi. Selain itu RStudio juga memiliki
window Environment untuk menampilkan objek atau variable yang
telah digunakan. RStudio juga memiliki fitur explorer untuk melihat
daftar file dan daftar folder seperti yang terlihat pada tab Files di gambar
di atas. Fitur ini dapat digunakan untuk membuat folder atau
menghapus folder dan file.
RStudio juga memiliki fitur auto complete kode seperti terlihat pada
gambar di bawah ini.
30 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 35. Fitur auto complete kode.
Berikut adalah contoh bagaimana RStudio menampilkan grafik pada
window Plots.
Gambar 36. Window Plots untuk menampilkan grafik.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 31
R Tools for Visual Studio
R Tool for Visual Studio adalah extension pada Visual Studio. Extension
ini dapat digunakan untuk membuat Visual Studio menjadi integrated
development environment (IDE) untuk bahasa pemrograman R.
R
Tool
for
Visual
Studio
dapat
diunduh
di
https://www.visualstudio.com/vs/rtvs/.
Ekstensi ini berukuran
3,6MB dan memerlukan ruang hardisk sebesar 9MB untuk proses
installasi. Saat buku ini ditulis, versi R Tool for Visual Studio adalah 0.5.
Installasi
Setelah installer selesai didownload. Klik double pada file installer.
Maka akan ditampilkan window seperti gambar di bawah ini.
Gambar 37. Installasi R Tool 0.5 for Visual Studio 2015.
Klik tombol Install, maka proses installasi akan dilakukan seperti yang
terlihat pada gambar di bawah ini.
32 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 38. Proses installasi R Tool 0.5 for Visual Studio.
Setelah proses installasi selesai maka akan dilihat window seperti
gambar di bawah ini.
Gambar 39. Proses installasi R Tool 0.5 for Visual Studio 2015 selesai.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 33
Antarmuka
Antarmuka R Tool for Visual Studio dapat dilihat pada gambar di
bawah ini. R Tool for Visual Studio memiliki Editor, R Interactive yang
berfungsi sebagai R Console, R Plot untuk menampilkan grafik dan
Solution Explorer untuk menampilkan daftar folder dan file. R Tool for
Visual Studio memiliki R Plot History untuk menampilkan daftar grafik
yang telah dibuat.
Gambar 40. Antarmuka R Tool for Visual Studio.
34 │ M. Reza Faisal & Dodon T. Nugrahadi
Bab III Fungsi-Fungsi Dasar R
Bab ini akan menjelaskan tentang fungsi-fungsi dasar R. Fungsi-fungsi
yang dibahas akan berfokus pada fungsi untuk operasi data seperti
membaca data dari file, memfilter data, mengabung data, menampilkan
data ke layar, menulis data ke file dan menggambar data dalam grafik.
Selain itu juga dibahas fungsi-fungsi pendukung lainnya.
3.1 Package
Default lingkungan R telah memiliki banyak fungsi-fungsi yang dapat
digunakan untuk berbagai keperluan.
Lingkungan R dapat
ditambahkan fungsi-fungsi baru. Fungsi-fungsi baru tersebut biasanya
dalam bentuk package.
Installasi Package
Package-package tersebut disimpan pada server yang dapat diakses
secara online. Proses installasi package hanya dapat dilakukan jika ada
koneksi internet.
Fungsi install.package() adalah fungsi untuk mengunduh dan
menginstall package. Sintaks fungsi ini adalah sebagai berikut.
install.packages(“NamaPackage”)
Kode di bawah ini adalah contoh untuk menginstall package “kernlab”.
install.packages("kernlab")
Gambar di bawah ini adalah informasi yang dilihat setelah proses
installasi package selesai.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 35
Gambar 41. Proses installasi package pada R Tool for Visual Studio 2015.
Gambar 42. Proses installasi package pada RStudio.
Memuat Package
Fungsi-fungsi package hanya dapat digunakan jika package telah
dimuat. Package harus dimuat setiap saat session baru dibuat atau
setiap saat baru menjalankan tool pemrograman R.
Fungsi untuk memuat package adalah library().
adalah sebagai berikut.
library(NamaPackage)
atau
library(“NamaPackage”)
36 │ M. Reza Faisal & Dodon T. Nugrahadi
Sintaks fungsi ini
Berikut adalah contoh kode untuk memuat package “kernlab”.
library("kernlab")
3.2 Working Directory
Working directory atau direktori kerja adalah direktori/folder aktif
pada suatu session. User hanya dapat mengakses file script R dan file
data yang berada pada working direktory. Jika user ingin mengakses
file di luar working directory maka user harus menulis path
direktori/folder dan nama file.
Kode di bawah ini adalah contoh untuk mengakses file pada working
directory.
read.csv("data.csv")
Kode di bawah ini adalah contoh untuk mengakses file diluar working
directory.
read.csv("D:/Data/data_riset.csv")
Mendapatkan Working Directory
Untuk mendapatkan informasi working directory dapat digunakan
fungsi getwd(). Di bawah ini adalah contoh penggunaan fungsi getwd()
dan outputnya.
> getwd()
[1] "D:/Data/My Projects/Delete/HelloWorldR/HelloWorldR"
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 37
Menentukan Working Directory
Untuk menentukan working directory dapat digunakan fungsi setwd().
Sintaks fungsi ini adalah sebagai berikut.
setwd(“path_absolute”)
Kode di bawah ini adalah contoh penggunaan fungsi setwd() dan outputnya.
> setwd("C:/")
> getwd()
[1] "C:/"
3.3 Dataset
Platform R telah memiliki lebih 100 dataset yang dapat digunakan untuk
latihan. Fungsi data() digunakan untuk melihat daftar dataset tersebut.
Ketik fungsi data() pada window Console pada RStudio atau RGui maka
hasilnya dapat dilihat pada gambar di bawah ini.
Gambar 43. Daftar dataset pada RStudio.
38 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar di bawah ini adalah output pada R Tool for Visual Studio.
Gambar 44. Daftar dataset pada R Tools for Visual Studio.
Iris adalah salah satu dataset yang umum digunakan sebagai latihan
atau contoh pemrograman R.
3.4 Menulis Data Ke File
Iris dataset akan digunakan pada contoh-contoh di sub bab ini.
write.csv()
Fungsi write.csv() untuk menulis file yang berisi nilai-nilai yang
dipisahkan oleh koma. Format file yang dihasilkan adalah file text.
Sintaks fungsi ini adalah sebagai berikut.
write.csv(ObjectName, "FileName")
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 39
Untuk menyimpan dataset iris ke file data.csv maka digunakan perintah
berikut ini.
write.csv(iris, "data.csv")
write.table()
Fungsi write.table() untuk menulis file yang berisi nilai-nilai yang
dipisahkan oleh tab. Sintaks fungsi ini adalah sebagai berikut.
write.table(ObjectName, "FileName")
Untuk menyimpan dataset iris ke file data.txt maka digunakan perintah
berikut ini.
write.table(iris, "data.txt")
3.5 Membaca File Text
Format file yang umum digunakan digunakan menyimpan data adalah
file text yang berisi nilai-nilai yang dipisahkan oleh tanda koma atau tab.
read.csv()
Jika file text berisi nilai-nilai yang dipisahkan oleh tanda koma maka
dapat digunakan fungsi read.csv(). Sintaks fungsi ini adalah sebagai
berikut.
ObjectName = read.csv("FileName")
40 │ M. Reza Faisal & Dodon T. Nugrahadi
Sebagai contoh, untuk membaca file data.csv digunakan kode berikut.
Obyek data_csv akan menyimpan data file data_penelitian.csv yang
dibaca oleh fungsi ini.
data_csv = read.csv("data.csv")
read.table()
Jika file text berisi nilai-nilai yang dipisahkan tab maka dapat digunakan
fungsi read.table(). Sintaks fungsi ini adalah sebagai berikut.
ObjectName = read.table("FileName")
Sebagai contoh, untuk membaca file data.txt digunakan kode di bawah
ini.
data_txt = read.table("data.txt")
Obyek data_txt akan menyimpan data file data_penelitian.txt yang
dibaca oleh fungsi read.table().
3.5 Membaca File Excel
File Excel juga umum digunakan untuk menyimpan data. Untuk
membaca file Excel diperlukan package “xslx”. Install package ini
dengan perintah berikut.
install.packages("xlsx")
Setelah proses installasi package “xslx” selesai, muat library ini dengan
perintah di bawah ini.
library(xlsx)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 41
Fungsi yang digunakan untuk membaca file Excel adalah sebagai
berikut.
data_xlsx = read.xlsx("FileName", sheetName =
"SheetName")
Sebagai contoh, untuk membaca file data.xlsx digunakan perintah
berikut ini.
data_xlsx = read.xlsx("data.xlsx", sheetName = "Sheet1")
Obyek data_xlsx akan menyimpan data file data.xlsx.
3.6 Akses Database
Platform R juga dapat membaca data dari database server seperti
MySQL dan SQL Server.
Akses Database MySQL
Untuk mengakses database MySQL pada platform R diperlukan
package tambahan. Package yang dapat digunakan adalah RMySQL.
Untuk menginstall package RMySQL digunakan perintah berikut.
install.packages("RMySQL")
Kemudian muat library RMySQL dengan perintah berikut.
library(RMySQL)
Langkah pertama sebelum melakukan operasi database adalah
melakukan koneksi ke database dengan fungsi dbConnect(). Untuk
melakukan koneksi ke database digunakan sintaks berikut.
42 │ M. Reza Faisal & Dodon T. Nugrahadi
ObjectName = dbConnect(MySQL(), user='UserName',
password='Password', dbname='DatabaseName',
host='HostName')
Sebagai contoh nama database adalah belajar_r, nama host adalah
localhost, nama user adalah root dan password user adalah Rahasia.
Maka perintah untuk melakukan koneksi adalah sebagai berikut.
mydb = dbConnect(MySQL(), user='root',
password='Rahasia', dbname='belajar_r',
host='localhost')
Untuk melihat daftar tabel pada database belajar_r digunakan fungsi
dbListTables(). Berikut adalah contoh untuk menampilkan daftar tabel.
> dbListTables(mydb)
[1] "iris"
Dari ouput perintah di atas, terdapat 1 tabel yaitu iris.
Untuk mengeksekusi SQL query dapat digunakan fungsi
dbSendQuery(). Sebagai contoh, untuk menampilkan data dari tabel iris
dapat digunakan kode di bawah ini.
rs = dbSendQuery(mydb, 'select * from iris')
data_iris = fetch(rs, n=-1)
Data dari tabel iris akan disimpan pada obyek data_iris. Untuk
menampilkan isi data ke layar dapat dilakukan dengan mengetik obyek
data_iris pada R console.
Akses Database SQL Server
Package tambahan yang digunakan untuk mengakses database SQL
Server adalah RODBC. Kode di bawah ini untuk menginstall package
RODBC.
install.packages("RODBC")
Untuk memuat library RODBC digunakan kode di bawah ini.
library(RODBC)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 43
Untuk melakukan koneksi ke database digunakan fungsi
odbcDriverConnect(). Sintaks fungsi odbcDriverConnect() adalah
sebagai berikut.
ObjectName = odbcDriverConnect('driver={SQL
Server};server=HostName;database=DatabaseName;trusted_co
nnection=true')
Jika database server berada pada komputer yang sama dan nama
database adalah BelajarR, maka digunakan kode berikut ini.
myodbc = odbcDriverConnect('driver={SQL
Server};server=.;database=BelajarR;trusted_connection=tr
ue')
Untuk membaca data pada tabel iris pada database BelajarR digunakan
fungsi sqlQuery(). Contoh kode yang dapat digunakan adalah sebagai
berikut.
data_iris <- sqlQuery(myodbc, 'select * from iris')
Ketik obyek data_iris pada R console untuk melihat isi data tabel iris.
3.7 Menampilkan Data
Cara untuk menampilkan data adalah memanggil obyek yang
digunakan untuk menyimpan data. Sebagai contoh, cara ini adalah
untuk menampilkan data yang disimpan pada obyek data_txt.
> data_txt = read.table("data.txt")
> data_txt
Sepal.Length
1
2
3
4
5
6
7
8
9
10
Sepal.Width
5.1
4.9
4.7
4.6
5.0
5.4
4.6
5.0
4.4
4.9
Petal.Length
3.5
3.0
3.2
3.1
3.6
3.9
3.4
3.4
2.9
3.1
...
44 │ M. Reza Faisal & Dodon T. Nugrahadi
Petal.Width
1.4
1.4
1.3
1.5
1.4
1.7
1.4
1.5
1.4
1.5
Species
0.2
setosa
0.2
setosa
0.2
setosa
0.2
setosa
0.2
setosa
0.4
setosa
0.3
setosa
0.2
setosa
0.2
setosa
0.1
setosa
head()
Untuk menampilkan sejumlah data dari awal digunakan fungsi head().
Sintaks fungsi ini adalah sebagai berikut.
head(ObjekName, RowNumber)
Sebagai contoh, untuk menampilkan data dari obyek data_txt sebanyak
5 row digunakan perintah ini.
> head(data_txt, 5)
1
2
3
4
5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1
3.5
1.4
0.2 setosa
4.9
3.0
1.4
0.2 setosa
4.7
3.2
1.3
0.2 setosa
4.6
3.1
1.5
0.2 setosa
5.0
3.6
1.4
0.2 setosa
tail()
Untuk menampilkan sejumlah data dari akhir digunakan fungsi tail().
Sintaks fungsi ini adalah sebagai berikut.
tail(ObjekName, RowNumber)
Sebagai contoh, untuk menampilkan data dari obyek data_txt sebanyak
5 row digunakan perintah ini.
> tail(data_txt, 5)
146
147
148
149
150
Sepal.Length Sepal.Width Petal.Length Petal.Width
Species
6.7
3.0
5.2
2.3 virginica
6.3
2.5
5.0
1.9 virginica
6.5
3.0
5.2
2.0 virginica
6.2
3.4
5.4
2.3 virginica
5.9
3.0
5.1
1.8 virginica
View()
Fungsi View() digunakan untuk menampilkan data dalam bentuk tabel.
Untuk menampilkan data dari obyek data_txt, gunakan perintah di
bawah ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 45
View(data_txt)
Hasilnya dapat dilihat pada gambar-gambar di bawah ini.
Gambar 45. Output fungsi View() pada R Tool for Visual Studio.
Gambar 46. Output fungsi View() pada RStudio.
46 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 47. Output fungsi View() pada RGui.
obyek$rowName
Pada gambar di atas dapat dilihat obyek data_txt memiliki 5 kolom.
Nama kelima kolom itu adalah Sepal.Length, Sepal.Width, Petal.Length,
Petal.Width dan Species. Cara untuk melihat seluruh nilai pada kolom
Species dapat dilakukan dengan contoh di bawah ini.
data_txt$Species
Untuk menampilkan seluruh nilai pada kolom Sepal.Width digunakan
contoh di bawah ini.
data_txt$Sepal.Width
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 47
3.8 Memfilter Data
obyek[,x:y]
Jika data pada obyek terdiri atas 5 kolom, maka untuk menampilkan
kolom 1 sampai 4 saja digunakan perintah di bawah ini.
data_txt[,1:4]
Jika ingin menampilkan kolom 1, kolom 3 dan kolom 5 saja dapat
digunakan perintah berikut ini.
data_txt[,c(1,3,5)]
obyek[x:y,]
Jika ingin menampilkan data pada obyek berdasarkan baris yang
diinginkan, misal baris 13 sampai baris 23 maka digunakan perintah ini.
data_txt[13:23,]
Jika ingin menampilkan baris 1, baris 3 dan baris 5 saja maka digunakan
perintah berikut.
data_txt[c(1,3,5),]
obyek[x1:y1, x2:y2]
Jika ingin menampilkan data pada obyek baris 13 sampai 23 saja dan
kolom yang ditampilkan hanya kolom 1 sampai 4 saja maka digunakan
perintah berikut ini.
data_txt[13:23, 1:4]
48 │ M. Reza Faisal & Dodon T. Nugrahadi
Jika ingin menampilkan data pada baris 1, 3 dan 5 saja dan kolom 1, 3
dan 5 saja maka digunakan perintah berikut ini.
data_txt[c(1,3,5), c(1,3,5)]
obyek[which(), ]
Untuk memfilter data berdasarkan suatu nilai pada sebuah kolom dapat
digunakan fungsi which(). Berikut ini adalah contoh menampilkan data
jika kolom Species bernilai setosa.
data_txt[which(data_txt$Species == "setosa"),]
3.9 Menggabung Data
rbind()
Fungsi rbind() berfungsi untuk menggabung data dari dua obyek atau
lebih. Sintaks fungsi ini adalah sebagai berikut.
ObjectName = rbind(object1, object2, . . . , objectN)
Obyek-obyek yang akan digabung harus memiliki jumlah kolom yang
sama. Misal obyek data1 adalah sebagai berikut.
> data1 = iris[5:10,]
> data1
5
6
7
8
9
10
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.0
3.6
1.4
0.2 setosa
5.4
3.9
1.7
0.4 setosa
4.6
3.4
1.4
0.3 setosa
5.0
3.4
1.5
0.2 setosa
4.4
2.9
1.4
0.2 setosa
4.9
3.1
1.5
0.1 setosa
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 49
Dan misal obyek data2 adalah sebagai berikut.
> data2 = iris[130:135,]
> data2
130
131
132
133
134
135
Sepal.Length Sepal.Width Petal.Length Petal.Width
Species
7.2
3.0
5.8
1.6 virginica
7.4
2.8
6.1
1.9 virginica
7.9
3.8
6.4
2.0 virginica
6.4
2.8
5.6
2.2 virginica
6.3
2.8
5.1
1.5 virginica
6.1
2.6
5.6
1.4 virginica
Gabungan obyek data1 dan obyek data2 digabung dengan fungsi
rbind(), dan akan disimpan pada obyek data_all.
> data_all = rbind(data1, data2)
> data_all
5
6
7
8
9
10
130
131
132
133
134
135
Sepal.Length Sepal.Width Petal.Length Petal.Width
Species
5.0
3.6
1.4
0.2
setosa
5.4
3.9
1.7
0.4
setosa
4.6
3.4
1.4
0.3
setosa
5.0
3.4
1.5
0.2
setosa
4.4
2.9
1.4
0.2
setosa
4.9
3.1
1.5
0.1
setosa
7.2
3.0
5.8
1.6 virginica
7.4
2.8
6.1
1.9 virginica
7.9
3.8
6.4
2.0 virginica
6.4
2.8
5.6
2.2 virginica
6.3
2.8
5.1
1.5 virginica
6.1
2.6
5.6
1.4 virginica
cbind()
Fungsi cbind() untuk mengabungkan data pada obyek-obyek yang
memiliki jumlah baris yang sama. Misal obyek data1 berisi data seperti
berikut.
> data1 = iris[1:5, 1]
> data1
[1] 5.1 4.9 4.7 4.6 5.0
Dan data2 berisi data sebagai berikut.
> data2 = iris[131:135, 1]
> data2
[1] 7.4 7.9 6.4 6.3 6.1
50 │ M. Reza Faisal & Dodon T. Nugrahadi
Obyek data_all berisi data gabungan data1 dan data2 yang digabung
dengan fungsi cbind().
> data_all = cbind(data1, data2)
> data_all
data1 data2
[1,]
5.1
7.4
[2,]
4.9
7.9
[3,]
4.7
6.4
[4,]
4.6
6.3
[5,]
5.0
6.1
3.10 Explorasi Data
Mengetahui informasi data yang akan diolah sangat diperlukan.
Informasi itu dapat digunakan untuk menentukan strategi yang dipilih
untuk mengolah data tersebut. Berikut ini adalah beberapa fungsi untuk
mengetahui ukuran, struktur, atribut, summary dan lain-lain
dim()
Fungsi dim() dapat memberikan informasi ukuran dimensi data.
Contoh fungsi dim() dapat dilihat di bawah ini.
> dim(iris)
[1] 150
5
Dari informasi di atas dapa diketahui iris dataset terdiri atas 150 baris
dan 5 kolom.
names()
Fungsi names() memberikan informasi name kolom data. Contoh fungsi
names() dapat dilihat di bawah ini.
> names(iris)
[1] "Sepal.Length" "Sepal.Width"
"Petal.Width" "Species"
"Petal.Length"
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 51
str()
Fungsi str() memberikan informasi struktur data. Kode di bawah ini
adalah contoh penggunaan fungsi ini.
> str(iris)
'data.frame':
150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4
4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9
3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5
1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2
0.2 0.1 ...
$ Species
: Factor w/ 3 levels
"setosa","versicolor",..: 1 1 1 1 1 ...
Output fungsi ini memberikan informasi yang lebih lengkap
dibandingkan fungsi dim() dan names(). Fungsi ini memberikan
informasi tambahan berupa tipe data yang digunakan pada setiap
kolom.
table()
Fungsi table() mempunyai banyak manfaat. Salah satunya berguna
untuk melihat jumlah instance atau frekuensi pada masing-masing
target variable. Sintaks untuk menggunakan fungsi ini adalah sebagai
berikut.
table(ObjectName[,ColumnNumber])
atau
table(ObjectName$ColumnName)
Contoh di bawah ini untuk melihat jumlah instance berdasarkan kolom
Species.
> table(iris[,5])
setosa versicolor
50
50
virginica
50
52 │ M. Reza Faisal & Dodon T. Nugrahadi
Atau dapat juga digunakan seperti contoh berikut ini.
> table(iris$Species)
setosa versicolor
50
50
virginica
50
summary()
Fungsi summary() memberikan informasi statistik ringkas dari data
yang dimiliki sebuah obyek. Di bawah ini adalah contoh penggunaan
fungsi ini dan outputnya.
Sepal.Length
Min.
:4.300
1st Qu.:5.100
Median :5.800
Mean
:5.843
3rd Qu.:6.400
Max.
:7.900
Sepal.Width
Min.
:2.000
1st Qu.:2.800
Median :3.000
Mean
:3.057
3rd Qu.:3.300
Max.
:4.400
Petal.Length
Min.
:1.000
1st Qu.:1.600
Median :4.350
Mean
:3.758
3rd Qu.:5.100
Max.
:6.900
Petal.Width
Min.
:0.100
1st Qu.:0.300
Median :1.300
Mean
:1.199
3rd Qu.:1.800
Max.
:2.500
Species
setosa
:50
versicolor:50
virginica :50
Fungsi ini memberikan informasi statistik untuk setiap feature seperti
nilai terkecil, nilai terbesar, median, mean dan kuartil.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 53
3.11 Grafik
Pada sub bab ini akan dijelaskan beberapa fungsi R untuk membuat
grafik sebagai salah satu cara mengenal dan eksplorasi data.
plot()
Fungsi plot() untuk membuat titik dari nilai sumbu x dan sumbu y.
Sintaks umum fungsi plot() adalah sebagai berikut.
plot(x, y)
Parameter x dan y berisi nilai-nilai numerik. Sebagai contoh, parameter
x diisi dengan nilai-nilai numerik dari kolom ke-1 dataset iris. Dan
parameter y diisi dengan nilai-nilai dari kolom ke-2 dataset iris.
plot(iris[,1], iris[,2])
Output dari fungsi ini adalah sebagai berikut.
Gambar 48. Grafik plot(iris[,1], iris[,2])
54 │ M. Reza Faisal & Dodon T. Nugrahadi
Jika dataset hanya terdiri atas 2 feature saja, sebagai contoh dataset cars.
> head(cars)
speed dist
1
4
2
2
4
10
3
7
4
4
7
22
5
8
16
6
9
10
. . .
Maka fungsi plot() dapat digunakan dengan cara berikut ini.
plot(cars)
Output dari kode di atas adalah sebagai berikut.
Gambar 49. Grafik plot(cars).
Jika cara diatas digunakan pada dataset yang terdiri lebih dari 2 feature,
sebagai contoh dataset iris yang memiliki 5 feature, maka fungsi plot()
akan secara otomatis membuat banyak grafik. Grafik akan berisi
kombinasi seperti pada gambar di bawah ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 55
plot(iris)
Gambar 50. Grafik plot(iris).
scatterplot3()
Untuk membuat plot 3 dimensi diperlukan package tambahan yaitu
scatterplot3d. Langkah pertama adalah menginstall package ini dengan
fungsi berikut.
install.packages("scatterplot3d")
Kemudian muat package ini dengan fungsi di bawah ini.
library(scatterplot3d)
Fungsi untuk membuat plot 3 dimensi adalah scatterplot3d(). Sintaks
dari fungsi ini adalah sebagai berikut.
scatterplot3d(x,y,z, main="YourTitle")
56 │ M. Reza Faisal & Dodon T. Nugrahadi
Sebagai contoh untuk membuat plot 3 dimensi dari data mtcars
digunakan kode di bawah ini.
attach(mtcars)
scatterplot3d(wt,disp,mpg, main="3D Scatterplot")
Gambar 51. Grafik scatterplot3d().
plot3d()
Fungsi ini juga dapat digunakan untuk membuat grafik 3 dimensi.
Kelebihan fungsi ini adalah interaksi user. User dapat melihat grafik
dari sudut yang diinginkan dengan cara memutar ke arah yang
diinginkan.
Langkah pertama untuk menggunakan fungsi ini adalah memuat
package rgl.
library(rgl)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 57
Sintaks dari fungsi plot3d() adalah sebagai berikut.
plot3d(x, y, z)
Untuk membuat plot dari data mtcars dapat dilihat pada kode di bawah
ini.
plot3d(wt, disp, mpg)
Gambar 52. Grafik plot3d().
Gerakkan grafik dengan mengarahkan cursor mouse pada grafik.
Kemudian klik tombol mouse sebelah kiri dan tahan. Kemudian
gerakkan cursor ke kiri atau ke kanan, dan ke atas atau ke bawah.
58 │ M. Reza Faisal & Dodon T. Nugrahadi
hist()
Fungsi hist() digunakan untuk membuat grafik histogram. Grafik ini
dapat memberikan informasi frekuensi distribusi data. Sintaks fungsi
hist() adalah sebagai berikut.
hist(x)
Parameter x dapat diisi dengan obyek numerik.
Selain dataset iris, platform R memiliki dataset lain yang dapat
digunakan. Salah satunya adalah dataset mtcars.
> head(mtcars)
mpg cyl disp hp
21.0
6 160 110
21.0
6 160 110
22.8
4 108 93
21.4
6 258 110
18.7
8 360 175
18.1
6 225 105
wt qsec vs am
Mazda RX4
2.620 16.46 0 1
Mazda RX4 Wag
2.875 17.02 0 1
Datsun 710
2.320 18.61 1 1
Hornet 4 Drive
3.215 19.44 1 0
Hornet Sportabout 3.440 17.02 0 0
Valiant
3.460 20.22 1 0
carb
Mazda RX4
4
Mazda RX4 Wag
4
Datsun 710
1
Hornet 4 Drive
1
Hornet Sportabout
2
Valiant
1
Mazda RX4
Mazda RX4 Wag
Datsun 710
Hornet 4 Drive
Hornet Sportabout
Valiant
drat
3.90
3.90
3.85
3.08
3.15
2.76
gear
4
4
4
3
3
3
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 59
Jika parameter x diisi dengan nilai numerik feature mpg, maka akan
didapat grafik histogram sebagai berikut.
hist(mtcars[,1])
atau
hist(mtcars$mpg)
Gambar 53. Grafik hist(mtcars[,1])
density()
Fungsi density() berguna untuk melakukan estimasi kernel density.
Output fungsi ini dapat dibuat dalam bentuk grafik dengan cara seperti
contoh di bawah ini.
plot(density(mtcars$mpg))
60 │ M. Reza Faisal & Dodon T. Nugrahadi
Hasil dari kode di atas adalah sebagai berikut.
Gambar 54. Grafik density.
pie()
Fungsi pie() digunakan untuk membuat grafik pie. Sintaks fungsi ini
adalah sebagai berikut.
pie(x, labels = y)
Sebagai contoh adalah sebagai berikut.
pie(c(30,70), labels = c("wanita", "pria"))
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 61
Gambar 55. Grafik pie()
Jika dimiliki obyek table maka akan lebih mudah untuk membuat grafik
pie. Sebagai contoh sebagai berikut.
pie(table(iris[,5]))
Gambar 56. Grafik pie dataset iris.
62 │ M. Reza Faisal & Dodon T. Nugrahadi
barplot()
Fungsi barplot() digunakan untuk membuat grafik berbentuk bar.
Sintaks fungsi ini adalah sebagai berikut.
barplot(x)
Berikut adalah contoh penggunaan fungsi barplot().
barplot(mtcars$mpg)
Gambar 57. Grafik barplot vertical.
Untuk membuat grafik horizontal maka digunakan opsi horiz = TRUE
seperti contoh di bawah ini.
barplot(mtcars$mpg, horiz = TRUE)
Gambar 58. Grafik barplot horizontal.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 63
boxplot()
Fungsi boxplot() berfungsi untuk membuat grafik box dan whisker dari
sekumpulan nilai. Contoh penggunaan fungsi ini adalah sebagai
berikut.
boxplot(iris[,1:4])
Gambar 59. Grafik fungsi boxplot().
par()
Fungsi par() dapat digunakan untuk membuat beberapa grafik hasil
fungsi-fungsi di atas dalam satu gambar. Sintaks dari fungsi par()
adalah sebagai berikut:
par(mfrow=c(jumlah_grafik_dalam_baris,
jumlah_grafik_dalam_kolom))
Sebagai contoh jika ingin membuat 2 output grafik dalam satu gambar
maka digunakan kode berikut.
par(mfrow=c(1,2))
plot(mtcars$wt,mtcars$mpg)
plot(mtcars$wt,mtcars$disp)
64 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 60. Fungsi par() untuk membuat 2 grafik dalam 1 kolom.
Jika ingin membuat 3 grafik dalam 1 baris maka digunakan kode seperti
berikut.
par(mfrow=c(1,3))
plot(mtcars$wt,mtcars$mpg)
plot(mtcars$wt,mtcars$disp)
plot(mtcars$wt,mtcars$disp)
Gambar 61. Fungsi par() untuk membuat 3 grafik dalam 1 kolom.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 65
Untuk membuat 4 grafik dalam 2 baris dan 2 kolom maka digunakan
kode berikut ini.
par(mfrow=c(2,2))
plot(mtcars$wt,mtcars$mpg)
plot(mtcars$wt,mtcars$disp)
plot(mtcars$wt,mtcars$mpg)
plot(mtcars$wt,mtcars$disp)
Gambar 62. Fungsi par() untuk membuat 4 grafik dalam 2 baris dan 2
kolom.
3.12 Visualisasi Data
Pada sub bab sebelumnya telah diterangkan tentang fungsi plot() untuk
membuat grafik 2 dimensi. Diterangkan pula fungsi plot3d() untuk
membuat grafik 3 dimensi. Jika data memiliki lebih dari 3 feature, maka
perlu dipilih minimal 2 feature untuk membuat grafik 2 dimensi, atau
dipilih 3 feature untuk membuat grafik 3 dimensi. Artinya ada feature
yang tidak digunakan.
Jika ingin membuat grafik yang menggunakan informasi dari seluruh
feature dari dataset maka dapat digunakan Principal Component
Analysis (PCA).
66 │ M. Reza Faisal & Dodon T. Nugrahadi
Principal Component Analysis (PCA)
Principal Component Analysis adalah teknik untuk membangun
variable-variable baru yang merupakan kombinasi linear dari variablevariable asli. Atau teknik yang digunakan untuk menyederhanakan
suatu data, dengan cara mentransformasi data secara linier sehingga
terbentuk sistem koordinat baru dengan varians maksimum. Jumlah
maximum dari variable-variable baru ini akan sama dengan jumlah dari
variable lama, dan variable-variable baru ini tidak saling berkorelasi
satu sama lain.
PCA dapat digunakan untuk mereduksi dimensi suatu data tanpa
mengurangi karakteristik data tersebut secara signifikan atau tetap
mempertahankan informasi yang terkandung di dalamnya.
Dengan penjelasan di atas, jika data memiliki feature lebih dari 3 maka
PCA dapat mereduksi feature menjadi 2 atau 3 feature saja. Sehingga
data dapat digambar pada grafik 2 dimensi atau 3 dimensi. Tetapi
keberhasilan PCA untuk menggambar data ke dalam 2 dimensi dan 3
dimensi tergantung data tersebut. Jadi ada kemungkinan PCA tidak
akan memberikan gambaran yang benar tentang sebaran data.
Implementasi PCA pada platform R adalah dengan menggunakan
fungsi prcomp(). Data input untuk fungsi ini adalah numerik. Sebagai
contoh, berikut ini adalah data iris.
> head(iris)
Sepal.Length Sepal.Width Petal.Length
1
5.1
3.5
1.4
2
4.9
3.0
1.4
3
4.7
3.2
1.3
4
4.6
3.1
1.5
5
5.0
3.6
1.4
6
5.4
3.9
1.7
Petal.Width Species
1
0.2 setosa
2
0.2 setosa
3
0.2 setosa
4
0.2 setosa
5
0.2 setosa
6
0.4 setosa
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 67
Kolom yang dapat digunakan sebagai input fungsi prcomp() adalah
kolom ke-1 sampai ke-4. Sehingga penggunaan fungsi prcomp() dapat
ditulis sebagai berikut.
iris.pca = prcomp(iris[,-5]) #seluruh kolom, kecuali
kolom ke-5
atau
iris.pca = prcomp(iris[,1:4]) #kolom ke-1 sampai ke-4
Fungsi ini menghasilkan 4 output. Output yang pertama adalah standar
deviasi principal component. Output ini dapat dilihat dengan cara di
bawah ini.
> iris.pca$sdev
[1] 2.0562689 0.4926162 0.2796596 0.1543862
Output kedua adalah matrix variable loading.
digunakan untuk melihat output ini.
Kode di bawah ini
> iris.pca$rotation
PC1
PC2
PC3
PC4
Sepal.Length 0.36138659 -0.65658877 0.58202985 0.3154872
Sepal.Width -0.08452251 -0.73016143 -0.59791083 -0.3197231
Petal.Length 0.85667061 0.17337266 -0.07623608 -0.4798390
Petal.Width
0.35828920 0.07548102 -0.54583143 0.7536574
Output ketiga adalah nilai rotasi data. Output ini dapat dilihat dengan
menggunakan kode berikut. Jumlah data output ini sesuai dengan
jumlah data pada dataset iris yaitu 150 instance.
> iris.pca$x
PC1
PC2
PC3
PC4
[1,] -2.684125626 -0.319397247 0.027914828 0.0022624371
[2,] -2.714141687 0.177001225 0.210464272 0.0990265503
[3,] -2.888990569 0.144949426 -0.017900256 0.0199683897
. . .
[149,] 1.900941614 -0.116627959 -0.723251563 0.0445953047
[150,] 1.390188862 0.282660938 -0.362909648 -0.1550386282
Output yang terakhir adalah nilai center. Nilai center dapat dilihat
dengan perintah berikut.
> iris.pca$center
Sepal.Length Sepal.Width Petal.Length
5.843333
3.057333
3.758000
68 │ M. Reza Faisal & Dodon T. Nugrahadi
Petal.Width
1.199333
Visualisasi 2D
Untuk membuat visualisasi grafik 2D digunakan fungsi biplot() seperti
contoh berikut ini.
biplot(iris.pca)
Hasilnya akan dapat dilihat pada gambar di bawah ini.
Gambar 63. Grafik visualisasi 2D dengan fungsi biplot().
Untuk menghasilkan grafik yang lebih bagus dapat digunakan fungsi
pca2d(). Fungsi ini dimiliki oleh package pca3d. Install package pca3d
dengan perintah berikut ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 69
install.packages("pca3d")
Kemudian muat package dengan perintah berikut.
library(pca3d)
Untuk membuat grafik 2D output fungsi prcomp() digunakan kode di
bawah ini.
pca2d(iris.pca, group = iris[,5])
Parameter group diisi dengan feature dataset yang menyimpan label setiap
instance. Berikut adalah grafik yang dihasilkan.
Gambar 64. Grafik 2 dimensi fungsi pca2d().
Visualisasi 3D
Untuk membuat grafik 3 dimensi digunakan fungsi pca3d() dari
package pca3d yang telah digunakan pada sub bab sebelumnya.
Kode di bawah ini adalah contoh penggunaan fungsi pca3d().
pca3d(iris.pca, group = iris[,5])
70 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 65. Grafik 3 dimensi fungsi pca3d()
Grafik 3 dimensi di atas dapat dilihat dari sisi yang diinginkan user.
User juga dapat melakukan zoom in dan zoom out.
3.13 Help
Platform R memberikan fungsi help() untuk menampilkan dokumentasi
suatu fungsi. Sintaks fungsi ini adalah sebagai berikut.
help(FunctionName)
Berikut ini adalah contoh penggunaan fungsi help().
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 71
Gambar 66. Output fungsi help() pada R Tools for Visual Studio.
Gambar 67. Output fungsi help() pada RStudio.
72 │ M. Reza Faisal & Dodon T. Nugrahadi
Bab IV Pengantar Klasifikasi
Pada bab ini akan dijelaskan pengantar klasifikasi meliputi definisi dan
cara kerja klasifikasi. Penjelasan tentang karakteristik data yang dapat
digunakan serta istilah-istilah yang umum digunakan. Pembahasan
yang terakhir adalah langkah-langkah pengembangan aplikasi
klasifikasi yang umum dilakukan.
4.1 Definisi
Klasifikasi adalah salah satu teknik machine learning. Pada bab
sebelumnya telah disebutkan bahwa teknik ini termasuk ke dalam tipe
supervised learning.
Istilah klasifikasi didapat dari tujuan utama
teknik ini untuk memprediksi sebuah kategori dari input data.
Sebelum melakukan proses prediksi, terlebih dahulu dilakukan proses
pembelajaran. Proses pembelajaran memerlukan data. Data yang
digunakan pada proses pembelajaran disebut data latih atau data
training. Sedangkan data yang digunakan pada proses predeksi disebut
data uji atau data testing.
Kasus klasifikasi dapat dibedakan berdasarkan tipe masalah yang
umumnya ditemui, yaitu:
1. Klasifikasi 1 class.
2. Klasifikasi 2 class (binary).
3. Klasifikasi multiclass, terdapat lebih dari 2 class.
4.2 Data
Tidak semua data dapat digunakan pada teknik klasifikasi. Di bawah
ini adalah contoh input data yang dapat digunakan untuk teknik
klasifikasi.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 73
Data di bawah ini merupakan dataset yang telah ada di lingkungan R.
Dataset Titanic ini berisi catatan korban kecelakaan kapal Titanic.
Dataset terdiri atas 3 feature yaitu Class, Sex, Age dan satu target
variable yaitu Survived. Dan nilai-nilai pada masing-masing feature
adalah nominal. Dataset ini memiliki dua kategori/class yaitu No
sebanyak 16 instance dan Yes sebanyak 16 instance.
Class
Sex
Age
Survived
1st
Male
Child
No
2nd
Male
Child
No
3rd
Male
Child
No
Crew
Male
Child
No
1st
Female
Child
No
2nd
Female
Child
No
3rd
Female
Child
No
Crew
Female
Child
No
1st
Male
Adult
No
2nd
Male
Adult
No
3rd
Male
Adult
No
Crew
Male
Adult
No
1st
Female
Adult
No
2nd
Female
Adult
No
3rd
Female
Adult
No
Crew
Female
Adult
No
1st
Male
Child
Yes
2nd
Male
Child
Yes
3rd
Male
Child
Yes
Crew
Male
Child
Yes
74 │ M. Reza Faisal & Dodon T. Nugrahadi
Class
Sex
Age
Survived
1st
Female
Child
Yes
2nd
Female
Child
Yes
3rd
Female
Child
Yes
Crew
Female
Child
Yes
1st
Male
Adult
Yes
2nd
Male
Adult
Yes
3rd
Male
Adult
Yes
Crew
Male
Adult
Yes
1st
Female
Adult
Yes
2nd
Female
Adult
Yes
3rd
Female
Adult
Yes
Crew
Female
Adult
Tabel 1. Dataset Titanic.
Yes
Contoh data yang kedua adalah dataset Iris. Dataset iris adalah dataset
yang tersedia pada platform R. Dataset ini terdiri atas empat feature
yaitu Sepal.Length, Sepal.Width, Petal.Length, Petal.Width dan sebuah
target variable yaitu Species. Target variable Species bernilai nominal
sedangkan feature-feature lainnya bernilai numerik. Jumlah kategori
adalah 3 yaitu setosa, versicolor dan virginica. Jumlahs instance yang
dimiliki oleh dataset iris adalah 150 instance, 50 instace adalah kategori
setosa, 50 instance adalah kategori versicolor dan 50 instance sisanya
adalah virginica.
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
Species
5.1
3.5
1.4
0.2
setosa
4.9
3
1.4
0.2
setosa
4.7
3.2
1.3
0.2
setosa
5
3.3
1.4
0.2
setosa
...
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 75
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
Species
7
3.2
4.7
1.4
versicolor
6.4
3.2
4.5
1.5
versicolor
6.9
3.1
4.9
1.5
versicolor
5.5
2.3
4
1.3
versicolor
6.5
2.8
4.6
1.5
versicolor
6.3
3.3
6
2.5
virginica
5.8
2.7
5.1
1.9
virginica
7.1
3
5.9
2.1
virginica
6.3
2.9
5.6
1.8
virginica
6.5
3
5.8
2.2
virginica
...
Tabel 2. Dataset iris.
Contoh data yang lain adalah mtcars. Dataset mtcars juga telah tersedia
di lingkungan R.
cyl
hp
wt
am
Mazda RX4
6
110
2.62
1
Mazda RX4 Wag
6
110
2.875
1
Datsun 710
4
93
2.32
1
Hornet 4 Drive
6
110
3.215
0
Hornet Sportabout
8
175
3.44
0
Valiant
6
105
3.46
0
Duster 360
8
245
3.57
0
Merc 240D
4
62
3.19
0
Merc 230
4
95
3.15
0
Merc 280
6
123
3.44
0
Merc 280C
6
123
3.44
0
76 │ M. Reza Faisal & Dodon T. Nugrahadi
cyl
hp
wt
am
Merc 450SE
8
180
4.07
0
Merc 450SL
8
180
3.73
0
Merc 450SLC
8
180
3.78
0
Cadillac Fleetwood
8
205
5.25
0
Lincoln Continental
8
215
5.424
0
Chrysler Imperial
8
230
5.345
0
Fiat 128
4
66
2.2
1
Honda Civic
4
52
1.615
1
Toyota Corolla
4
65
1.835
1
Toyota Corona
4
97
2.465
0
Dodge Challenger
8
150
3.52
0
AMC Javelin
8
150
3.435
0
Camaro Z28
8
245
3.84
0
Pontiac Firebird
8
175
3.845
0
Fiat X1-9
4
66
1.935
1
Porsche 914-2
4
91
2.14
1
Lotus Europa
4
113
1.513
1
Ford Pantera L
8
264
3.17
1
Ferrari Dino
6
175
2.77
1
Maserati Bora
8
335
3.57
1
2.78
1
Volvo 142E
4
109
Tabel 3. Dataset mtcars.
Dataset di atas terdiri atas 3 feature yaitu cyl, hp dan wt. Sedangkan am
adalah target variable yang menyatakan kategori/class. Pada dataset di
atas nilai feature dan target variable adalah numerik.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 77
Dari tiga contoh data di atas, maka ciri khas dari data yang dapat
digunakan untuk proses klasifikasi adalah terdapatnya kolom atau
attribut sebagai target variable. Target variable berfungsi sebagai label
untuk setiap instance. Dengan adanya label tersebut maka dapat
diketahui kategori dari instance tersebut.
Kemudian pada contoh di atas juga diperkenalkan beberapa istilah yang
akan digunakan pada buku ini yaitu:
1. Instance, adalah sample atau record pada dataset.
2. Feature, adalah kolom atau attribut yang dimiliki oleh data.
4.3 Langkah-Langkah Pengembangan
Sub bab ini menjelaskan tentang langkah-langkah pengembangan
aplikasi klasifikasi. Berikut ini adalah urutan langkah-langkah tersebut:
1.
2.
3.
4.
Pengenalan data atau eksplorasi data.
Pembagian data.
Implementasi algoritma klasifikasi.
Pengukuran kinerja algoritma klasifikasi.
Pengenalan Data
Dengan mengenal data yang akan digunakan maka kita dapat
menentukan algoritma yang cocok digunakan. Pada buku ini proses ini
menggunakan cara yang sederhana yaitu:
1. Melihat struktur data, informasi yang didapatkan adalah jumlah
instance, jumlah feature, tipe data pada feature dan target
variable.
2. Melihat rangkuman data secara statistik.
3. Melihat sebaran instace-instance pada data dalam grafik 2
dimensi dan 3 dimensi. Proses ini bertujuan untuk melihat
sebaran data pada data space. Proses ini dapat memberikan
informasi overlapping antar class dan keberadaan sub cluster
pada class. Tapi tidak semua data bisa digambar dalam sebaran
78 │ M. Reza Faisal & Dodon T. Nugrahadi
data pada data space, karena proses ini dapat dilakukan jika tipe
data feature-feature adalah numerik.
Pembagian Data
Algoritma klasifikasi dapat melakukan prediksi setelah proses training
terlebih dahulu dilakukan. Proses training memerlukan data yang telah
tersedia. Dan setelah proses pembelajaran selesai maka data baru dapat
diprediksi.
Jika kita memiliki data maka ada tersebut harus dibagi menjadi dua
untuk melakukan proses pembelajaran dan pengujian.
Jangan
menggunakan data yang sama untuk proses pembelajaran dan
pengujian.
Sebagai ilustrasi, kotak abu-abu di bawah ini adalah data yang dimiliki.
Jika dimiliki data dengan 100 instance maka jangan menggunakan 100
instance pada proses training, kemudian menggunakan 100 instace itu
lagi untuk proses pengujian
Gambar 68. Data yang dimiliki.
Data harus dibagi menjadi dua, misal 80 instace untuk proses training
dan 20 instace untuk pengujian.
Gambar 69. Data dibagi menjadi data training dan testing.
Teknik pembagian data training dan data testing yang umum
digunakan untuk menguji algoritma klasifikasi adalah cross validation.
Cross Validation
Sub bab ini akan memberikan penjelasan sederhana tentang cara kerja
cross validation. Misal data dibagi menjadi 2 bagian seperti pada
gambar di bawah ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 79
Gambar 70. Membagi data menjadi 2.
Maka teknik cross validation akan melakukan proses pembelajaran dan
pengujian sebanyak 2 kali. Pertama, proses pembelajaran akan
menggunakan data kotak abu-abu. Kemudian melakukan proses
pengujian menggunakan data kotak hitam. Kedua, proses pembelajaran
akan menggunakan data kotak hitam. Kemudian melakukan proses
pengujian menggunakan data kotak abu-abu. Kinerja metode klasifikasi
di atas adalah rata-rata kinerja dari dua proses pembelajaran dan
pengujian.
Dari penjelasan singkat di atas, dapat dilihat semua data digunakan
sebagai data training dan testing. Sehingga algoritma klasifikasi yang
digunakan lebih teruji dan nilai kinerja yang didapat lebih valid.
Pada sub bab ini dibahas 2 teknik cross validation yaitu:
1. K-fold cross validation.
2. Leave-one-out cross validation.
K-Fold Cross Validation
K adalah bilangan bulat yang digunakan untuk membagi data. Jika nilai
k = 5 maka data akan dibagi 5 seperti gambar di bawah ini.
Gambar 71. Data dibagi 5 bagian.
Maka metode klasifikasi akan melakukan proses pembelajaran dan
pengujian sebanyak 5 kali.
Pertama, kotak kotak-kotak warna abu-abu akan menjadi data training.
Dan kotak warna hitam akan menjadi data testing.
Gambar 72. Data proses pertama.
80 │ M. Reza Faisal & Dodon T. Nugrahadi
Kedua, kotak kedua akan menjadi data testing dan sisanya menjadi data
training.
Gambar 73. Data proses kedua.
Ketiga, kotak ketiga akan menjadi data testing dan sisanya menjadi data
training.
Gambar 74. Data proses ketiga.
Keempat, kotak keempat akan menjadi data testing dan sisanya menjadi
data training.
Gambar 75. Data proses keempat.
Kelima, kotak kelima akan menjadi data testing dan sisanya menjadi
data training.
Gambar 76. Data proses keempat.
Selanjutnya nilai kinerja 5 proses pembelajaran dan pengujian akan
dirata-ratakan sebagai nilai kinerja metode klasifikasi.
Pembagian data di atas harus memperhatikan jumlah kategori atau
kelas yang dimiliki data. Sebagai contoh dilakukan 5-fold cross
validation dataset iris. Dataset iris memiliki 50 instance kategori setosa,
50 instance versicolor dan 50 instance virginica. Maka pembagian data
akan seperti pada gambar di bawah ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 81
30 instance
30 instance
30 instance
30 instance
30 instance
(10 setosa,
(10 setosa,
(10 setosa,
(10 setosa,
(10 setosa,
10 versicolor,
10 versicolor,
10 versicolor,
10 versicolor,
10 versicolor,
10 virginica)
10 virginica)
10 virginica)
10 virginica)
10 virginica)
Gambar 77. 5-fold cross validation data iris.
Contoh lain, jika dimiliki data sejumlah 100 instance dan 2 kategori.
Kategori “mayoritas” sejumlah 90 instace dan kategori “minoritas”
sebanyak 10 instace. Jika dilakukan 5-fold cross validation maka akan
didapat data seperti berikut.
20 instance
20 instance
20 instance
20 instance
20 instance
(18
mayoritas,
(18
mayoritas,
(18
mayoritas,
(18
mayoritas,
(18
mayoritas,
2 minoritas)
2 minoritas)
2 minoritas)
2 minoritas)
2 minoritas)
Gambar 78. 5-fold cross validation data contoh.
Pembagian data seperti cara di atas dapat dilakukan secara otomatis
dengan membuat program pada R. hal ini akan dibahas pada bab
selanjutnya.
Leave-one-out Cross Validation
Cara ini membuat 1 instance menjadi data testing dan sisanya menjadi
data training. Jika dataset iris yang memiliki 150 instance maka proses
pembelajaran dan pengujian akan dilakukan sebanyak 150 kali.
Implementasi Algoritma Klasifikasi
Setelah data dibagi menjadi data training dan data testing, selanjutnya
adalah implementasi algoritma klasifikasi. Pada tahap ini data training
akan digunakan oleh algoritma untuk belajar. Setelah proses belajar
selesai, maka data testing akan digunakan oleh algoritma klasifikasi.
Output dari algoritma tersebut hasil prediksi.
82 │ M. Reza Faisal & Dodon T. Nugrahadi
Sebagai contoh, jika diketahui data training disimpan dalam obyek
data_training. Dan isi obyek data_training adalah seperti berikut.
F.1
1
2
3
4
5
6
7
8
9
10
F.2
5.1
4.9
4.7
4.6
5.0
5.4
5.1
4.9
4.7
4.6
F.3
3.5
3.0
3.2
3.1
3.6
3.9
3.5
3.0
3.2
3.1
F.4
1.4
1.4
1.3
1.5
1.4
1.7
1.4
1.4
1.3
1.5
F5
0.2
0.2
0.2
0.2
0.2
0.4
0.2
0.2
0.2
0.2
TV
class1
class2
class1
class1
class2
class1
class1
class2
class1
class1
Sedangkan jika data testing disimpan dalam obyek data_testing. Dan isi
obyek data_testing adalah sebagai berikut.
F.1
1
2
3
4
F.2
6.7
6.7
5.1
6.7
F.3
3.3
3.0
3.5
3.0
F.4
5.7
5.2
1.4
5.2
F5
2.5
2.3
0.2
2.3
TV
class1
class2
class1
class2
Jika fungsi algorithm() adalah algoritma klasifikasi maka berikut ini
adalah contoh pseudo code implementasi fungsi algorithm().
prediction = algorithm(data_training, data_testing)
Obyek prediction pada contoh pseudo code di atas berisi prediksi atas
data_testing. Hasil prediksi biasanya berisi nilai target variable dan
probabilitas prediksi.
> prediction
prediction
[1,] class1
[2,] class1
[3,] class1
[4,] class2
probability
1
0.6
1
0.9
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 83
Pengukuran Kinerja Algoritma Klasifikasi
Setelah hasil prediksi didapat maka langkah selanjutnya adalah
melakukan pengukuran kinerja algoritma. Secara umum, pengukuran
kinerja algoritma dilakukan dengan cara membandingkan antara hasil
prediksi algoritma klasifikasi dengan nilai target variable data testing
sebagai data sebenarnya.
Pada sub bab sebelumnya telah didapat hasil prediksi algoritma
klasifikasi dan nilai target variable dari data testing. Dan berikut ini
perbandingan kedua nilai tersebut.
[1,]
[2,]
[3,]
[4,]
prediction
class1
class1
class1
class2
actual_data
class1
class2
class1
class2
Dari hasil di atas dapat dilihat 3 instance diprediksi dengan benar dan
terdapat 1 kesalahan prediksi. Maka secara logika sederhana dapat
disimpulan kinerja algoritma adalah sebagai berikut:
𝑘𝑖𝑛𝑒𝑟𝑗𝑎 =
𝑗𝑢𝑚𝑙𝑎ℎ 𝑖𝑛𝑠𝑡𝑎𝑛𝑐𝑒 𝑦𝑎𝑛𝑔 𝑑𝑖𝑝𝑟𝑒𝑑𝑖𝑘𝑠𝑖 𝑏𝑒𝑛𝑎𝑟
𝑗𝑢𝑚𝑙𝑎ℎ 𝑖𝑛𝑠𝑡𝑎𝑛𝑐𝑒
Dengan menggunakan rumus di atas maka nilai kinerja adalah:
3
= 0.75
4
Pada buku ini tidak akan menggunakan cara pengukuran kinerja
algoritma seperti di atas. Buku ini akan menggunakan cara pengukuran
kinerja algoritma klasifikasi yang umum digunakan pada publikasi
(paper jurnal dan prosiding seminar) yaitu:
𝑘𝑖𝑛𝑒𝑟𝑗𝑎 =
1. Confusion matrix.
2. Receiver Operation Characteristics (ROC)
84 │ M. Reza Faisal & Dodon T. Nugrahadi
Confusion Matrix
Confusion matrix adalah table untuk mengukur kinerja algoritma
klasifikasi atau model klasifikasi atau classifier.
Jika digunakan data hasil prediksi dan data test/aktual data di atas
maka confusion matrix dapat digambar sebagai berikut.
n=4
Prediksi class1
Prediksi class2
Aktual class1
2
1
Aktual class2
0
1
Matrix di atas memberikan informasi sebagai berikut:
1. Nilai baris 1 dan kolom 1: jumlah class1 yang diprediksi sebagai
class1 adalah 2.
2. Nilai baris 1 dan kolom 2: jumlah class1 yang diprediksi sebagai
class2 adalah 1. Artinya ada 1 kesalahan prediksi.
3. Nilai baris 2 dan kolom 1: jumlah class2 yang diprediksi sebagai
class1 adalah 0.
4. Nilai baris 2 dan kolom 2: jumlah class2 yang diprediksi sebagai
class2 adalah 1.
Pada contoh di atas adalah contoh klasifikasi 2 class atau binary class.
Artinya data hanya memiliki 2 class/kategori. Contoh kasus nyata
klasifikasi 2 class adalah prediksi penyakit kanker. Pada data terdapat
2 kategori/class yaitu YES (penderita kanker) dan NO (bukan penderita
kanker).
Gambar 79. Kasus klasifikasi binary class.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 85
Pada confusion matrix terdapat beberapa istilah yang umum digunakan
pada kasus klasifikasi binary class, yaitu:
1. True positives (TP): kasus dimana seseorang diprediksi sebagai
penderita kanker dan kenyataannya orang itu adalah penderita
kanker.
2. True negatives (TN): kasus dimana seseorang diprediksi tidak
menderita kanker dan kenyataannya orang itu tidak menderita
kanker.
3. False positives (FP): kasus dimana seseorang diprediksi sebagai
penderita kanker tetapi ternyata orang itu tidak menderita
kanker.
4. False negative (FN): kasus dimana seseorang diprediksi tidak
menderita kanker tetapi ternyata orang itu menderita kanker.
Dan berikut ini adalah contoh confusion matrix untuk kasus di atas.
n = 165
Prediksi TIDAK
KANKER
Prediksi KANKER
Aktual TIDAK
KANKER
TN = 50
FP = 10
Aktual KANKER
FN = 5
TP = 100
Dari nilai TP, TN, FP dan FN maka dapat dihitung beberapa nilai lain
yang dapat dijadikan nilai kinerja classifier. Nilai-nilai tersebut adalah:
No
Nama
1.
Accuracy
Rumus
Prosentase classifier benar
melakukan prediksi.
2.
Misclassification
Rate/Error Rate
Prosentase
melakukan
prediksi.
3.
Perhitungan
(𝑇𝑃 + 𝑇𝑁)
𝑛
(100 + 50)
= 0.91
165
(𝐹𝑃 + 𝐹𝑁)
𝑛
(10 + 5)
= 0.09
165
𝑇𝑃
𝑇𝑃 + 𝐹𝑁
100
= 0.95
100 + 5
classifier
kesalahan
True
Positive
Rate/Sensitivity/Recall
86 │ M. Reza Faisal & Dodon T. Nugrahadi
No
Nama
Rumus
Prosentase data positif
yang diprediksi sebagai
positif
4.
False Positive Rate
Prosentase data negatif
diprediksi sebagai positif.
5.
Specificity
Prosentase data negatif
diprediksi sebagai negatif.
6.
Precision
Prosentase prediksi data
sebagai positif yang benar.
7.
Prevalence
Prosentase jumlah instance
positif pada data.
Perhitungan
Prosentase data
aktual KANKER
yang diprediksi
sebagai KANKER.
𝐹𝑃
𝑇𝑁 + 𝐹𝑃
10
= 0.17
10 + 50
Prosentase data
aktual TIDAK
KANKER diprediksi
sebagai KANKER.
𝑇𝑁
𝑇𝑁 + 𝐹𝑃
50
= 0.83
50 + 10
Prosentase data
aktual TIDAK
KANKER diprediksi
sebagai TIDAK
KANKER.
𝑇𝑃
𝐹𝑃 + 𝑇𝑃
100
= 0.91
10 + 100
𝑎𝑐𝑡𝑢𝑎𝑙 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒
𝑛
105
= 0.64
165
Dari nilai-nilai kinerja di atas, nilai accuracy, sensitiviy dan specificity
sering digunakan untuk menentukan kinerja classifier.
F Score
Selain itu, nilai precision dan recall juga sering digunakan untuk
menentukan kinerja classifier. Jika melihat Gambar 79. Kasus klasifikasi
binary class di atas maka precision dan recall dapat dijelaskan dengan
gambar di bawah ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 87
Gambar 80. Precision & recall.
Dari gambar tersebut, precision adalah berapa banyak item yang
relevan. Dan recall adalah berapa banyak item relevan yang dipilih.
Dari kedua nilai tersebut dapat didapat nilai F Score. Berikut adalah
rumus F Score.
𝐹𝛽 =
(𝛽 2 + 1)𝑃 × 𝑅
𝛽2𝑃 + 𝑅
Jika nilai β = 1 maka rumus di atas menjadi seperti berikut.
𝐹1 =
𝑃×𝑅
𝑃+𝑅
Nilai ini dikenal sebagai F-1 Score. Intepretasi nilai ini adalah beban
rata-rata dari precision dan recall. Nilai ini dapat menjadi alternatif
untuk menghitung akurasi classifier selain rumus accuracy di atas.
Receiver Operation Characteristics (ROC)
Pada penjelasan confusion matrix dan dan F score hanya dapat dilihat
nilai-nilai dalam angka. Untuk menafsirkan beberapa nilai di atas dalam
bentuk grafik maka dapat digunakan kurva Receiver Operation
Characteristics (ROC). Kurva ini memperlihatkan true positive rate
(sensitivity) pada sumbu Y dan false positive rate (1-specificity) pada
sumbu X. Contoh kurva ROC dapat dilihat pada gambar di bawah ini.
88 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 81. Kurva Receiver Operation Characteristics (ROC)
Jika kurva mendekati kurva warna merah maka kinerja classifier tidak
bagus, prediksi classifier seperti melakukan tebakan secara acak.
Classifier yang bagus adalah jika memiliki kurva ROC mendekati kurva
hijau.
Kurva ini dapat memberikan nilai luas di bawah kurva ROC. Nilai memberikan
informasi kinerja classifier. Nilai ini dikenal dengan istilah Area Under the
Curve (AUC). Kinerja classifier bagus jika nilainya mendekati 1 dan jika
nilainya mendekati 0.5 maka prediksi yang dilakukan seperti melakukan
tebakan secara acak.
Pengukuran Kinerja pada Kasus Klasifikasi Multi Class
Pembahasan ketiga sub bab di atas adalah kasus klasifikasi binary class.
Apakah confusion matrix, F score dan ROC dapat digunakan untuk
mengukur kinerja classifier pada kasus klasifikasi multi class?
Kasus klasifikasi lebih dari 2 class disebut sebagai klasifikasi multi class.
Sebagai contoh, jika data memiliki 4 class/kategori maka confusion
matrix digambar sebagai berikut.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 89
n = 10
Prediksi
class1
Prediksi
class2
Prediksi
class3
Prediksi
class4
Aktual
class1
2
0
0
0
Aktual
class2
0
3
0
0
Aktual
class3
0
0
2
0
Aktual
class4
0
0
0
3
Keterangan:
1.
2.
3.
4.
Semua instance class1 dapat diprediksi dengan benar.
Semua instance class2 dapat diprediksi dengan benar.
Semua instance class3 dapat diprediksi dengan benar.
Semua instance class4 dapat diprediksi dengan benar.
Penjelasan lebih lanjut tentang pengukuran kinerja algoritma klasifikasi
ini akan dibahas pada bab selanjutnya.
90 │ M. Reza Faisal & Dodon T. Nugrahadi
Bab V Pengenalan & Pembagian Data
Pada bab ini akan dilakukan 2 langkah pengembangan aplikasi
klasifikasi yaitu pengenalan data dan pembagian data. Ada beberapa
dataset yang akan digunakan sebagai latihan pada langkah ini, sebagian
adalah dataset yang telah tersedia pada lingkungan R. Sebagian lagi
adalah
dataset
dari
UCI
Machine
Learning
Repository
(http://archive.ics.uci.edu/ml/). Web ini menyimpan dataset yang
umum digunakan oleh para peneliti dalam publikasi riset.
5.1 Pengenalan Data
Pada sub bab ini akan dijelaskan cara pengenalan 4 dataset, yaitu:
1. Iris, dataset ini merupakan dataset yang telah ada pada
lingkungan R.
2. Titanic, dataset ini juga merupakan dataset yang telah ada pada
lingkungan R.
3. Car evaluation adalah dataset yang dapat diunduh pada UCI
Machine Learning Repository.
4. Yeast, dataset ini juga dapat diunduh pada web UCI Machine
Learning Repository.
Pada sub bab ini dilakukan pengenalan fungsi-fungsi yang dapat
digunakan untuk pengenalan atau eksplorasi data.
Dataset Iris
Dataset iris adalah data tentang ukuran bunga dari 3 species yaitu
sentosa, versicolor dan virginica. Pada lingkungan R, dataset ini dapat
dilihat dengan menulis obyek seperti pada contoh di bawah ini pada R
console.
iris
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 91
Dataset iris juga dapat dilihat dengan menggunakan fungsi View().
View(iris)
Gambar 82. Dataset iris ditampilkan dengan fungsi View().
Dengan cara di atas dapat dilihat jumlah feature, jumlah instance dan
nilai-nilai pada setiap instance. Sedangkan struktur data dapat dilihat
dengan menggunakan fungsi str().
str(iris)
Output dari fungsi di atas adalah sebagai berikut.
'data.frame':
150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4
4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9
3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5
1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2
0.2 0.1 ...
$ Species
: Factor w/ 3 levels
"setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ..
92 │ M. Reza Faisal & Dodon T. Nugrahadi
Dari output di atas dapat dilihat informasi seperti:
1. Jumlah instance, dalam lingkungan R dikenal dengan istilah
object (obj).
2. Jumlah variable yaitu jumlah kolom data.
3. Daftar nama variable dan tipe datanya. Dan juga ditampilkan
contoh nilai-nilai pada setiap variable.
Jika ingin melihat rangkungan data dalam angka atau statisik maka
dapat digunakan fungsi summary().
summary(iris)
Output dari fungsi di atas adalah sebagai berikut.
Sepal.Length
Sepal.Width
Petal.Width
Species
Min.
:4.300
Min.
:2.000
:0.100
setosa
:50
1st Qu.:5.100
1st Qu.:2.800
Qu.:0.300
versicolor:50
Median :5.800
Median :3.000
:1.300
virginica :50
Mean
:5.843
Mean
:3.057
:1.199
3rd Qu.:6.400
3rd Qu.:3.300
Qu.:1.800
Max.
:7.900
Max.
:4.400
:2.500
Petal.Length
Min.
:1.000
Min.
1st Qu.:1.600
1st
Median :4.350
Median
Mean
Mean
:3.758
3rd Qu.:5.100
3rd
Max.
Max.
:6.900
Dari output di atas dapat dilihat nilai minimal, maksimal, media, mean
dan kuartil dari setiap kolom. Sedangkan untuk variable Species dapat
dilihat jumlah kategori/class dan jumlah instance dari setiap class
tersebut. Dari informasi di atas dapat dilihat dataset iris terdiri atas 3
class/kategori. Dan setiap kategori mempunyai jumlah instance yang
sama. Artinya akan dilakukan klasifikasi multi class dan seimbang.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 93
Untuk melihat sebaran instance setiap class dapat memanfaatkan teknik
PCA dan digambar pada ruang 2 dimensi dan 3 dimensi. Berikut adalah
kode yang digunakan.
library(pca3d)
iris.pca = prcomp(iris[,-5])
pca2d(iris.pca, group = iris[,5])
pca3d(iris.pca, group = iris[,5])
Output dari kode di atas adalah sebagai berikut.
Gambar 83. Sebaran data iris dalam 2 dimensi.
Gambar 84. Sebaran data iris dalam 3 dimensi.
94 │ M. Reza Faisal & Dodon T. Nugrahadi
Dari gambar sebaran instance di atas, terlihat jika tidak terjadi
overlapping antar ketiga class tersebut. Sehingga algoritma klasifikasi
mudah melakukan prediksi.
Jika dataset iris ingin digunakan untuk latihan klasifikasi kasus binary
class maka kita harus menghilangkan 1 class/kategori. Dua class yang
akan digunakan adalah setosa dan versicolor.
Berikut ini adalah kode yang digunakan untuk membuat obyek yang
berisi class setosa dan versicolor.
iris2class = rbind(iris[which(iris$Species ==
"setosa"),], iris[which(iris$Species == "versicolor"),])
iris2class[,5] = factor(iris2class[,5])
Rangkuman obyek iris2class adalah sebagai berikut.
Sepal.Length
Sepal.Width
Petal.Width
Species
Min.
:4.300
Min.
:2.000
:0.100
setosa
:50
1st Qu.:5.000
1st Qu.:2.800
Qu.:0.200
versicolor:50
Median :5.400
Median :3.050
:0.800
Mean
:5.471
Mean
:3.099
:0.786
3rd Qu.:5.900
3rd Qu.:3.400
Qu.:1.300
Max.
:7.000
Max.
:4.400
:1.800
Petal.Length
Min.
:1.000
Min.
1st Qu.:1.500
1st
Median :2.450
Median
Mean
Mean
:2.861
3rd Qu.:4.325
3rd
Max.
Max.
:5.100
Dan sebaran data pada ruang 2 dimensi dan 3 dimensi dapat dilihat
dengan kode berikut.
library(pca3d)
iris2class.pca = prcomp(iris2class[,-5])
pca2d(iris2class.pca, group = iris2class[,5])
pca3d(iris2class.pca, group = iris2class[,5])
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 95
Gambar 85. Sebaran data obyek iris2class pada ruang 2 dimensi.
Gambar 86. Sebaran data obyek iris2class pada ruang 3 dimensi.
96 │ M. Reza Faisal & Dodon T. Nugrahadi
Dataset Titanic
Data titanic adalah dataset yang dapat digunakan pada lingkungan R.
Dataset ini berisi data penumpung kecelakaan kapal Titanic. Dataset ini
disimpan pada obyek Titanic. Ketik obyek tersebut pada R Console.
Titanic
Output dari obyek tersebut adalah sebagai berikut.
Sex
Class Male Female
1st
0
0
2nd
0
0
3rd
35
17
Crew
0
0
, , Age = Adult, Survived = No
Sex
Class Male Female
1st
118
4
2nd
154
13
3rd
387
89
Crew 670
3
, , Age = Child, Survived = Yes
Sex
Class Male Female
1st
5
1
2nd
11
13
3rd
13
14
Crew
0
0
, , Age = Adult, Survived = Yes
Sex
Class Male Female
1st
57
140
2nd
14
80
3rd
75
76
Crew 192
20
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 97
Data di atas adalah data dengan format array 4 dimensi. Dengan
menggunakan fungsi View() maka data akan ditampilkan dalam bentuk
tabular seperti gambar di bawah ini.
View(Titanic)
1
2
3
4
5
6
7
…
27
28
29
30
31
32
Class
Sex
Age Survived Freq
1st
Male Child
No
0
2nd
Male Child
No
0
3rd
Male Child
No
35
Crew
Male Child
No
0
1st Female Child
No
0
2nd Female Child
No
0
3rd Female Child
No
17
3rd
Crew
1st
2nd
3rd
Crew
Male
Male
Female
Female
Female
Female
Adult
Adult
Adult
Adult
Adult
Adult
Yes
Yes
Yes
Yes
Yes
Yes
75
192
140
80
76
20
Gambar 87. Dataset Titanic.
Data di atas harus diolah terlebih dahulu agar dapat digunakan pada
proses klasifikasi. Pada kolom terakhir adalah Freq, yaitu jumlah
kejadian yang muncul untuk setiap row. Sebagai contoh pada baris
terakhir terdapat 20 kejadian untuk kasus (Class=Crew, Sex=Female,
Age=Aduld, Survived=Yes). Artinya perlu dibuat 20 instance untuk
nilai feature-feature dan target variable tersebut.
Untuk membuat sejumlah instance sesuai dengan nilai jumlah kejadian
maka digunakan langkah-langkah berikut ini.
Pertama adalah mengubah dataset Titanic menjadi data tabular dengan
fungsi as.data.dataframe() seperti kode di bawah ini.
data_titanic = as.data.frame(Titanic)
Selanjutnya melakukan konversi data dengan kode di bawah ini.
98 │ M. Reza Faisal & Dodon T. Nugrahadi
x = as.data.frame(Titanic)
freq_column_name = "Freq"
idx = rep.int(seq_len(nrow(x)), x[[freq_column_name]])
x[[freq_column_name]] = NULL
data_titanic = x[idx,]
Selanjutnya untuk melihat struktur obyek data_titanic dapat dilakan
dengan kode berikut.
str(data_titanic)
Output dari fungsi di atas adalah sebagai berikut.
'data.frame':
2201
$ Class
: Factor w/
3 3 3 3 3 3 3 3 3 ...
$ Sex
: Factor w/
1 1 1 1 1 1 ...
$ Age
: Factor w/
1 1 1 1 1 1 ...
$ Survived: Factor w/
1 1 1 1 ...
obs. of 4 variables:
4 levels "1st","2nd","3rd",..: 3
2 levels "Male","Female": 1 1 1 1
2 levels "Child","Adult": 1 1 1 1
2 levels "No","Yes": 1 1 1 1 1 1
Dari output di atas dapat dilihat obyek data_titanic meiliki 4 variable
dan 2201 instance. Kemudian, kode di bawah ini digunakan untuk
melihat rangkuman data.
summary(data_titanic)
Output dari fungsi summary() di atas adalah sebagai berikut.
Class
1st :325
2nd :285
3rd :706
Crew:885
Sex
Male :1731
Female: 470
Age
Child: 109
Adult:2092
Survived
No :1490
Yes: 711
Informasi lain yang dapat dilihat dari output fungsi summary() adalah:
1. Data terbagi menjadi 2 class/kategori yaitu No dan Yes.
2. Jumlah instance class No adalah 1490 dan instance class Yes
adalah 711. Ini adalah klasifikasi class tidak seimbang.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 99
Data Titanic tidak dapat dibuat grafik sebaran instance pada data space
karena tipe data feature-featurenya bukan numerik.
Dataset Yeast
Data ketiga adalah dataset Yeast. Yeast adalah mikro organisme yang
merupakan anggota jamur (fungus). Dataset Yeast dapat diunduh pada
link berikut https://archive.ics.uci.edu/ml/datasets/Yeast.
Gambar 88. Web UCI Machine Learning Repository.
Pada link ini https://archive.ics.uci.edu/ml/machine-learningdatabases/yeast/ dapat diunduh file yeast.data yang berisi dataset
yeast. Dan file yeast.names yang berisi keterangan dan deskripsi
tentang data yeast. Format kedua file ini adalah text. Setiap nilai pada
file ini dipisahkan oleh tab.
100 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 89. Isi file yeast.data.
Setelah file yeast.data diunduh, maka file ini dapat disimpan pada folder
D:\yeast. Jika ingin membuat obyek dari dataset ini, maka gunakan
fungsi setwd() untuk membuat folder D:\yeast menjadi working
directory.
setwd("D:/yeast")
Kemudian membuat obyek yeast dengan fungsi read.table().
yeast = read.table("yeast.data")
Untuk melihat obyek yeast dapat dilakukan dengan mengetik yeast
pada R console atau menggunakan fungsi View() seperti berikut.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 101
Gambar 90. Output fungsi View(yeast).
Selanjutnya akan digunakan fungsi str() dan summary() untuk
mengenal obyek yeast.
str(yeast)
Output dari fungsi di atas adalah sebagai berikut.
'data.frame':
1484 obs. of 10 variables:
$ V1 : Factor w/ 1462 levels
"6P2K_YEAST","6PGD_YEAST",..: 33 34 35 3 5 4 6 101 7 8
...
$ V2 : num 0.58 0.43 0.64 0.58 0.42 0.51 0.5 0.48 0.55
0.4 ...
$ V3 : num 0.61 0.67 0.62 0.44 0.44 0.4 0.54 0.45 0.5
0.39 ...
$ V4 : num 0.47 0.48 0.49 0.57 0.48 0.56 0.48 0.59
0.66 0.6 ...
$ V5 : num 0.13 0.27 0.15 0.13 0.54 0.17 0.65 0.2 0.36
0.15 ...
$ V6 : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
$ V7 : num 0 0 0 0 0 0.5 0 0 0 0 ...
$ V8 : num 0.48 0.53 0.53 0.54 0.48 0.49 0.53 0.58
0.49 0.58 ...
$ V9 : num 0.22 0.22 0.22 0.22 0.22 0.22 0.22 0.34
0.22 0.3 ...
102 │ M. Reza Faisal & Dodon T. Nugrahadi
$ V10: Factor w/ 10 levels "CYT","ERL","EXC",..: 7 7 7
8 7 1 7 8 7 1 ...
Sedangkan dengan menggunakan fungsi summary() berikut.
summary(yeast)
Dengan output berikut.
V1
V4
EF1A_YEAST:
Min.
:0.21
H3_YEAST :
Qu.:0.46
1st
H4_YEAST :
Median :0.51
IF4A_YEAST:
Mean
:0.50
MAT2_YEAST:
Qu.:0.55
3rd
MTC_YEAST :
Max.
:1.00
V2
V5
2
Min.
:0.1100
Min.
:0.0000
2
1st Qu.:0.4100
Qu.:0.1700
2
Median :0.4900
Median :0.2200
2
Mean
:0.5001
Mean
:0.2612
2
3rd Qu.:0.5800
Qu.:0.3200
2
Max.
:1.0000
Max.
:1.0000
V6
V7
V9
V10
Min.
:0.5000
Min.
:0.0000
:0.0000
CYT
:463
1st Qu.:0.5000
1st Qu.:0.0000
Qu.:0.2200
NUC
:429
Median :0.5000
Median :0.0000
Median :0.2200
MIT
:244
Mean
:0.5047
Mean
:0.0075
:0.2762
ME3
:163
3rd Qu.:0.5000
3rd Qu.:0.0000
Qu.:0.3000
ME2
: 51
Max.
:1.0000
Max.
:0.8300
:1.0000
ME1
: 44
V3
Min.
:0.1300
1st Qu.:0.4200
1st
Median :0.4900
Mean
:0.4999
3rd Qu.:0.5700
Max.
3rd
:1.0000
V8
Min.
:0.0000
1st Qu.:0.4800
Min.
1st
Median :0.5100
Mean
:0.4999
Mean
3rd Qu.:0.5300
3rd
Max.
Max.
:0.7300
Variable-variable yang digunakan pada algoritma klasifikasi adalah V2
sampai V10. Variable V2 sampai V9 adalah feature, sedangkan V10
adalah target variable. Pada target variable dapat dilihat sebagian
class/kategori pada dataset ini.
Untuk melihat seluruh class digunakan fungsi table() seperti berikut.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 103
table(yeast[,10])
Output fungsi ini adalah sebagai berikut.
CYT ERL EXC ME1 ME2 ME3 MIT NUC POX VAC
463
5 35 44 51 163 244 429 20 30
Dataset ini dibagi atas 10 class dengan jumlah instance yang berbedabeda untuk setiap class. Maka ini adalah kasus klasifikasi multi class
dengan data tidak seimbang.
Selanjutnya adalah membuat grafik sebaran instance dalam ruang 2
dimensi dan 3 dimensi seperti berikut ini.
library(pca3d)
yeast.pca = prcomp(yeast[,2:9])
pca2d(yeast.pca, group = yeast[,10])
pca3d(yeast.pca, group = yeast[,10])
Gambar 91. Sebaran data yeast pada ruang 2 dimensi.
104 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 92. Sebaran data yeast pada ruang 3 dimensi.
Dari gambar dapat dilihat terjadi overlapping antar class. Sehingga
kemungkinan algoritma klasifikasi yang umum digunakan akan
kesulitan menyelesaikan masalah ini.
5.2 Pembagian Data
Pada sub bab ini akan dijelaskan implementasi pembagian data pada
lingkungan R. Data yang akan digunakan adalah dataset iris dan
Titanic.
Pembagian data akan menggunakan k-fold cross validation. Hasil
pembagian data akan disimpan ke dalam sejumlah k file untuk proses
training dan sejumlah k file untuk proses pengujian. Untuk pembagian
data dengan cara leave-one-out cross validation akan diberikan
contohnya pada bab berikutnya.
Pada sub bab ini juga akan disiapkan data untuk kasus klasifikasi binary
class dan multi class.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 105
Persiapan Working Directory
Working directory adalah direktori aktif yang akan menyimpan file
kode program R dan file data. Agar latihan-latihan pada buku ini dapat
diikuti dengan mudah, maka persiapan working direktory ini
diperlukan. Direktori yang dibuat akan digunakan untuk menyimpan
seluruh file latihan yang diberikan pada buku ini.
Nama direktori yang digunakan adalah “ClassificationR”. Sebagai
contoh, direktori ini disimpan pada drive D:. Selanjutnya gunakan
perintah setwd() untuk menunjuk folder D:\ ClassificationR sebagai
working directory.
setwd("D:/ClassificationR")
Kode di atas harus ditulis disetiap file kode program R, agar fungsifungsi dalam file kode program dapat membaca file data pada working
directory. Atau menulis dan menyimpan file output dari fungsi ke
dalam working directory.
Data untuk Klasifikasi Binary Class
Dataset Iris
Untuk kasus klasifikasi binary class maka digunakan data yang
disimpan pada obyek iris2class. Obyek iris2class memiliki 100 instance
yang terdiir atas 50 instance class setosa dan 50 instance class versicolor.
Jika pembagian data menggunakan 5-folds cross validation maka
gambar di bawah ini adalah ilustrasi pembagian data.
Part 1
Part 2
Part 3
Part 4
Part 5
10 setosa
10 setosa
10 setosa
10 setosa
10 setosa
10 versicolor
10 versicolor
10 versicolor
10 versicolor
10 versicolor
Gambar 93. Pembagian dataset iris2class.
106 │ M. Reza Faisal & Dodon T. Nugrahadi
Jika part 1 menjadi data testing, maka sisanya akan menjadi data
trianing. Jika part 2 menjadi data testing maka sisanya akan menjadi
data training. Begitu seterusnya.
Dari keterangan di atas maka dapat dibuat kode program sederhana
seperti berikut.
iris2class.kfold.crossvalidation.R
setwd("D:/ClassificationR")
setosa = iris2class[which(iris2class$Species ==
"setosa"),]
versicolor = iris2class[which(iris2class$Species ==
"versicolor"),]
#part 1
iris2class.test.1 = rbind(setosa[1:10,],
versicolor[1:10,])
iris2class.train.1 = rbind(setosa[11:50,],
versicolor[11:50,])
write.csv(iris2class.test.1, "iris2class.test.1.csv",
row.names = FALSE)
write.csv(iris2class.train.1, "iris2class.train.1.csv",
row.names = FALSE)
#part 2
iris2class.test.2 = rbind(setosa[11:20,],
versicolor[11:20,])
iris2class.train.2 = rbind(setosa[c(1:10,21:50),],
versicolor[c(1:10,21:50),])
write.csv(iris2class.test.2, "iris2class.test.2.csv",
row.names = FALSE)
write.csv(iris2class.train.2, "iris2class.train.2.csv",
row.names = FALSE)
#part 3
iris2class.test.3 = rbind(setosa[21:30,],
versicolor[21:30,])
iris2class.train.3 = rbind(setosa[c(1:20,31:50),],
versicolor[c(1:20,31:50),])
write.csv(iris2class.test.3, "iris2class.test.3.csv",
row.names = FALSE)
write.csv(iris2class.train.3, "iris2class.train.3.csv",
row.names = FALSE)
#part 4
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 107
iris2class.test.4 = rbind(setosa[31:40,],
versicolor[31:40,])
iris2class.train.4 = rbind(setosa[c(1:30,41:50),],
versicolor[c(1:30,41:50),])
write.csv(iris2class.test.4, "iris2class.test.4.csv",
row.names = FALSE)
write.csv(iris2class.train.4, "iris2class.train.4.csv",
row.names = FALSE)
#part 5
iris2class.test.5 = rbind(setosa[41:50,],
versicolor[41:50,])
iris2class.train.5 = rbind(setosa[1:40,],
versicolor[1:40,])
write.csv(iris2class.test.5, "iris2class.test.5.csv",
row.names = FALSE)
write.csv(iris2class.train.5, "iris2class.train.5.csv",
row.names = FALSE)
Hasilnya adalah 10 file seperti pada gambar di bawah ini.
Gambar 94. Output dari kode program iris2class.5fold.crossvalidation.R
108 │ M. Reza Faisal & Dodon T. Nugrahadi
Dataset Titanic
Dataset Titanic memiliki 2201 instance yang terdiri atas 1490 instance
class Yes dan 711 instance class no. Pembagian data ini akan
menggunakan 5-folds cross validation. Pembagian data digambarkan di
bawah ini.
Part 1
Part 2
Part 3
Part 4
Part 5
142 Yes
142 Yes
142 Yes
142 Yes
143 Yes
298 No
298 No
298 No
298 No
298 No
Gambar 95. Pembagian data titanic.
Untuk membagi data titanic menjadi 5 bagian digunakan kode berikut
ini.
titanic.kfold.crossvalidation.R
setwd("D:/ClassificationR")
titanic2class = data_titanic[sample(nrow(data_titanic),
(nrow(data_titanic))),]
yes = titanic2class[which(titanic2class$Survived ==
"Yes"),]
no = titanic2class[which(titanic2class$Survived ==
"No"),]
#part 1
titanic2class.test.1 = rbind(yes[1:142,], no[1:298,])
titanic2class.train.1 = rbind(yes[143:711,],
no[299:1490,])
write.csv(titanic2class.test.1,
"titanic2class.test.1.csv", row.names = FALSE)
write.csv(titanic2class.train.1,
"titanic2class.train.1.csv", row.names = FALSE)
#part 2
titanic2class.test.2 = rbind(yes[143:284,],
no[299:596,])
titanic2class.train.2 = rbind(yes[c(1:142,285:711),],
no[c(1:298,597:1490),])
write.csv(titanic2class.test.2,
"titanic2class.test.2.csv", row.names = FALSE)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 109
write.csv(titanic2class.train.2,
"titanic2class.train.2.csv", row.names = FALSE)
#part 3
titanic2class.test.3 = rbind(yes[285:426,],
no[597:894,])
titanic2class.train.3 = rbind(yes[c(1:284,427:711),],
no[c(1:598,895:1490),])
write.csv(titanic2class.test.3,
"titanic2class.test.3.csv", row.names = FALSE)
write.csv(titanic2class.train.3,
"titanic2class.train.3.csv", row.names = FALSE)
#part 4
titanic2class.test.4 = rbind(yes[427:568,],
no[895:1192,])
titanic2class.train.4 = rbind(yes[c(1:426,569:711),],
no[c(1:894,1193:1490),])
write.csv(titanic2class.test.4,
"titanic2class.test.4.csv", row.names = FALSE)
write.csv(titanic2class.train.4,
"titanic2class.train.4.csv", row.names = FALSE)
#part 5
titanic2class.test.5 = rbind(yes[569:711,],
no[1193:1490,])
titanic2class.train.5 = rbind(yes[1:568,], no[1:1192,])
write.csv(titanic2class.test.5,
"titanic2class.test.5.csv", row.names = FALSE)
write.csv(titanic2class.train.5,
"titanic2class.train.5.csv", row.names = FALSE)
Pada baris kedua digunakan fungsi sample(), tujuannya untuk
mengacak urutan data. Untuk kasus data Titanic, pengacakan ini akan
membuat sebaran data terbagi merata saat data dibagi menjadi data
training dan data testing.
Output dari kode program di atas adalah 8 file. Gambar di bawah ini
adalah daftar file-file tersebut.
110 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 96. Output dari kode program titanic.kfold.crossvalidation.R
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 111
Data untuk Klasifikasi Multi Class
Dataset Iris
Untuk kasus klasifikasi multi class, maka seluruh dataset iris dapat
digunakan. Pembagian data ini menggunakan 5 folds cross validation.
Karena dataset ini memiliki 3 class maka data ini dapat dibagi seperti
pada gambar di bawah ini.
Part 1
Part 2
Part 3
Part 4
Part 5
10 setosa
10 setosa
10 setosa
10 setosa
10 setosa
10 versicolor
10 versicolor
10 versicolor
10 versicolor
10 versicolor
10 virginica
10 virginica
10 virginica
10 virginica
10 virginica
Gambar 97. Pembagian data iris.
Untuk membagi data seperti gambar tersebut maka digunakan kode di
bawah ini.
iris.kfold.crossvalidation.R
setwd("D:/ClassificationR")
setosa = iris[which(iris$Species == "setosa"),]
versicolor = iris[which(iris$Species == "versicolor"),]
virginica = iris[which(iris$Species == "virginica"),]
#part 1
iris.test.1 = rbind(setosa[1:10,], versicolor[1:10,],
virginica[1:10,])
iris.train.1 = rbind(setosa[11:50,], versicolor[11:50,],
virginica[11:50,])
write.csv(iris.test.1, "iris.test.1.csv", row.names =
FALSE)
write.csv(iris.train.1, "iris.train.1.csv", row.names =
FALSE)
#part 2
iris.test.2 = rbind(setosa[11:20,], versicolor[11:20,],
virginica[11:20,])
iris.train.2 = rbind(setosa[c(1:10,21:50),],
versicolor[c(1:10,21:50),], virginica[c(1:10,21:50),])
write.csv(iris.test.2, "iris.test.2.csv", row.names =
FALSE)
112 │ M. Reza Faisal & Dodon T. Nugrahadi
write.csv(iris.train.2, "iris.train.2.csv", row.names =
FALSE)
#part 3
iris.test.3 = rbind(setosa[21:30,], versicolor[21:30,],
virginica[21:30,])
iris.train.3 = rbind(setosa[c(1:20,31:50),],
versicolor[c(1:20,31:50),], virginica[c(1:20,31:50),])
write.csv(iris.test.3, "iris.test.3.csv", row.names =
FALSE)
write.csv(iris.train.3, "iris.train.3.csv", row.names =
FALSE)
#part 4
iris.test.4 = rbind(setosa[31:40,], versicolor[31:40,],
virginica[31:40,])
iris.train.4 = rbind(setosa[c(1:30,41:50),],
versicolor[c(1:30,41:50),], virginica[c(1:30,41:50),])
write.csv(iris.test.4, "iris.test.4.csv", row.names =
FALSE)
write.csv(iris.train.4, "iris.train.4.csv", row.names =
FALSE)
#part 5
iris.test.5 = rbind(setosa[41:50,], versicolor[41:50,],
virginica[41:50,])
iris.train.5 = rbind(setosa[1:40,], versicolor[1:40,],
virginica[1:40,])
write.csv(iris.test.5, "iris.test.5.csv", row.names =
FALSE)
write.csv(iris.train.5, "iris.train.5.csv", row.names =
FALSE)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 113
Bab VI Rancangan Aplikasi Klasifikasi
6.1 Apa Langkah Selanjutnya?
Pada bab 5 telah dilakukan 2 dari 4 langkah-langkah pengembangan
aplikasi klasifikasi, yaitu:
1. Pengenalan data.
2. Pembagian data dengan k-fold cross validation.
Selanjutnya pembahasan tentang implementasi algoritma klasifikasi
akan dibagi menjadi bab-bab terpisah. Masing-masing bab akan
membahas sebuah algoritma klasifikasi, yaitu:
1.
2.
3.
4.
K-Nearest Neighbors (KNN).
Support Vector Machine (SVM).
Naïve Bayes.
Decision Tree.
Pada masing-masing bab akan dijelaskan bagaimana implementasi
algoritma tersebut pada lingkungan R. Kemudian akan diperlihatkan
implementasi teknik-teknik pengukuran kinerja algoritma klasifikasi
yang telah dibahas pada bab Pengantar Klasifikasi, sub bab Pengukuran
Kinerja Algoritma Klasifikasi.
6.2 Rancangan Aplikasi
Tahap implementasi dan pengukuran kinerja algoritma klasifikasi pada
buku ini adalah dalam bentuk aplikasi sederhana. Rancangan berupa
pseudocode atau flow chart sederhana. Ada 3 rancangan aplikasi yang
dipaparkan pada sub bab ini, yaitu:
1. Rancangan aplikasi klasifikasi dengan 1 sub data, tanpa
perhitungan kinerja algoritma.
2. Rancangan aplikasi klasifikasi dengan 1 sub data, dengan
perhitungan kinerja algoritma.
3. Rancangan aplikasi klasifikasi menggunakan seluruh data 5folds cross validation, dengan perhitungan kinerja algoritma.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 115
Rancangan Aplikasi 1
Aplikasi ini hanya akan menggunakan 1 sub data saja, yaitu 1 file data
training dan 1 file data testing. kemudian melakukan implementasi
algoritma klasifikasi.
Algoritma klasifikasi akan dilatih dengan
menggunakan data training. Setelah proses pembelajaran selesai, maka
akan dilakukan prediksi terhadap data testing.
Tujuan pembuatan aplikasi ini adalah agar pembaca belajar mengenal
dan menggunakan fungsi-fungsi untuk klasifikasi pada lingkuran R.
Gambar berikut ini adalah alur proses yang akan dilakukan aplikasi ini.
data.training = read(file_training_data)
data.testing = read(file_testing_data)
model = training(data.training)
predict(model, data.testing)
Gambar 98. Alur proses aplikasi 1.
Keterangan:
1. Proses I, membaca file training dan file testing.
2. Proses II, melakukan pembelajaran dengan menggunakan fungsi
pada lingkungan R. Fungsi yang akan digunakan akan berbedabeda.
Implementasi algoritma klasifikasi tertentu akan
menggunakan fungsi tertentu pula.
3. Proses III, melakukan prediksi data testing dengan
menggunakan model hasil pembelajaran.
116 │ M. Reza Faisal & Dodon T. Nugrahadi
Rancangan Aplikasi 2
Pada rancangan aplikasi kedua ini memiliki flow chart seperti flow chart
aplikasi pertama, tetapi dengan tambahan perhitungan kinerja model
pembelajaran.
data.training = read(file_training_data)
data.testing = read(file_testing_data)
model = training(data.training)
predict(model, data.testing)
performance(prediction_result, data.testing)
Gambar 99. Alur proses aplikasi 2.
Tujuan pembuatan aplikasi ini adalah agar pembaca mengenal dan
mampu menggunakan fungsi-fungsi untuk menghitung kinerja
Keterangan:
1. Proses I sampai dengan proses III sama seperti keterangan pada
flow chart aplikasi 1.
2. Proses IV, akan melakukan perhitungan kinerja model dalam
melakukan prediksi.
Rancangan Aplikasi 3
Pada aplikasi ketiga ini akan digunakan seluruh data hasil pembagian
data pada cross validation. Karena pembagian data menggunakan 5Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 117
folds cross validation, maka proses-proses pada flow chart aplikasi 2
akan dilakukan sebanyak 5 kali. Hasil akhir dari aplikasi 3 adalah ratarata dari seluruh kinerja klasifikasi.
data.training = read(file_training_data)
data.testing = read(file_testing_data)
model = training(data.training)
predict(model, data.testing)
prediction_result = performance(prediction_result, data.testing)
all_result = all_result + prediction_result
yes
is data exist?
no
average_result = all_result / N
Gambar 100. Alur proses aplikasi 3.
118 │ M. Reza Faisal & Dodon T. Nugrahadi
Jika pada aplikasi 1 dan aplikasi 2 bertujuan untuk memperkenalkan
fungsi klasifikasi dan fungsi untuk menghitung kinerja algoritma
klasifikasi saja. Maka pada aplikasi 3 adalah aplikasi klasifikasi
sebenarnya dengan alur proses yang lengkap. Alur proses pada aplikasi
3 adalah alur proses yang umum digunakan pada kasus klasifikasi. Jadi
alur proses seperti ini akan sering ditemui pada publikasi jurnal,
prosiding seminar, skripsi atau tesis.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 119
Bab VII K-Nearest Neighbors (KNN)
Algoritma K-Nearest Neighbors memprediksi kategori instance baru
berdasarkan informasi dari instance-instance terdekat dengannya atau
tetangga terdekatnya.
7.1 Cara Kerja
Gambar 101. Cara kerja algoritma K-Nearest Neighbors (KNN).
Cara kerja algoritma ini adalah sebagai berikut:
1. Misal A adalah bagian dari data testing. A adalah instance baru
yang belum diketahui nilai kategori/class.
2. Cari jarak antara A dengan seluruh instance dari data training.
3. Urutkan seluruh jarak tersebut dari nilai terkecil sampai terbesar.
4. Jika nilai K = 5 maka ambil 5 instance yang terdekat dengan A.
5. Periksa kategori/class dari ke-5 instance tersebut. Dan tentukan
nilai kategori/class A berdasarkan voting suara terbanyak. Jika
3 dari 5 instance adalah kategori/class “biru” maka
kategori/class A adalah “biru”.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 121
Algoritma ini hanya dapat digunakan jika data yang digunakan
mempunyai feature-feature bernilai numerik. Data dengan feature
bernilai numerik digunakan untuk menentukan jarak antara instance
baru dengan instance pada data training. Ada beberapa teknik yang
dapat digunakan untuk menghitung jarak, salah satunya adalah
euclidean distance.
7.2 Persiapan
Implementasi algoritma KNN pada lingkungan R dapat dilakukan
dengan menggunakan fungsi knn() dan kknn(). Fungsi knn() adalah
bagian dari package class. Package ini telah tersedia pada lingkungan
R. Sedangkan fungsi kknn() adalah bagian dari package kknn.
Pada buku ini hanya akan diterangkan penggunaan fungsi kknn().
Langkah pertama sebelum menggunakan fungsi ini adalah menginstall
package kknn. Berikut ini adalah fungsi yang digunakan untuk
menginstall package kknn.
install.packages("kknn")
7.3 Sintaks
Sintaks fungsi kknn() adalah sebagai berikut.
kknn(formula, train, test, k, distance, kernel)
Keterangan:
1.
2.
3.
4.
5.
formula: formula untuk menentukan target variable.
train: data training.
test: data testing.
k: jumlah tetangga.
distance: parameter untuk Minkowski distance.
122 │ M. Reza Faisal & Dodon T. Nugrahadi
6. kernel: nama kernel atau fungsi yang digunakan. Ada beberapa
pilihan kernel yaitu:
 triangular.
 epanechnikov.
 biweight.
 triweight.
 cos.
 inv.
 gaussian.
 rank.
 optimal.
 rectangular.
7.4 Implementasi
Pada sub bab ini akan dijelaskan penggunaan fungsi kknn() dengan cara
membuat kode program sederhana sesuai dengan alur proses yang telah
dijelaskan pada bab Rancangan Aplikasi Klasifikasi sub bab Rancangan
Aplikasi.
Aplikasi 1
Berikut ini adalah kode lengkap aplikasi 1 yang menggunakan fungsi
kknn().
library(kknn)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2 & 3
#membuat model & melakukan prediksi
model = kknn(Species~., data.training, data.test[,-5], k
= 5, distance = 1, kernel = "triangular")
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 123
Baris pertama berfungsi untuk memuat package kknn, agar fungsi
kknn() dapat digunakan. Kemudian pada blok proses 1 adalah proses
membaca file data training yang disimpan pada file iris2class.train.1.csv.
dan membaca file data testing pada file iris2class.test.1.csv. Isi file
iris2class.train.1.csv ditampung pada obyek data.training. Sedangkan
isi file iris2class.test.1.csv disimpan pada obyek data.test.
Pada blok proses 2 & 3 adalah contoh penggunaan fungsi kknn().
Berikut adalah keterangan parameter-parameter yang digunakan pada
fungsi ini:






Parameter pertama adalah “Species~.”. Parameter ini adalah
formula untuk menentukan variable atau kolom yang menjadi
target variable. Pada dataset iris, yang menjadi target variable
adalah “Species”. Selain nama target variable juga perlu
ditambahkan karakter “~” dan “.” untuk melengkapi formula.
Parameter kedua berisi obyek data.training yang terdiri atas
feature-feature dan target variable.
Pameter ketiga berisi obyek data.testing[,-5], artinya parameter
ini hanya berisi data dengan feature-feature saja, tanpa target
variable.
Parameter keempat adalah berisi berapa tetangga yang ingin
digunakan. Pada contoh di atas digunakan 5 tetangga.
Parameter kelima adalah nilai untuk Minkowski distance.
Parameter keenam adalah kernel atau fungsi yang digunakan
yaitu triangular. Kernel ini berfungsi untuk memprediksi class
untuk instance baru dengan cara melakukan voting tetangga
terdekat terbanyak dan pembobotan. Jika ingin menggunakan
kernel yang hanya memperhitungkan class instance baru dengan
voting tetangga terdekat saja maka dapat digunakan kernel
rectangular.
Obyek model adalah output dari fungsi kknn(). Sehingga obyek ini
menyimpan nilai-nilai hasil perhitungan dari fungsi kknn(). Nilai-nilai
pada obyek ini adalah:


fitted.values berisi daftar class yang merupakan hasil prediksi
untuk setiap instance.
CL adalah matrix yang berisi class dari instance tetangga
terdekat.
124 │ M. Reza Faisal & Dodon T. Nugrahadi




W adalah matrix yang berisi nilai bobot dengan instance
tetangga terdekat.
D adalah matrix yang berisi nilai jarak dengan instance tetangga
terdekat.
C adalah matrix yang berisi index dari instance tetangga
terdekat.
prob adalah matrix yang berisi kemungkinan (probabilitas)
prediksi terhadap suatu class.
Untuk melihat hasil prediksi maka digunakan kode seperti pada contoh
di bawah ini.
model$fitted.values
Output dari kode di atas adalah sebagai berikut.
[1] setosa
setosa
setosa
setosa
setosa
setosa
setosa
setosa
setosa
setosa
[11] versicolor versicolor versicolor versicolor
versicolor versicolor versicolor versicolor versicolor
versicolor
Levels: setosa versicolor
Untuk mengetahui ketepatan hasil prediksi maka nilai di atas dapat
dibandingkan dengan nilai class sebenarnya dari setiap instance.
Berikut adalah cara untuk membandingkan kedua nilai tersebut.
comparation_result = cbind(prediction =
as.character(model$fitted.values), actual =
as.character(data.test[,5]))
comparation_result
Obyek
comparation_result
menyimpan
perbandingan
nilai
model$fitted.values yang berisi hasil prediksi dengan data.test[,5] yang
berisi nilai target variable atau class dari setiap instance. Output dari
obyek comparation_result adalah sebagai berikut.
prediction
[1,] "setosa"
[2,] "setosa"
[3,] "setosa"
actual
"setosa"
"setosa"
"setosa"
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 125
[4,]
[5,]
[6,]
[7,]
[8,]
[9,]
[10,]
[11,]
[12,]
[13,]
[14,]
[15,]
[16,]
[17,]
[18,]
[19,]
[20,]
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
Jika membandingkan antara nilai prediction dan actual pada setiap baris
di atas maka dapat diketahui bahwa model dapat memprediksi class
untuk semua instance secara tepat.
Aplikasi 2
Untuk menghitung kinerja algoritma klasifikasi digunakan fungsi
confusionMatrix() dari package caret. Jika package ini belum ada pada
lingkungan R maka dapat diinstall terlebih dahulu dengan perintah
berikut ini.
install.packages("caret")
Berikut ini adalah kode lengkap aplikasi 2 yang menggunakan fungsi
kknn().
library(kknn)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
126 │ M. Reza Faisal & Dodon T. Nugrahadi
#membuat model & melakukan prediksi
model = kknn(Species~., data.training, data.test[,-5], k
= 5, distance = 1, kernel = "triangular")
#menghitung kinerja
performance.value = confusionMatrix(model$fitted.values,
data.test[,5])
print(performance.value)
Pada kode di atas ada penambahan 3 baris. Penambahan pada baris
kedua yaitu penggunaan fungsi library(caret) untuk memuat package
caret. Penambahan berikutnya adalah pada 2 baris terakhir yaitu
penggunaan fungsi confusionMatrix(). Sintaks dari fungsi ini adalah
sebagai berikut
confusionMatrix(prediction, actual)
Keterangan:
1. prediction adalah daftar nilai yang berisi hasil prediksi.
2. actual adalah daftar nilai yang berisi nilai class sebenarnya dari
instance pada data testing.
Pada kode di atas output dari fungsi confusionMatrix ditampung pada
obyek performance.value. Untuk melihat hasil perhitungan kinerja
dapat dilakukan dengan memanggil obyek performance.value atau
menggunakan fungsi print() untuk menulis ke layar.
Berikut adalah nilai dari obyek performance.value.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor
setosa
10
0
versicolor
0
10
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
1
(0.8316, 1)
0.5
9.537e-07
Kappa : 1
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 127
Mcnemar's Test P-Value : NA
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0
1.0
1.0
1.0
0.5
0.5
0.5
1.0
'Positive' Class : setosa
Dari output di atas ada beberapa informasi yang didapat, yaitu:
1. hal pertama yang perlu diperhatikan pada output di atas adalah
baris terakhir. Pada baris terakhir disebutkan setosa adalah class
positif. Artinya nilai-nilai seperti True Positive (TP) dan False
Positive (FP) dan nilai-nilai perhitungan yang melibatkan TP dan
FP berhubungan dengan class setosa.
2. Pada confusion matrix dapat dilihat 4 informasi yaitu:
 Ada 10 instance class setosa yang diprediksi sebagai class
setosa.
 Ada 0 instance class setosa yang diprediksi sebagai class
versicolor.
 Ada 0 instance class versicolor yang diprediksi sebagai
class setosa.
 Ada 10 instance class versicolor yang diprediksi sebagai
class versicolor.
3. Nilai accuracy adalah 1.
4. Nilai sensitivity adalah 1.
5. Nilai specificity adalah 1.
6. Pos pred value atau nilai kebenaran prediksi class positif adalah
1.
7. Neg pred value atau nilai kebenaran prediksi class negatif adalah
1.
Jika ingin mendapatkan hasil perhitungan kinerja yang digambarkan ke
bentuk grafik Receiver Operating Characteristic (ROC) maka dapat
digunakan fungsi-fungsi dari package ROCR. Jika package ini belum
ada pada lingkungan R maka dapat diinstall dengan perintah berikut.
128 │ M. Reza Faisal & Dodon T. Nugrahadi
install.packages("ROCR")
Berikut ini adalah kode lengkap menggambar grafik ROC dan
menghitung AUC.
library(kknn)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#membuat model & melakukan prediksi
model = kknn(Species~., data.training, data.test[,-5], k
= 5, distance = 1, kernel = "triangular")
#menghitung kinerja
roc.prediction =
prediction(as.numeric(as.factor(model$fitted.values)),
as.numeric(as.factor(data.test[,5])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Fungsi pertama dari package ROCR yang digunakan di atas adalah
fungsi prediction(). Sintaks dari fungsi ini adalah sebagai berikut.
output_object_name = prediction(prediction_value,
actual_value)
Fungsi ini akan menghitung kinerja algoritma klasifikasi dengan
menggunakan dua nilai input. Nilai input yang pertama adalah
prediction_value, nilai ini berisi hasil prediksi dari algoritma klasifikasi
(classifier). Nilai input kedua adalah actual_value, nilai ini adalah nilainilai target variable. Output dari fungsi ini dapat disimpan pada suatu
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 129
obyek, pada contoh kode di atas obyek yang digunakan untuk
menyimpan adalah roc.prediction.
Fungsi yang kedua adalah performance(). Sintaks dari fungsi ini adalah
sebagai berikut.
output_object_name =
performance(prediction_output_object, value1, value2)
Sintaks
ini
memiliki
3
input,
input
pertama
adalah
prediction_output_object, yaitu obyek yang menampung keluaran dari
fungsi prediction(). Sedangkan sedangkan value1 dan value2 adalah
nilai perhitungan kinerja yang ingin dibandingkan.
output_object_name =
performance(prediction_output_object, value1)
Sedangkan sintaks kedua hanya memiliki 2 input saja. Input pertama
adalah adalah prediction_output_object, yaitu obyek yang menampung
keluaran dari fungsi prediction(). Dan input kedua adalah nilai kinerja
yang ingin dihitung.
Contoh penggunaan sintaks pertama adalah sebagai berikut. Pada di
atas akan dibandingkan nilai True Positive Rate (TPR) dan False Positive
Rate (FPR), sehingga pada input kedua dan ketiga bernilai “tpr” dan
“fpr”.
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
Jika ingin melihat isi output dari fungsi performance() ini maka dapat
dilakukan dengan memanggil obyek roc.tpr.fpr pada R Console.
Berikut adalah contoh isi output obyek tersebut.
An object of class "performance"
Slot "x.name":
[1] "False positive rate"
Slot "y.name":
[1] "True positive rate"
130 │ M. Reza Faisal & Dodon T. Nugrahadi
Slot "alpha.name":
[1] "Cutoff"
Slot "x.values":
[[1]]
[1] 0 0 1
Slot "y.values":
[[1]]
[1] 0 1 1
Slot "alpha.values":
[[1]]
[1] Inf
2
1
Contoh penggunaan sintaks pertama adalah seperti contoh di bawah ini.
Tujuan kode di bawah ini adalah untuk menghitung luas Area Under
the Curve (AUC) saja. Sehingga pada input kedua bernilai “auc”.
roc.auc = performance(roc.prediction,"auc")
Berikut ini adalah isi dari obyek roc.auc.
> roc.auc
An object of class "performance"
Slot "x.name":
[1] "None"
Slot "y.name":
[1] "Area under the ROC curve"
Slot "alpha.name":
[1] "none"
Slot "x.values":
list()
Slot "y.values":
[[1]]
[1] 1
Slot "alpha.values":
list()
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 131
Selain nilai “tpr”, “fpr” dan “auc”, fungsi performance() juga dapat
digunakan menghitung kinerja yang lain. Berikut adalah nilai-nilai
yang dapat digunakan pada fungsi ini:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
acc: accuracy.
err: error rate.
fpr: false positive rate.
fall: fallout, nilai ini sama dengan fpr.
tpr: true positive rate.
rec: recall sama dengan tpr.
sens: sensitivity sama dengan tpr.
fnr: false negative rate.
miss: nilai ini sama dengan fnr.
tnr: true negative rate.
spec: specificity sama dengan tnr.
ppv: positive predictive value.
prec: precision sama dengan ppv.
npv: negative predictive value.
pcfall: prediction-conditioned fallout.
pcmiss: prediction-conditioned miss.
rpp: rate of positive preditions.
rnp: rate of negative prediction.
phi: phi correlation coefficient.
mat: Matthew correlation coeficient.
mi: mutual information.
chisq: chi square test statistic.
odds: odds ratio.
lift: lift value.
f: precision-recall F measure.
rch: ROC convex hull.
auc: area under the curve.
prbe: precision-recall break-even point.
cal: calibration error.
mxe: mean cross-entropy.
rmse: root-mean-squared error.
Dan masih banyak nilai lain yang dapat digunakan. Untuk lebih
lengkapnya dapat menggunakan fungsi help() seperti contoh di bawah
ini.
132 │ M. Reza Faisal & Dodon T. Nugrahadi
library(ROCR)
help("performance")
Fungsi selanjutnya adalah plot() yang berguna untuk menggambar
output dari fungsi performance(). Sintaks dari fungi ini adalah sebagai
berikut.
plot(performance_output_object, options1, option2, …)
Input pertama adalah obyek yang menyimpan output dari fungsi
performance(). Sedangkan input kedua, ketiga dan seterusnya adalah
opsi yang digunakan untuk menggambar grafik.
Sebagai contoh seperti pada baris di bawah ini. Dapat dilihat contoh
opsi pada input kedua dan ketiga. Sedangkan fungsi abline() digunakan
untuk mengambar garis dari titik 0,0 ke 1,1.
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
Berikut adalah grafik dari fungsi plot() ini.
Gambar 102. Grafik ROC Aplikasi 2 KNN.
Selanjutnya adalah menulis luas AUC dengan cara berikut ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 133
print(paste("Luas AUC:", roc.auc@y.values))
Dari hasil perhitungan pada kasus di atas maka di dapat luas AUC
sebagai berikut.
> print(paste("Luas AUC:", roc.auc@y.values))
[1] "Luas AUC: 1"
Dengan melihat grafik ROC di atas dan nilai luas AUC adalah 1 maka
dapat disimpulkan kinerja aplikasi dengan menggunakan algoritma
KNN ini mendapatkan nilai maksimum untuk kasus klasifikasi data iris.
Alasan kenapa kinerja aplikasi di atas disimpulkan dapat bekerja
maksimal dapat dilihat penjelasannya pada bab Pengantar Klasifikasi,
sub bab Receiver Operation Character (ROC).
Aplikasi 3
Binary Classification
Pada aplikasi 3 bertujuan untuk memperlihatkan implementasi
rancangan aplikasi 3 yang telah dijelaskan pada bab 6. Pada aplikasi 3
ini diperlihatkan bagaimana implementasi 5-fold cross validation. Data
yang akan digunakan adalah data yang telah dipersiapkan pada bab 5.
Data yang digunakan adalah dataset iris yang memiliki 2 class saja.
Pada aplikasi 3 ini menghitung nilai-nilai berikut ini:
1.
2.
3.
4.
Akurasi rata-rata.
Sensitivity rata-rata.
Specificity rata-rata.
Luas AUC rata-rata.
Selain itu aplikasi ini juga akan menggambar perhitungan ROC dari
setiap data dalam sebuah grafik.
Berikut ini adalah kode lengkap dari aplikasi 3.
library(kknn)
library(caret)
library(ROCR)
134 │ M. Reza Faisal & Dodon T. Nugrahadi
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
#main program - start
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris2class.train.",i,".csv"))
data.test =
read.csv(paste0("iris2class.test.",i,".csv"))
#membuat model & melakukan prediksi
model = kknn(Species~., data.training, data.test[,-5],
k = 5, distance = 1, kernel = "triangular")
#menghitung kinerja
performance.value =
confusionMatrix(model$fitted.values, data.test[,5])
roc.prediction =
prediction(as.numeric(as.factor(model$fitted.values)),
as.numeric(as.factor(data.test[,5])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
#menggambar ROC
if(i > 1) {
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
} else {
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
}
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity = a_sensitivity +
performance.value$byClass[1]
a_specificity = a_specificity +
performance.value$byClass[2]
a_auc = a_auc + as.numeric(roc.auc@y.values)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 135
}
#main program - end
print(paste("average
print(paste("average
print(paste("average
print(paste("average
accuracy:", a_accuracy/i))
sensitivity:", a_sensitivity/i))
specificity:", a_specificity/i))
AUC:", a_auc/i))
Pada blok “#variables” terdapat daftar variable yang digunakan untuk
menyimpan nilai accuracy, sensitivity, specificity dan auc.
Setelah itu dapat dilihat pengulangan sebanyak 5 kali pada blok “#main
program”. Di dalam blok ini terdapat 5 proses yaitu:
1. Membaca data training dan data testing dengan nilai i yang akan
berubah pada setiap pengulangan. Sehingga file yang dibaca
pada setiap pengulangan akan berbeda-beda.
2. Membuat model dan melakukan prediksi dengan menggunakan
fungsi kknn().
3. Menghitung
kinerja
dengan
menggungkan
fungsi
confusionMatrix() dari package caret, fungsi prediction() dan
performance() dari package ROCR.
4. Mengambar ROC. Pada pengulangan pertama yaitu ketika i = 1,
kode yang dieksekusi adalah dua baris ini.
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
Sedangkan untuk pengulangan kedua sampai kelima, kode yang
dieksekusi adalah baris berikut.
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
Pada baris di atas digunakan opsi add = TRUE. Opsi ini
bertujuan untuk menambahkan kurva ROC pada pada grafik
yang telah digambar pada pengulangan pertama.
5. Menghitung jumlah kinerja accuracy, sensitivity, specificity dan
auc.
Setelah pengulangan selesai maka variable a_accuracy, a_sensitivity,
a_specificity dan a_auc berisi jumlah setiap kinerja yang dihitung pada
setiap pengulangan. Sehingga untuk mendapatkan nilai rata-rata maka
setiap nilai tersebut harus dibagi dengan jumlah pengulangan yaitu i.
Pada kasus, di akhir pengulangan nilai i adalah 5.
136 │ M. Reza Faisal & Dodon T. Nugrahadi
Berikut ini adalah output dari aplikasi 3 ini.
"average
"average
"average
"average
accuracy: 1"
sensitivity: 1"
specificity: 1"
AUC: 1"
Dan berikut ini adalah grafik ROC gabungan.
Gambar 103. Grafik ROC gabungan Aplikasi 3 KNN.
Multiclass Classification
Pada sub bab ini menggunakan dataset iris dengan 3 class. Untuk kasus
klasifikasi multiclass perhitungan kinerja hanya menggunakan fungsi
confusionMatrix saja. Sehingga kinerja rata-rata yang dapat dihitung
adalah accuracy saja. Karena ROC hanya digunakan untuk kasus
klasifikasi 2 class (binary classification) maka pada sub bab ini tidak bisa
dibuat grafik ROC dan perhitungan luas AUC.
Berikut adalah kode lengkap penyelesaikan kasus ini.
library(kknn)
library(caret)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 137
a_sensitivity_setosa = 0
a_specificity_setosa = 0
a_sensitivity_versicolor = 0
a_specificity_versicolor = 0
a_sensitivity_virginica = 0
a_specificity_virginica = 0
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris.train.",i,".csv"))
data.test = read.csv(paste0("iris.test.",i,".csv"))
#membuat model & melakukan prediksi
model = kknn(Species~., data.training, data.test[,-5],
k = 5, distance = 1, kernel = "triangular")
#menghitung kinerja
performance.value =
confusionMatrix(model$fitted.values, data.test[,5])
print("-----------------------------------------------")
print(performance.value)
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity_setosa = a_sensitivity_setosa +
performance.value$byClass[1]
a_specificity_setosa = a_specificity_setosa +
performance.value$byClass[4]
a_sensitivity_versicolor = a_sensitivity_versicolor +
performance.value$byClass[2]
a_specificity_versicolor = a_specificity_versicolor +
performance.value$byClass[5]
a_sensitivity_virginica = a_sensitivity_virginica +
performance.value$byClass[3]
a_specificity_virginica = a_specificity_virginica +
performance.value$byClass[6]
}
print(paste("average accuracy:", a_accuracy/i))
print(paste("average sensitivity - setosa:",
a_sensitivity_setosa/i))
print(paste("average specificity - setosa:",
a_specificity_setosa/i))
138 │ M. Reza Faisal & Dodon T. Nugrahadi
print(paste("average sensitivity
a_sensitivity_versicolor/i))
print(paste("average specificity
a_specificity_versicolor/i))
print(paste("average sensitivity
a_sensitivity_virginica/i))
print(paste("average specificity
a_specificity_virginica/i))
- versicolor:",
- versicolor:",
- virginica:",
- virginica:",
Pada blok “menghitung kinerja” ditambahkan baris untuk menulis
output dari fungsi confusionMatrix().
Berikut ini adalah output kinerja pada pengulangan pertama. Pada hasil
perhitungan di bawah ini dapat dilihat terdapat 1 kesalahan prediksi.
Ada 1 instance virginica yang diprediksi sebagai versicolor. Karena ada
kesalahan prediksi maka nilai akurasi tidak mencapat nilai sempurna.
Nilai akurasi di bawah ini adalah 0.9667.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor virginica
setosa
10
0
0
versicolor
0
10
1
virginica
0
0
9
Overall Statistics
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.9667
(0.8278, 0.9992)
0.3333
2.963e-13
Kappa : 0.95
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor
Class: virginica
Sensitivity
0.9000
Specificity
1.0000
Pos Pred Value
1.0000
1.0000
1.0000
1.0000
0.9500
1.0000
0.9091
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 139
Neg Pred Value
0.9524
Prevalence
0.3333
Detection Rate
0.3000
Detection Prevalence
0.3000
Balanced Accuracy
0.9500
1.0000
1.0000
0.3333
0.3333
0.3333
0.3333
0.3333
0.3667
1.0000
0.9750
Hasil kinerja aplikasi pada pengulangan kedua. Kesalahan dan nilai
kerja pada perhitungan di pengulangan kedua ini sama seperti pada
pengulangan pertama.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor virginica
setosa
10
0
0
versicolor
0
10
1
virginica
0
0
9
Overall Statistics
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.9667
(0.8278, 0.9992)
0.3333
2.963e-13
Kappa : 0.95
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor
Class: virginica
Sensitivity
0.9000
Specificity
1.0000
Pos Pred Value
1.0000
Neg Pred Value
0.9524
1.0000
1.0000
1.0000
0.9500
1.0000
0.9091
1.0000
1.0000
140 │ M. Reza Faisal & Dodon T. Nugrahadi
Prevalence
0.3333
Detection Rate
0.3000
Detection Prevalence
0.3000
Balanced Accuracy
0.9500
0.3333
0.3333
0.3333
0.3333
0.3333
0.3667
1.0000
0.9750
Hasil kinerja pada pengulangan ketiga. Pada pengulangan ketiga ini
dapat dilihat terjadi 3 kesalahan prediksi. Ada 3 instance virginica yang
diprediksi sebagai versicolor. Nilai akurasi pada perhitungan di
pengulangan ketiga ini adalah 0.9.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor virginica
setosa
10
0
0
versicolor
0
7
0
virginica
0
3
10
Overall Statistics
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.9
(0.7347, 0.9789)
0.3333
1.665e-10
Kappa : 0.85
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor
Class: virginica
Sensitivity
1.0000
Specificity
0.8500
Pos Pred Value
0.7692
Neg Pred Value
1.0000
Prevalence
0.3333
1.0000
0.7000
1.0000
1.0000
1.0000
1.0000
1.0000
0.8696
0.3333
0.3333
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 141
Detection Rate
0.3333
Detection Prevalence
0.4333
Balanced Accuracy
0.9250
0.3333
0.2333
0.3333
0.2333
1.0000
0.8500
Hasil perhitungan kinerja pada pengulangan keempat. Pada hasil di
bawah dapat dilihat 3 kesalahan prediksi. Ada 1 instance versicolor
yang diprediksi sebagai virginica dan ada 2 instance versicolor yang
diprediksi sebagai virginica. Nilai akurasi pada pengulangan keempat
ini adalah 0.9.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor virginica
setosa
10
0
0
versicolor
0
9
2
virginica
0
1
8
Overall Statistics
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.9
(0.7347, 0.9789)
0.3333
1.665e-10
Kappa : 0.85
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor
Class: virginica
Sensitivity
0.8000
Specificity
0.9500
Pos Pred Value
0.8889
Neg Pred Value
0.9048
Prevalence
0.3333
Detection Rate
0.2667
1.0000
0.9000
1.0000
0.9000
1.0000
0.8182
1.0000
0.9474
0.3333
0.3333
0.3333
0.3000
142 │ M. Reza Faisal & Dodon T. Nugrahadi
Detection Prevalence
0.3000
Balanced Accuracy
0.8750
0.3333
0.3667
1.0000
0.9000
Hasil perhitungan kinerja pada pengulangan kelima. Kinerja yang
didapat pada pengulangan kelima ini adalah sempurna. Tidak ada
kesalahan prediksi sehingga nilai akurasi yang didapat adalah 1.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor virginica
setosa
10
0
0
versicolor
0
10
0
virginica
0
0
10
Overall Statistics
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
1
(0.8843, 1)
0.3333
4.857e-15
Kappa : 1
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor
Class: virginica
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
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
0.3333
0.3333
0.3333
0.3333
0.3333
0.3333
1.0000
1.0000
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 143
Jika diperhatikan kelima output fungsi confusionMatrix() di atas,
bebeda dengan output confusionMatrix() pada kasus klasifikasi 2 class
(binary classification) seperti yang dapat dilihat pada sub bab
sebelumnya (sub bab Aplikasi 2). Pada kasus klasifikasi multiclass nilai
sensitivity dan specificity dihitung untuk setiap class. Sehingga perlu
dilakukan perhitungan penjumlahan sensitivity dan specificity untuk
setiap class dengan cara berikut.
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity_setosa = a_sensitivity_setosa +
performance.value$byClass[1]
a_specificity_setosa = a_specificity_setosa +
performance.value$byClass[4]
a_sensitivity_versicolor = a_sensitivity_versicolor +
performance.value$byClass[2]
a_specificity_versicolor = a_specificity_versicolor +
performance.value$byClass[5]
a_sensitivity_virginica = a_sensitivity_virginica +
performance.value$byClass[3]
a_specificity_virginica = a_specificity_virginica +
performance.value$byClass[6]
Sehingga di akhir program ini setiap nilai di atas dapat dibagi dengan i
dimana i = 5 untuk mendapatkan nilai rata-rata dari setiap kinerja dari
setiap class. Berikut ini adalah nilai rata-rata kinerja.
"average accuracy: 0.946666666666667"
"average sensitivity - setosa: 1"
"average specificity - setosa: 1"
"average sensitivity - versicolor: 0.92"
"average specificity - versicolor: 0.96"
"average sensitivity - virginica: 0.92"
"average specificity - virginica: 0.96"
144 │ M. Reza Faisal & Dodon T. Nugrahadi
7.5 Catatan
Contoh-contoh implementasi algoritma KNN pada bab ini hanya
menggunakan data iris. Seperti diketahui bahwa data iris memiliki
feature-feature yang yang nilai-nilainya adalah numerik. Sehingga data
ini cocok digunakan pada algoritma KNN, karena algoritma ini
melakukan perhitungan jarak antar instance-instance. Perhitungan
jarak antar instance-instance hanya bisa dilaukan jika dataset memiliki
feature dengan nilai numerik.
Pada bab 5 Pengenalan & Pembagian Data telah diperkenalkan 3 dataset
yaitu iris, titanic dan yeast. Dari penjelasan di atas, maka algoritma
KNN tidak dapat digunakan untuk menyelesaikan kasus klasifikasi
pada dataset titanic. Karena seluruh feature yang dimiliki oleh dataset
titatic bukan numeric.
Tetapi data titanic tetap dapat untuk digunakan sebagai kasus klasifikasi
namun harus diselesaikan dengan algoritma lain. Algoritma yang dapat
digunakan untuk menyelesaikan dataset ini akan dibahas pada bab-bab
berikutnya.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 145
Bab VIII Naïve Bayes
8.1 Cara Kerja
Cara kerja algoritma naïve bayes untuk melakukan klasifikasi adalah
dengan cara menghitung peluang. Perhitungan peluang berdasarkan
rumus Bayesian Rule berikut ini.
𝑃(𝐶|𝑋) =
𝑃(𝑋|𝐶) × 𝑃(𝐶)
𝑃(𝑋)
Penjelasan masing-masing kompoonen di atas dilakukan dengan
melihat contoh kasus penentuan waktu bermain bola di bawah ini.
Sebagai contoh dimiliki data berikut ini.
No
OUTLOOK
TEMP
HUMIDITY
WINDY
PLAY
1
Sunny
Hot
High
False
No
2
Sunny
Hot
High
True
No
3
Overcast
Hot
High
False
Yes
4
Rainy
Mild
High
False
Yes
5
Rainy
Cool
Normal
False
Yes
6
Rainy
Cool
Normal
True
No
7
Overcast
Cool
Normal
True
Yes
8
Sunny
Mild
High
False
No
9
Sunny
Cool
Normal
False
Yes
10
Rainy
Mild
Normal
False
Yes
11
Sunny
Mild
Normal
True
Yes
12
Overcast
Mild
High
True
Yes
13
Overcast
Hot
Normal
False
Yes
14
Rainy
Mild
High
True
No
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 147
Feature-feature dari data di atas adalah OUTLOOK, TEMP, HUMIDITY
dan WINDY. Dan yang menjadi target variable adalah PLAY. Di akhir
data adalah instance yang belum diketahui nilai classnya.
Kemudian dimiliki instance baru X sebagai berikut:
OUTLOOK
TEMP
HUMIDITY
WINDY
PLAY
Sunny
Cool
High
True
-
Dengan data instance baru di atas maka dapat ditulis seperti berikut.
X = (Outlook=Sunny, Temperature=Cool, Humidity=High,
Wind=Yes)
Langkah pertama adalah menghitung probabilitas dari target variable
dengan perhitungan berikut.



N = Jumlah seluruh instance = 14
P(play=yes) = (jumlah instance play=yes)/N = 9/14 = 0.6428571
P(play=no) = (jumlah instance play=no)/N = 5/14 = 0.3571429
Karena dataset di atas memiliki 4 feature maka perlu dihitung
kemungkinan bermain atau tidak (play=yes atau play=no) berdasarkan
nilai setiap nilai yang dimiliki setiap feature.
Pada feature OUTLOOK terdapat 3 nilai yaitu:



Sunny.
Overcast.
Rainy.
Maka berikut ini adalah kemungkinan yang terjadi.
OUTLOOK
play = yes
play = no
Total
Sunny
2/9
3/5
5/14
0.2222222
0.6
Overcast
4/9
0/5
4/14
Rainy
3/9
2/5
5/14
148 │ M. Reza Faisal & Dodon T. Nugrahadi
Untuk feature TEMP terdapat 3 nilai yaitu:



Hot.
Mild.
Cool.
Berikut ini adalah kemungkinan yang terjadi.
TEMP
play = yes
play = no
Total
Hot
2/9
2/5
4/14
Mild
4/9
2/5
6/14
Cool
3/9
1/5
4/14
0.3333333
0.2
Selanjutnya adalah feature HUMIDITY yang memiliki 2 nilai yaitu:


High.
Normal.
Berikut ini adalah kemungkinan yang terjadi untuk feature ini.
HUMIDITY
play = yes
play = no
Total
High
3/9
4/5
7/14
0.3333333
0.8
6/9
1/5
Normal
7/14
Terakhir adalah feature WIND yang memiliki 2 nilai, yaitu:


True.
False.
WIND
play = yes
play = no
Total
True
3/9
3/5
6/14
0.3333333
0.6
6/9
2/5
False
8/14
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 149
Perhitungan di atas adalah pengetahuan yang akan digunakan untuk
memprediksi jika ada data baru yang belum diketahui classnya. Sebagai
contoh jika terdapat data sebagai berikut:
No
OUTLOOK
TEMP
HUMIDITY
WINDY
PLAY
1
Sunny
Cool
High
True
-
Selanjutnya adalah menghitung berapa kemungkinan untuk nilai
play=no dan play=yes. Berikut ini adalah perhitungan untuk play=yes.
Nilai-nilai di bawah ini didapat dari perhitungan yang telah dilakukan
di atas. Perhatikan kolom-kolom berwarna abu-abu.





P(outlook=sunny | play=yes) = 2/9.
P(temperature=cool | play=yes) = 3/9.
P(humidity=high | play=yes) = 3/9.
P(wind=true | play=yes) = 3/9.
P(play=yes) = 9/14
Sedangkan untuk play=no maka akan didapat nilai-nilai berikut ini.
Perhatikan kolom-kolom berwarna hitam.





P(outlook=sunny | play=no) = 3/5.
P(temperature=cool | play= no) = 1/5.
P(humidity=high | play= no) = 4/5.
P(wind=true | play= no) = 3/5.
P(play= no) = 5/14.
Selanjutnya untuk mendapatkan kemungkinan Play=Yes dapat
dihitung dengan cara berikut ini:
P(X|play=yes) x P(play=yes) = (2/9 * 3/9 * 3/9 * 3/9) *
9/14 = 0.0053
Untuk kemungkinan Play=No dihitung dengan cara berikut ini:
P(X|play=no) x P(play=no) = (3/5 * 1/5 * 4/5 * 3/5) *
5/14 = 0.0206
Kedua nilai di atas adalah implementasi rumus:
150 │ M. Reza Faisal & Dodon T. Nugrahadi
𝑃(𝑋|𝐶) × 𝑃(𝐶)
Selanjutnya adalah mencari nilai P(X) yang didapat dari nilai-nilai pada
kolom total pada baris yang sesuai nilai instance baru pada masingmasing feature. Atau dapat diperhatikan pada kolom berwarna kuning.
Pada kasus ini P(X) ditulis dengan rumus sebagai berikut.
P(X) = P(Outlook=Sunny) * P(Temperature=Cool) *
P(Humidity=High) * P(Wind=Strong)
Berikut adalah perhitungan nilai P(X).
P(X) = (5/14) * (4/14) * (7/14) * (6/14)
P(X) = 0.02186
Setelah semua nilai pada rumus Bayesian Rule didapatkan maka dapat
dihitung prediksi instance baru untuk kedua keadaan.
Untuk keadaan pertama adalah P(play=yes | X) = 0.0053/0.02186 =
0.2424.
Untuk keadaan kedua adalah P(Play=No | X) = 0.0206/0.02186 = 0.9421.
Dengan membandingkan kedua nilainya maka nilai P(Play=No | X)
lebih besar. Artinya instance X diprediksi sebagai class dengan nilai
Play=No.
Dari penjelasan di atas maka dapat disimpulkan jika algoritma atau
teknik Naïve Bayes dapat digunakan untuk memecahkan masalah
klasifikasi untuk data dengan feature-feature yang bernilai nominal.
Tetapi algoritma ini juga dapat digunakan untuk juga untuk
menyelesaikan masalah klasifikasi untuk data dengan feature-feature
bernilai numerik.
Berikut ini adalah macam-macam Naïve Bayes untuk berbagai tipe data,
yaitu:




Gaussian Naïve Bayes.
Bernaulli Naïve Bayes.
Multinominal Naïve Bayes.
Dan lain-lain.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 151
Tetapi pada buku ini tidak akan membahas konsep dari macam-macam
Naïve Bayes.
8.2 Persiapan
Implementasi algoritma Naïve Bayes pada lingkungan R dapat
menggunakan fungsi naiveBayes() dari package e1071. Jika pada
lingkungan R yang digunakan belum memiliki package ini maka
package ini perlu diinstall dengan fungsi berikut ini.
install.packages("e1071")
8.3 Sintaks
Sintaks fungsi naiveBayes() adalah sebagai berikut:
model = naiveBayes(formula, training_data)
Keterangan:


formula, formula untuk menentukan target variable.
training_data, obyek data training.
Fungsi di atas digunakan untuk membuat model. Sedangkan untuk
melakukan prediksi digunakan fungsi predict(). Berikut ini adalah
sintaks fungsi predict().
predict(model, testing_data)
Keterangan:


model adalah obyek output dari fungsi naiveBayes().
testing_data adalah obyek data testing.
152 │ M. Reza Faisal & Dodon T. Nugrahadi
Selanjutnya akan dilakukan perbandingan hasil perhitungan fungsi
naiveBayes() dan predict() dengan hasil perhitungan yang telah dibahas
pada sub bab Cara Kerja. Langkah pertama adalah membuat data
training dari data pada tabel di sub bab Cara Kerja.
Berikut ini adalah kode lengkap yang digunakan.
library(e1071)
setwd("D:/ClassificationR")
#membuat data training
data.training = as.data.frame(rbind(
c("Sunny","Hot","High","False","No"),
c("Sunny","Hot","High","True","No"),
c("Overcast","Hot","High","False","Yes"),
c("Rainy","Mild","High","False","Yes"),
c("Rainy","Cool","Normal","False","Yes"),
c("Rainy","Cool","Normal","True","No"),
c("Overcast","Cool","Normal","True","Yes"),
c("Sunny","Mild","High","False","No"),
c("Sunny","Cool","Normal","False","Yes"),
c("Rainy","Mild","Normal","False","Yes"),
c("Sunny","Mild","Normal","True","Yes"),
c("Overcast","Mild","High","True","Yes"),
c("Overcast","Hot","Normal","False","Yes"),
c("Rainy","Mild","High","True","No")
))
names(data.training)[1]
names(data.training)[2]
names(data.training)[3]
names(data.training)[4]
names(data.training)[5]
=
=
=
=
=
"OUTLOOK"
"TEMP"
"HUMIDITY"
"WINDY"
"PLAY"
#membuat data testing
data.test = as.data.frame(cbind(
"Sunny","Cool","High","True"
))
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 153
names(data.test)[1]
names(data.test)[2]
names(data.test)[3]
names(data.test)[4]
=
=
=
=
"OUTLOOK"
"TEMP"
"HUMIDITY"
"WINDY"
#membuat model
model = naiveBayes(PLAY~., data = data.training)
print(model)
#melakukan prediksi
predict_result = predict(model, data.test)
print(predict_result)
Baris pertama berfungsi untuk memuat package e1071, agar fungsi
naiveBayes() dapat digunakan. Kemudian pada blok “membuat data
training” dapat dilihat cara membuat obyek data.training. Pada blok
“membuat data testing” adalah cara untuk membuat obyek data.test.
Pada data.test terdapat 1 instance dengan nilai yang sama seperti pada
contoh perhitungan pada sub bab Cara Kerja. Kemudian pada blok
“membuat model” adalah cara membuat model dengan fungsi
naiveBayes(). Dan blok terakhir adalah cara untuk melakukan prediksi
dengan menggunakan model yang telah dibuat.
Hasil dari prediksi adalah sebagai berikut.
> print(predict_result)
[1] Yes
Nilai output di atas adalah Yes, artinya hasil prediksi terhadap instance
baru tersebut adalah Play=Yes. Nilai ini sesuai dengan hasil prediksi
dari perhitungan pada sub Cara Kerja.
8.4 Implementasi
Pada sub bab ini akan dijelaskan penggunaan fungsi naiveBayes()
dengan cara membuat kode program sederhana sesuai dengan alur
proses yang telah dijelaskan pada bab Rancangan Aplikasi Klasifikasi
sub bab Rancangan Aplikasi.
154 │ M. Reza Faisal & Dodon T. Nugrahadi
Aplikasi 1
Berikut ini adalah kode lengkap dari aplikasi 1.
library(e1071)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#proses 2
#membuat model
model = naiveBayes(Survived~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menampilkan hasil prediksi
comparation_result = cbind(prediction =
as.character(predict_result), actual =
as.character(data.test[,4]))
print(comparation_result)
Baris pertama berfungsi untuk memuat package e1071, agar fungsi
naiveBayes() dapat digunakan.
Kemudian pada blok “proses 1” adalah proses membaca file data
training yang disimpan pada file titanic2class.train.1.csv. dan membaca
file data testing pada file titanic2class.test.1.csv.
Isi file
titanic2class.train.1.csv ditampung pada obyek data.training.
Sedangkan isi file titanic2class.test.1.csv disimpan pada obyek data.test.
Pada blok “proses 2” dapat dilihat contoh penggunaan fungsi
naiveBayes(). Input pertama adalah “Survived~.” yaitu formula untuk
menentukan target variable.
Kemudian input kedua adalah
“data.training” yang merupakan obyek yang menyimpan data training.
Output dari fungsi naiveBayes() disimpan ke dalam obyek model. isi
obyek ini maka dapat dilihat dengan cara mengetik obyek model pada
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 155
R Console. Pada output di bawah ini adalah hasil perhitungan P(C) dan
P(X|C).
Naive Bayes Classifier for Discrete Predictors
Call:
naiveBayes.default(x = X, y = Y, laplace = laplace)
A-priori probabilities:
Y
No
Yes
0.6768881 0.3231119
Conditional probabilities:
Class
Y
1st
2nd
3rd
Crew
No 0.07550336 0.11241611 0.35486577 0.45721477
Yes 0.28822496 0.16520211 0.24428822 0.30228471
Sex
Y
Female
Male
No 0.08137584 0.91862416
Yes 0.46397188 0.53602812
Age
Y
Adult
Child
No 0.96560403 0.03439597
Yes 0.91915641 0.08084359
Pada blok “proses 3” adalah contoh penggunaan fungsi predict(). Input
pertama adalah “model” yaitu obyek yang menyimpan keluaran fungsi
naiveBayes(). Input kedua “data.test[,-4]” yaitu obyek yang menyimpan
data testing tanpa nilai target variable. Keluaran dari fungsi ini
disimpan ke obyek predict_result.
Pada blok “menampilkan hasil prediksi” bertujuan untuk menampilkan
hasil prediksi yang dibandingkan dengan nilai class sebenarnya dari
setiap instance pada data testing. Berikut ini adalah sebagaian dari
output dari perhitungan pada blok ini.
[1,]
[2,]
[3,]
[4,]
prediction
"No"
"No"
"Yes"
"Yes"
actual
"Yes"
"Yes"
"Yes"
"Yes"
156 │ M. Reza Faisal & Dodon T. Nugrahadi
[5,]
[6,]
[7,]
[8,]
[9,]
[10,]
[11,]
[12,]
[13,]
"No"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"No"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
"Yes"
Dari output di atas dapat dilihat jika ada 4 instance yang diprediksi
salah. Dan 4 instance lainnya yang diprediksi secara benar.
Contoh berikutnya adalah aplikasi 1 dengan menggunakan dataset iris.
Berikut adalah kode lengkap yang digunakan.
library(e1071)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2
#membuat model
model = naiveBayes(Species~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menampilkan hasil prediksi
comparation_result = cbind(prediction =
as.character(predict_result), actual =
as.character(data.test[,5]))
print(comparation_result)
Output dari obyek model pada kode di atas adalah sebagai berikut.
Naive Bayes Classifier for Discrete Predictors
Call:
naiveBayes.default(x = X, y = Y, laplace = laplace)
A-priori probabilities:
Y
setosa versicolor
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 157
0.5
0.5
Conditional probabilities:
Sepal.Length
Y
[,1]
[,2]
setosa
5.0425 0.3601193
versicolor 5.8950 0.4517487
Y
Y
Y
Sepal.Width
[,1]
[,2]
setosa
3.4575 0.3928120
versicolor 2.7450 0.3063013
Petal.Length
[,1]
[,2]
setosa
1.4650 0.1874936
versicolor 4.2325 0.4676112
Petal.Width
[,1]
[,2]
setosa
0.2525 0.1109111
versicolor 1.3125 0.2040456
Dan berikut ini adalah hasil prediksi dibandingkan dengan nilai
sebenarnya.
[1,]
[2,]
[3,]
[4,]
[5,]
[6,]
[7,]
[8,]
[9,]
[10,]
[11,]
[12,]
[13,]
[14,]
[15,]
[16,]
[17,]
[18,]
[19,]
[20,]
prediction
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
actual
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
158 │ M. Reza Faisal & Dodon T. Nugrahadi
Dari hasil prediksi di atas dapat dilihat seluruh data dapat diprediksi
dengan benar.
Aplikasi 2
Pada aplikasi 2 ini akan dilakukan melakukan klasifikasi dengan fungsi
naiveBayes(). Kemudian dilakukan perhitungan kinerja dengan fungsi
confusionMatrix(). Berikut adalah kode lengkap aplikasi 2.
library(e1071)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#proses 2
#membuat model
model = naiveBayes(Survived~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,4] , positive = "Yes")
print(performance.value)
Output dari aplikasi ini adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 237 51
Yes 61 91
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.7455
(0.702, 0.7855)
0.6773
0.001091
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 159
Kappa : 0.4283
Mcnemar's Test P-Value : 0.395092
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.6408
0.7953
0.5987
0.8229
0.3227
0.2068
0.3455
0.7181
'Positive' Class : Yes
Contoh berikutnya adalah menggunakan fungsi naiveBayes() untuk
kasus klasifikasi data iris. Berikut adalah kode lengkapnya.
library(e1071)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2
#membuat model
model = naiveBayes(Species~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print(performance.value)
Hasil dari aplikasi ini adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor
setosa
10
0
versicolor
0
10
160 │ M. Reza Faisal & Dodon T. Nugrahadi
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
1
(0.8316, 1)
0.5
9.537e-07
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0
1.0
1.0
1.0
0.5
0.5
0.5
1.0
'Positive' Class : setosa
Dari output di atas didapatkan nilai accuracy adalah 1, artinya seluruh
data berhasil diprediksi secara benar.
Contoh berikutnya adalah kode aplikasi 2 untuk mengukur kinerja
fungsi naiveBayes() dengan menggunakan fungsi-fungsi dari package
ROCR.
Berikut adalah kode lengkap dari aplikasi 2 yang menggunakan fungsifungsi dari package ROCR.
library(e1071)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#membuat model
model = naiveBayes(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 161
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,4])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Output dari kode ini adalah sebagai berikut.
"Luas AUC: 0.718073541922677"
Gambar 104. Grafik ROC Aplikasi 2 Naïve Bayes.
Aplikasi 3
Pada aplikasi 3 ini akan digunakan 2 dataset yaitu titanic dan iris.
Dataset titanic akan digunakan untuk memberikan contoh kasus binary
classification (klasifikasi 2 class).
Sedangkan dataset iris akan
digunakan untuk memberikan contoh kasus multiclass.
162 │ M. Reza Faisal & Dodon T. Nugrahadi
Binary Classification
Berikut ini adalah contoh kode implementasi aplikasi 3 untuk
penyelesaian kasus klasifikasi dataset titanic dengan fungsi
naiveBayes().
library(e1071)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
for(i in 1:4) {
#membaca data training & data testing
data.training =
read.csv(paste0("titanic2class.train.",i,".csv"))
data.test =
read.csv(paste0("titanic2class.test.",i,".csv"))
#membuat model
model = naiveBayes(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,4], positive = "Yes")
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,4])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
#menggambar ROC
if(i > 1) {
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
} else {
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 163
}
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity = a_sensitivity +
performance.value$byClass[1]
a_specificity = a_specificity +
performance.value$byClass[2]
a_auc = a_auc + as.numeric(roc.auc@y.values)
}
print(paste("average
print(paste("average
print(paste("average
print(paste("average
accuracy:", a_accuracy/i))
sensitivity:", a_sensitivity/i))
specificity:", a_specificity/i))
AUC:", a_auc/i))
Ouput dari kode di atas adalah sebagai berikut.
"average
"average
"average
"average
accuracy: 0.769649556792414"
sensitivity: 0.509189402147149"
specificity: 0.893959731543624"
AUC: 0.701574566845386"
Dan berikut ini adalah grafik dari hasil rata-rata perhitungan kinerja
fungsi naiveBayes().
Gambar 105. Grafik ROC gabungan Aplikasi 3 Naïve Bayes.
164 │ M. Reza Faisal & Dodon T. Nugrahadi
Multiclass Classification
Berikut ini adalah contoh kode aplikasi 3 untuk penyelesaian kasus
klasifikasi dataset iris yang memiliki 3 class dengan fungsi naiveBayes().
library(e1071)
library(caret)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity_setosa = 0
a_specificity_setosa = 0
a_sensitivity_versicolor = 0
a_specificity_versicolor = 0
a_sensitivity_virginica = 0
a_specificity_virginica = 0
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris.train.",i,".csv"))
data.test = read.csv(paste0("iris.test.",i,".csv"))
#membuat model & melakukan prediksi
model = naiveBayes(Species~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print("-----------------------------------------------")
print(performance.value)
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity_setosa = a_sensitivity_setosa +
performance.value$byClass[1]
a_specificity_setosa = a_specificity_setosa +
performance.value$byClass[4]
a_sensitivity_versicolor = a_sensitivity_versicolor +
performance.value$byClass[2]
a_specificity_versicolor = a_specificity_versicolor +
performance.value$byClass[5]
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 165
a_sensitivity_virginica = a_sensitivity_virginica +
performance.value$byClass[3]
a_specificity_virginica = a_specificity_virginica +
performance.value$byClass[6]
}
print(paste("average accuracy:",
print(paste("average sensitivity
a_sensitivity_setosa/i))
print(paste("average specificity
a_specificity_setosa/i))
print(paste("average sensitivity
a_sensitivity_versicolor/i))
print(paste("average specificity
a_specificity_versicolor/i))
print(paste("average sensitivity
a_sensitivity_virginica/i))
print(paste("average specificity
a_specificity_virginica/i))
a_accuracy/i))
- setosa:",
- setosa:",
- versicolor:",
- versicolor:",
- virginica:",
- virginica:",
Output dari kode di atas adalah sebagai berikut:
"average accuracy: 0.953333333333333"
"average sensitivity - setosa: 1"
"average specificity - setosa: 1"
"average sensitivity - versicolor: 0.94"
"average specificity - versicolor: 0.96"
"average sensitivity - virginica: 0.92"
"average specificity - virginica: 0.97"
8.5 Catatan
Pada bab ini digunakan 2 dataset yaitu Titanic dan Iris. Dataset Iris
memiliki feature-feature yang bernilai numerik. Sedangkan dataset
Titanic memiliki feature-feature yang bernilai nominal. Dan kedua
dataset tersebut dapat diselesaikan dengan algoritma Naïve Bayes ini.
Berbeda dengan algoritma KNN yang hanya dapat digunakan untuk
feature-feature bernilai numerik.
166 │ M. Reza Faisal & Dodon T. Nugrahadi
Untuk contoh-contoh yang menggunakan dataset Titanic, kinerja
algoritma Naïve Bayes tidak sebaik ketika digunakan dataset Iris. Hal
ini dapat disebabkan oleh beberapa hal, salah satunya adalah karena
class yang tidak seimbang. Dimana jumlah instance dengan class
Play=No lebih banyak dibanding instance dengan class Play=Yes.
Pada bab ini tidak membahas cara penyelesaian klasifikasi class tidak
seimbang di atas. Kasus klasifikasi class tidak seimbang akan dibahas
pada edisi berikutnya dari buku ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 167
Bab IX Support Vector Machine (SVM)
9.1 Cara Kerja
Misal dimiliki data ciri-ciri manusia yang dibedakan oleh 2 class, yaitu
class MEN dan WOMEN. Dengan feature-feature adalah Tinggi (size)
dan Berat (Weight). Maka data tersebut dapat digambar sebarannya
seperti gambar di bawah ini.
Gambar 106. Sebaran instance class Women & Men.
Pada teknik Support Vector Machine (SVM) akan dibuat garis untuk
memisahkan kedua kelompok data tersebut. Garis ini dikenal dengan
hyperplane. Pada gambar di bawah ini adalah beberapa hyperplane
yang dapat digunakan untuk memisahkan kedua class.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 169
Gambar 107. Hyperplane pada SVM.
Teknik SVM bertujuan untuk mencari hyperplane yang optimal.
Hyperplane yang dapat membagi kedua class dengan jarak margin
terjauh antar class. Margin adalah jarak antara hyperplane tersebut
dengan pola terdekat dari masing-masing class. Instance yang paling
dekat ini disebut sebagai support vector. Pada garis merah yang berada
di atas garis hitam tebal dapat instance dengan tanda “+” yang menjadi
support vector untuk kelas Men. Sedangkan pada garis merah di bawah
garis hitam tebal terdapat instace dengan tanda “o” yang menjadi
support vector untuk kelas Women.
Sehingga dapat disimpulkan bahwa tujuan utama SVM adalah mencari
hyperplane terbaik dengan bantuan support vector dari masing-masing
class sehingga akhirnya didapat hyperplane optimal seperti pada
gambar di bawah ini.
170 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 108. Hyperplane optimal.
9.2 Persiapan
Salah satu cara implementasi SVM pada lingkungan R menggunakan
fungsi ksvm() dari package kernlab(). Untuk menginstall package ini
digunakan fungsi berikut ini.
install.packages("kernlab")
Sebelum menggunakan fungsi ini maka di awal kode program perlu
ditambahkan kode berikut.
library(kernlab)
Tujuan penulisan fungsi library() di atas untuk memuat package kernlab
sehingga fungsi-fungsi di dalamnya dapat digunakan.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 171
9.3 Sintaks
Sintaks fungsi ksvm() adalah sebagai berikut. Sintaks di bawah
menggunakan 4 input parameter yang umum digunakan.
model = ksvm(formula, training_data, type, kernel)
Keterangan:
1. formula adalah cara untuk menentukan target variable pada
dataset.
2. training_data adalah data yang digunakan untuk melatih model.
3. type, tipe untuk menentukan penggunaan fungsi ini apakah
digunakan untuk klasifikasi, regresi atau novelty detection.
Berikut adalah nilai-nilai untuk parameter type yang dapat
digunakan:
o Untuk klasifikasi 2 class (binary class) dapat digunakan
tipe berikut:
- C-svc, C classification.
- nu-svc, nu classification.
- C-bsvc, bound contraint svm classification.
o Untuk klasifikasi lebih dari 2 class (multiclass
classification) dapat digunakan tipe berikut:
- spoc-svc, Crammer, Singer native multi-class.
- kbb-svc, Weston, Watkins native multi-class.
o Untuk novelty detection dapat digunakan tipe berikut:
- one-svc.
o untuk regresi dapat digunakan tipe berikut:
- eps-svr, epsilon regression.
- nu-svr, nu regression.
- eps-bsvr, bound-contraint svm regression.
4. kernel, adalah fungsi yang digunakan untuk mendapatkan
hyperplance yang optimum. Nilai-nilai kernel yang dapat
digunakan adalah:
o rbfdot, kernel radial basis “Gaussian”.
o polydot, kernel polynomial.
o vanilladot, kernel linear.
o tanhdot, kernel hyperbolic tangent.
172 │ M. Reza Faisal & Dodon T. Nugrahadi
o
o
o
o
o
laplacedot, kernel laplacian.
besseldot, kernel bessel.
anovadot, kernel ANOVA RBF.
splinedot, kernel spline.
stringdot, kernel string.
Fungsi ksvm() digunakan untuk membuat model pembelajaran,
sehingga hasil prosesnya dapat disimpan pada sebuah obyek. Sebagai
contoh nama obyek adalah model.
Kemudian untuk melakukan prediksi digunakan fungsi predict()
dengan sintaks seperti berikut ini.
predict(model, testing_data)
9.4 Implementasi
Pada sub bab ini akan dijelaskan penggunaan fungsi ksvm() dengan cara
membuat kode program sederhana sesuai dengan alur proses yang telah
dijelaskan pada bab Rancangan Aplikasi Klasifikasi sub bab Rancangan
Aplikasi.
Aplikasi 1
Berikut ini adalah kode lengkah penggunaan fungsi ksvm() untuk
klasifikasi menggunakan dataset iris.
library(kernlab)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2
#membuat model
model = ksvm(Species~., data.training)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 173
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menampilkan hasil prediksi
comparation_result = cbind(prediction =
as.character(predict_result), actual =
as.character(data.test[,5]))
print(comparation_result)
Pada contoh di atas hanya digunakan 2parameter yang digunakan saja
untuk pada fungsi ksvm(). Fungsi ksvm() dapat menentukan nilai
parameter type dan kernel secara default. Untuk melihat type dan
kernel yang digunakan pada mengetikkan obyek model pada R console.
Berikut adalah output dari obyek model.
Support Vector Machine object of class "ksvm"
SV type: C-svc (classification)
parameter : cost C = 1
Gaussian Radial Basis kernel function.
Hyperparameter : sigma = 0.996860741524746
Number of Support Vectors : 26
Objective Function Value : -5.5495
Training error : 0
Berikut adalah hasil prediksi dari dari kode aplikasi 1 ini.
[1,]
[2,]
[3,]
[4,]
[5,]
[6,]
[7,]
[8,]
[9,]
[10,]
[11,]
[12,]
[13,]
prediction
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
actual
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
174 │ M. Reza Faisal & Dodon T. Nugrahadi
[14,]
[15,]
[16,]
[17,]
[18,]
[19,]
[20,]
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
Terlihat fungsi ksvm() dapat melakukan prediksi seluruh instance
dengan benar.
Selain dapat melakukan klasifikasi pada dataset yang memiliki feature
bernilai numerik seperti dataset iris, SVM juga dapat digunakan untuk
klasifikasi dataset Titanic yang memiliki feature bernilai bukan numerik.
Berikut adalah contoh kode yang digunakan.
library(kernlab)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#proses 2
#membuat model
model = ksvm(Survived~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menampilkan hasil prediksi
comparation_result = cbind(prediction =
as.character(predict_result), actual =
as.character(data.test[,4]))
print(comparation_result)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 175
Aplikasi 2
Pada sub bab ini akan diberikan contoh pengukuran kinerja dengan
confusion matrix dan ROC.
Pengukuran Kinerja dengan Confusion Matrik
Pada aplikasi 2 ini akan dilakukan pengukuran kinerja SVM untuk
melakukan klasifikasi.
library(kernlab)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2
#membuat model
model = ksvm(Species~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print(performance.value)
Berikut adalah kinerja dari contoh kasus di atas.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor
setosa
10
0
versicolor
0
10
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
1
(0.8316, 1)
0.5
9.537e-07
Kappa : 1
176 │ M. Reza Faisal & Dodon T. Nugrahadi
Mcnemar's Test P-Value : NA
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0
1.0
1.0
1.0
0.5
0.5
0.5
1.0
'Positive' Class : setosa
Selanjutnya adalah contoh aplikasi 2 untuk menyelesaikan kasus dataset
Titanic. Berikut adalah kode yang digunakan.
library(kernlab)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#proses 2
#membuat model
model = ksvm(Survived~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,4], positive = "Yes")
print(performance.value)
Dan berikut ini adalah nilai kinerja dari contoh kasus klasifikasi Titanic
ini.
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 293 84
Yes
5 58
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 177
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.7977
(0.7571, 0.8343)
0.6773
1.262e-08
Kappa : 0.4584
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4085
0.9832
0.9206
0.7772
0.3227
0.1318
0.1432
0.6958
'Positive' Class : Yes
Pengukuran Kinerja dengan ROC
Berikut ini adalah contoh kode penyelesaikan kasus klasifikasi dataset
Titanic dengan pengukuran kerja menggunakan ROC.
library(kernlab)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#membuat model
model = ksvm(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,4])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
178 │ M. Reza Faisal & Dodon T. Nugrahadi
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Berikut ini adalah nilai AUC dan grafik ROC yang dihasilkan.
"Luas AUC: 0.69583609036771"
Gambar 109. Kurva ROC kasus klasifikasi Titanic dengan SVM.
Berikut ini adalah contoh kode klasifikasi dataset Iris dengan SVM dan
pengukuran kinerja dengan ROC.
library(kernlab)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#membuat model
model = ksvm(Species~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 179
#menghitung kinerja
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,5])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Dan hasilnya adalah sebagai berikut:
"Luas AUC: 1"
Gambar 110. Grafik ROC kasus klasifikasi Iris dengan SVM.
Aplikasi 3
Pada sub bab ini akan diberikan contoh aplikasi 3 yang menggunakan
fungsi ksvm() untuk penyelesaikan masalah klasifikasi 2 class (binary
classification) dan klasifikasi lebih 2 class (multiclass classification).
Binary Classification
Berikut adalah contoh aplikasi 3 untuk kasus klasifikasi dataset Titanic.
180 │ M. Reza Faisal & Dodon T. Nugrahadi
library(kernlab)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("titanic2class.train.",i,".csv"))
data.test =
read.csv(paste0("titanic2class.test.",i,".csv"))
#membuat model
model = ksvm(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,4], positive = "Yes")
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,4])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
#menggambar ROC
if(i > 1) {
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
} else {
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
}
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity = a_sensitivity +
performance.value$byClass[1]
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 181
a_specificity = a_specificity +
performance.value$byClass[2]
a_auc = a_auc + as.numeric(roc.auc@y.values)
}
print(paste("average
print(paste("average
print(paste("average
print(paste("average
accuracy:", a_accuracy/i))
sensitivity:", a_sensitivity/i))
specificity:", a_specificity/i))
AUC:", a_auc/i))
Berikut adalah kinerja yang dari contoh kasus di atas.
"average
"average
"average
"average
accuracy: 0.790544217687075"
sensitivity: 0.379710430414656"
specificity: 0.986577181208054"
AUC: 0.683143805811355"
Gambar 111. Kurva ROC kasus dataset Titanic pada aplikasi 3.
Aplikasi 3 untuk kasus klasifikasi dengan menggunakan dataset Iris
digunakan kode di bawah ini.
library(kernlab)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
182 │ M. Reza Faisal & Dodon T. Nugrahadi
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris2class.train.",i,".csv"))
data.test =
read.csv(paste0("iris2class.test.",i,".csv"))
#membuat model
model = ksvm(Species~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,5])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
#menggambar ROC
if(i > 1) {
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
} else {
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
}
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity = a_sensitivity +
performance.value$byClass[1]
a_specificity = a_specificity +
performance.value$byClass[2]
a_auc = a_auc + as.numeric(roc.auc@y.values)
}
print(paste("average
print(paste("average
print(paste("average
print(paste("average
accuracy:", a_accuracy/i))
sensitivity:", a_sensitivity/i))
specificity:", a_specificity/i))
AUC:", a_auc/i))
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 183
Berikut ini adalah kinerja dari aplikasi 3 untuk kasus di atas adalah
sebagai berikut.
"average
"average
"average
"average
accuracy: 0.965"
sensitivity: 0.93"
specificity: 1"
AUC: 0.965"
Dan berikut adalah rata-rata kurva ROC dari setiap bagian data.
Gambar 112. Kurva ROC kasus dataset Irispada aplikasi 3.
Multiclass Classification
Untuk kasus klasifikasi lebih 2 class digunakan dataset Iris yang terdiri
atas 3 class. Berikut adalah kode yang digunakan untuk menyelesaikan
kasus ini.
library(kernlab)
library(caret)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity_setosa = 0
a_specificity_setosa = 0
a_sensitivity_versicolor = 0
a_specificity_versicolor = 0
a_sensitivity_virginica = 0
a_specificity_virginica = 0
184 │ M. Reza Faisal & Dodon T. Nugrahadi
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris.train.",i,".csv"))
data.test = read.csv(paste0("iris.test.",i,".csv"))
#membuat model & melakukan prediksi
model = ksvm(Species~., data.training, type="spocsvc")
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print("-----------------------------------------------")
print(performance.value)
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity_setosa = a_sensitivity_setosa +
performance.value$byClass[1]
a_specificity_setosa = a_specificity_setosa +
performance.value$byClass[4]
a_sensitivity_versicolor = a_sensitivity_versicolor +
performance.value$byClass[2]
a_specificity_versicolor = a_specificity_versicolor +
performance.value$byClass[5]
a_sensitivity_virginica = a_sensitivity_virginica +
performance.value$byClass[3]
a_specificity_virginica = a_specificity_virginica +
performance.value$byClass[6]
}
print(paste("average accuracy:",
print(paste("average sensitivity
a_sensitivity_setosa/i))
print(paste("average specificity
a_specificity_setosa/i))
print(paste("average sensitivity
a_sensitivity_versicolor/i))
print(paste("average specificity
a_specificity_versicolor/i))
a_accuracy/i))
- setosa:",
- setosa:",
- versicolor:",
- versicolor:",
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 185
print(paste("average sensitivity - virginica:",
a_sensitivity_virginica/i))
print(paste("average specificity - virginica:",
a_specificity_virginica/i))
Pada kode di atas fungsi ksvm() menggunakan input parameter yang
berbeda dengan contoh-contoh sebelumnya.
model = ksvm(Species~., data.training, type="spoc-svc")
Pada baris di atas dapat dilihat nilau type=”spoc-svc”. Seperti yang
telah dijelaskan pada sub bab Sintaks, nilai “spoc-svc” digunakan jika
kasus multiclass classification.
Berikut adalah hasil perhitungan kinerja dari aplikasi 3 ini.
"average
"average
"average
"average
"average
"average
accuracy: 0.966666666666667"
specificity - setosa: 1"
sensitivity - versicolor: 0.96"
specificity - versicolor: 0.97"
sensitivity - virginica: 0.94"
specificity - virginica: 0.98"
Gambar 113. Kurva ROC kasus dataset Iris pada kasus multiclass
classification.
186 │ M. Reza Faisal & Dodon T. Nugrahadi
9.5 Catatan
Algoritm SVM mempunyai kemampuan untuk menyelesaikan masalah
klasifikasi untuk data yang mempunyai feature bernilai numerik dan
nominal. Seperti halnya algoritma Naïve Bayes, SVM juga belum bisa
melakukan prediksi yang bagus untuk kasus klasifikasi dataset Titanic.
Berarti data tidak seimbang juga mempengaruhi kinerja algoritma SVM.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 187
Bab X Decision Tree
10.1 Cara Kerja
Tujuan algoritma decision tree atau pohon keputusan adalah untuk
membuat rule (aturan) yang digunakan untuk melakukan prediksi.
Disebut sebagai pohon keputusan atau decision tree karena rule (aturan)
akan berbentuk seperti pohon terbalik. Disebut pohon terbalik karena
akarnya berada di atas dan daunnya berada di bawah.
Di bawah ini adalah contoh decision tree yang dibentuk oleh dataset
cuaca.
Gambar 114. Decision tree (pohon keputusan) data cuaca.
Simpul paling atas pada decision tree disebut root. Sedangkan simpul
paling bawah disebut leaf node (simpul daun). Sedangkan simpul yang
berada di antara root dan leaf node disebut split node.
Sebagai contoh kasus, misal dimiliki data sebagai berikut.
Nama
Usia
Berat
Kelamin
Hipertensi
Pasien1
Muda
Gemuk
Pria
Ya
Pasien2
Muda
Kurus
Pria
Tidak
Pasien3
Muda
Normal
Wanita
Tidak
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 189
Nama
Usia
Berat
Kelamin
Hipertensi
Pasien4
Tua
Gemuk
Pria
Tidak
Pasien5
Tua
Gemuk
Pria
Ya
Pasien6
Muda
Kurus
Pria
Tidak
Pasien7
Tua
Gemuk
Wanita
Ya
Pasien8
Tua
Normal
Pria
Tidak
Feature-feature data di atas adalah:
o
o
o
o
Nama.
Usia.
Berat.
Kelamin.
Sedangkan target variable adalah Hipertensi.
Langkah pertama untuk membuat decision tree adalah dengan
menentukan feature mana yang akan menjadi root. Apakah Nama,
Usia, Berat atau Kelamin yang akan menjadi root? Untuk menentukan
feature mana yang akan menjadi root dengan cara menghitung entropy.
Entropy adalah jumlah bit yang diperkirakan dibutuhkan untuk dapat
mengekstrasi suatu kelas (+ atau -) dari sejumlah data pada ruang
sample S. Rumus untuk menghitung jumlah bit yang diperkirakan
untuk mengekstrasi S ke dalam kelas adalah sebagai berikut.
−𝑝+ 𝑙𝑜𝑔2 𝑝+ − 𝑝− 𝑙𝑜𝑔2 𝑝−
Keterangan:
o
o
p+ adalah kemungkinan untuk kelas +.
p- adalah kemungkinan untuk kelas -.
Feature dengan nilai entropy terkecil akan menjadi root.
Berikut adalah cara menghitung entropy feature Usia. Langkah pertama
adalah membuat tabel seperti berikut.
190 │ M. Reza Faisal & Dodon T. Nugrahadi
Usia
Hipertensi
Jumlah
Muda
Ya
1
Muda
Tidak
3
Tua
Ya
2
Tua
Tidak
2
Untuk Usia=Muda dapat dihitung jumlah bit sebagai berikut:
1
1 3
3
𝑞1 = − 𝑙𝑜𝑔2 − 𝑙𝑜𝑔2 = 0.81
4
4 4
4
Untuk Usia=Tua adalah sebagai berikut:
2
2 2
2
𝑞2 = − 𝑙𝑜𝑔2 − 𝑙𝑜𝑔2 = 1
4
4 4
4
Sehingga didapat entropy untuk usia sebagai berikut:
4
4
4
4
𝐸 = 𝑞1 + 𝑞2 = (0.81) + (1) = 0.91
8
8
8
8
Keterangan:
o
o
o
Pada rumus pertama dapat dilihat nilai pembagi bernilai 4. Nilai
tersebut adalah penjumlahan instance Usia=Muda dan
Hipertensi=Ya yang berjumlah 1 instance, dan instance
Usia=Muda dan Hipertensi=Tidak yang berjumlah 3 instance.
Pada rumus kedua nilai pembagi bernilai 4. Nilai tersebut
adalah penjumlahan instance Usia=Tua dan Hipertensi=Ya
berjumlah 2 instance, dan instance Usia=Tua dan
Hipertensi=Tidak yang berjumlah 2 instance.
Pada rumus ketiga nilai pembagi bernilai 8 yang merupakan
jumlah total instance.
Dengan cara yang sama didapat nilai untuk feature-feature lain, yaitu:
o
o
Entropy untuk feature Berat = 0.41.
Entropy untuk feature Kelamin = 0.94.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 191
Maka feature Berat dipilih menjadi root karena memiliki nilai entropi
terkecil. Sehingga untuk sementara dapat digambar pohon seperti
gambar di bawah ini.
Berat
Gemuk
Normal
Kurus
pasien1(+)
pasien3 (-)
pasien2 (-)
pasien4 (-)
pasien8 (-)
pasien6 (-)
pasien5 (+)
pasien7 (+)
Gambar 115. Pohon tahap 1.
Langkah selanjutnya adalah menentukan simpul berikutnya untuk
Berat=Gemuk. Berikut adalah data untuk Berat=Gemuk.
Nama
Usia
Kelamin
Hipertensi
Pasien1
Muda
Pria
Ya
Pasien4
Tua
Pria
Tidak
Pasien5
Tua
Pria
Ya
Pasien7
Tua
Wanita
Ya
Dari data di atas akan ditentukan feature mana yang akan menjadi
simpul. Apakah feature Usia atau Kelamin? Cara menentukannya sama
seperti penentuan entropi dengan cara di atas. Sehingga didapat nilai
entropi sebagai berikut:
192 │ M. Reza Faisal & Dodon T. Nugrahadi
o
o
Entropy untuk feature Usia adalah 0,69.
Entropy untuk feature Kelamin adalah 0.69.
Karena nilainya sama maka baik feature Usia atau Kelamin dapat
digunakan menjadi simpul. Sehingga di dapat pohon seperti gambar
berikut.
Berat
Gemuk
Normal
Kelamin
Wanita
Pria
pasien7 (+)
Kurus
pasien3 (-)
pasien2 (-)
pasien8 (-)
pasien6 (-)
pasien1 (+)
pasien4 (-)
pasien5 (+)
Gambar 116. Pohon tahap 2.
Dengan memperhatikan data pada setiap simpul dari gambar di atas,
maka gambar di atas dapat digambar menjadi seperti berikut.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 193
Berat
Gemuk
Normal
Kelamin
Wanita
Kurus
Tidak
Tidak
Pria
Ya
pasien1 (+)
pasien4 (-)
pasien5 (+)
Gambar 117. Pohon tahap 3.
Untuk Kelamin=Pria didapat data sebagai berikut:
Nama
Usia
Kelamin
Hipertensi
Pasien1
Muda
Pria
Ya
Pasien4
Tua
Pria
Tidak
Pasien5
Tua
Pria
Ya
Dari data tersebut maka dapat digambar pohon sebagai berikut.
Selanjutnya menentukan simpul daun (leaf node) untuk Kelamin=Pria.
Pada Usia=Tua terdapat 1 data dengan nilai Hipertensi=Ya dan 1 data
dengan Hipertensi=Tidak. Karena jumlah datanya sama maka dapat
dipilih nilai yang akan digunakan. Jika misal dipilih Hipertensi=Tidak
maka dapat digambar decision tree secara lengkap seperti gambar di
bawah ini.
194 │ M. Reza Faisal & Dodon T. Nugrahadi
Berat
Gemuk
Normal
Kelamin
Wanita
Kurus
Tidak
Tidak
Pria
Ya
Ya
Tidak
Gambar 118. Pohon tahap akhir.
Sehingga akan didapat 4 rule sebagai berikut:
o
o
o
o
Rule 1: IF Berat=Normal dan Berat=Kurus THEN
Hipertensi=Tidak.
Rule 2: IF Berat=Gemuk dan Kelamin=Wanita THEN
Hipertensi=Ya.
Rule 3: IF Berat=Gemuk dan Kelamin=Pria dan Usia=Muda
THEN Hipertensi=Ya.
Rule 4: IF Berat=Gemuk dan Kelamin=Pria dan Usia=Tua THEN
Hipertensi=Tidak.
Sehingga jika rule di atas digunakan untuk memprediksi maka akan
dilihat hasil sebagai berikut.
Nama
Usia
Berat
Kelamin
Hipertensi
Prediksi
Pasien1
Muda
Gemuk
Pria
Ya
Ya
Pasien2
Muda
Kurus
Pria
Tidak
Tidak
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 195
Nama
Usia
Berat
Kelamin
Hipertensi
Prediksi
Pasien3
Muda
Normal
Wanita
Tidak
Tidak
Pasien4
Tua
Gemuk
Pria
Tidak
Tidak
Pasien5
Tua
Gemuk
Pria
Ya
Tidak
Pasien6
Muda
Kurus
Pria
Tidak
Tidak
Pasien7
Tua
Gemuk
Wanita
Ya
Ya
Pasien8
Tua
Normal
Pria
Tidak
Tidak
Dari hasil prediksi di atas, ada 1 data yang salah diprediksi.
Pada sub bab selanjutnya akan dijelaskan bagaimana implementasi
algoritma decision tree di atas pada lingkungan R.
10.2 Persiapan
Salah satu fungsi yang dapat digunakan untuk implementasi algoritma
decision tree pada lingkungan R adalah J48() dari package RWeka.
Untuk menginstall package RWeka digunakan fungsi berikut ini.
install.packages("RWeka")
Untuk menggunakan fungsi-fungsi pada package RWeka, maka terlebih
dahulu memuat package RWeka dengan kode di bawah ini.
library(RWeka)
10.3 Sintaks
Sintaks penggunaan fungsi J48() adalah sebagai berikut:
model <- J48(formula, training_data)
196 │ M. Reza Faisal & Dodon T. Nugrahadi
Keterangan:
o
o
formula untuk menentukan target variable.
training_data untuk menentukan obyek yang menyimpan data
training.
Kemudian untuk melakukan prediksi digunakan fungsi predict()
dengan sintaks seperti berikut ini.
predict(model, testing_data)
10.4 Implementasi
Pada sub bab ini akan dijelaskan penggunaan fungsi J48() dengan cara
membuat kode program sederhana sesuai dengan alur proses yang telah
dijelaskan pada bab Rancangan Aplikasi Klasifikasi sub bab Rancangan
Aplikasi.
Aplikasi 1
Berikut ini adalah contoh kode lengkap implementasi fungsi J48 untuk
menyelesaikan klasifikasi dengan menggunakan dataset iris.
library(RWeka)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2
#membuat model
model = J48(Species~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 197
#menampilkan hasil prediksi
comparation_result = cbind(prediction =
as.character(predict_result), actual =
as.character(data.test[,5]))
print(comparation_result)
Untuk melihat detail hasil pembelajaran dapat dilakukan dengan
mengetikkan obyek model pada R Console. Berikut adalah informasi
yang diberikan oleh obyek model.
J48 pruned tree
-----------------Petal.Width <= 0.6: setosa (40.0)
Petal.Width > 0.6: versicolor (40.0)
Number of Leaves
Size of the tree :
:
2
3
Untuk melihat visualisasi decision tree yang dibuat dapat digunakan
fungsi plot().
plot(model)
Gambar di bawah ini adalah gambar decision tree yang dibuat untuk
kasus di atas. Dari gambar di bawah ini dapat dilihat yang menjadi root
adalah Petal.Width.
Gambar 119. Decision tree dataset Iris.
198 │ M. Reza Faisal & Dodon T. Nugrahadi
Sedangkan hasil prediksi dapat dilihat pada daftar nilai di bawah ini.
[1,]
[2,]
[3,]
[4,]
[5,]
[6,]
[7,]
[8,]
[9,]
[10,]
[11,]
[12,]
[13,]
[14,]
[15,]
[16,]
[17,]
[18,]
[19,]
[20,]
prediction
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
actual
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"setosa"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
"versicolor"
Pada prediksi di atas, fungsi J48() dapat melakukan prediksi seluruh
data testing.
Untuk klasifikasi untuk kasus dataset Titanic digunakan kode berikut.
library(RWeka)
setwd("D:/ClassificationR")
#proses 1
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#proses 2
#membuat model
model = J48(Survived~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menampilkan hasil prediksi
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 199
comparation_result = cbind(prediction =
as.character(predict_result), actual =
as.character(data.test[,4]))
print(comparation_result)
Output dari obyek model dari kasus di atas adalah sebagai berikut.
J48 pruned tree
-----------------Sex
|
|
|
|
Sex
|
|
|
|
|
|
|
|
= Female
Class = 1st: Yes (117.0/4.0)
Class = 2nd: Yes (85.0/11.0)
Class = 3rd: No (147.0/65.0)
Class = Crew: Yes (12.0)
= Male
Class = 1st
|
Age = Adult: No (132.0/46.0)
|
Age = Child: Yes (5.0)
Class = 2nd
|
Age = Adult: No (135.0/12.0)
|
Age = Child: Yes (8.0)
Class = 3rd: No (415.0/74.0)
Class = Crew: No (705.0/160.0)
Number of Leaves :
Size of the tree :
10
15
Gambar decision tree dari kasus Titanic ini adalah sebagai berikut.
Gambar 120. Decision tree dataset Titanic.
200 │ M. Reza Faisal & Dodon T. Nugrahadi
Aplikasi 2
Pada sub bab ini diberikan contoh perhitungan kinerja fungsi J48()
untuk melakukan klasifikasi pada kasus dataset Iris dan Titanic.
Confusion Matrix
Pada sub bab ini akan dilakukan perhitungan kinerja dengan
menggunakan fungsi confusionMatrix().
Berikut ini adalah contoh kode untuk kasus dataset Iris.
library(RWeka)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#proses 2
#membuat model
model = J48(Species~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print(performance.value)
Dan berikut adalah hasil perhitungan kinerja klasifikasi kasus di atas.
Confusion Matrix and Statistics
Reference
Prediction
setosa versicolor
setosa
10
0
versicolor
0
10
Accuracy : 1
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 201
95% CI : (0.8316, 1)
No Information Rate : 0.5
P-Value [Acc > NIR] : 9.537e-07
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0
1.0
1.0
1.0
0.5
0.5
0.5
1.0
'Positive' Class : setosa
Untuk menyelesaikan kasus Titanic digunakan kode berikut ini.
library(RWeka)
library(caret)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
#proses 2
#membuat model
model = J48(Survived~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,4], positive = "Yes")
print(performance.value)
202 │ M. Reza Faisal & Dodon T. Nugrahadi
Hasil kinerja kasus di atas adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 293 84
Yes
5 58
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.7977
(0.7571, 0.8343)
0.6773
1.262e-08
Kappa : 0.4584
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4085
0.9832
0.9206
0.7772
0.3227
0.1318
0.1432
0.6958
'Positive' Class : Yes
ROC
Pada sub bab ini akan digunakan ROC untuk menghitung kinerja
klasifikasi fungsi J48(). Untuk kasus dataset Iris digunakan kode
berikut.
library(RWeka)
library(ROCR)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("iris2class.train.1.csv")
data.test = read.csv("iris2class.test.1.csv")
#membuat model
model = J48(Species~., data.training)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 203
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,5])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Nilai AUC yang didapat adalah 1. Dan kurva ROC yang dihasilkan
dapat dilihat pada gambar di bawah ini.
Gambar 121. Kurva ROC aplikasi 2 fungsi J48() dataset Iris.
Kode perhitungan kinerja fungsi J48() dengan ROC untuk kasus dataset
Titanic digunakan kode berikut ini.
library(RWeka)
library(ROCR)
setwd("D:/ClassificationR")
#membaca data training & data testing
data.training = read.csv("titanic2class.train.1.csv")
data.test = read.csv("titanic2class.test.1.csv")
204 │ M. Reza Faisal & Dodon T. Nugrahadi
#membuat model
model = J48(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,4])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Nilai AUC yang didapatkan adalah 0.69583609036771. Dan kurva ROC
dari kasus ini adalah sebagai berikut.
Gambar 122. Kurva ROC aplikasi 2 fungsi J48() kasus Titanic.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 205
Aplikasi 3
Pada sub bab ini akan diberikan contoh pengguaan fungsi J48() untuk
menyelesaikan klasifikasi dengan cross validation.
Binary Classification
Berikut adalah contoh klasifikasi dengan cross validation untuk kasus
dataset iris 2 class.
library(RWeka)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris2class.train.",i,".csv"))
data.test =
read.csv(paste0("iris2class.test.",i,".csv"))
#membuat model
model = J48(Species~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,5])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
#menggambar ROC
if(i > 1) {
206 │ M. Reza Faisal & Dodon T. Nugrahadi
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
} else {
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
}
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity = a_sensitivity +
performance.value$byClass[1]
a_specificity = a_specificity +
performance.value$byClass[2]
a_auc = a_auc + as.numeric(roc.auc@y.values)
}
print(paste("average
print(paste("average
print(paste("average
print(paste("average
accuracy:", a_accuracy/i))
sensitivity:", a_sensitivity/i))
specificity:", a_specificity/i))
AUC:", a_auc/i))
Berikut adalah kinerja dari klasifikasi kasus ini.
"average
"average
"average
"average
accuracy: 0.99"
sensitivity: 0.98"
specificity: 1"
AUC: 0.99"
Gambar 123. Kurva ROC aplikasi 3 dengan fungsi J48() dan cross validation
kasus dataset Iris.
Sedangkan untuk klasifikasi kasus dataset Titanic digunakan kode di
bawah ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 207
library(RWeka)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("titanic2class.train.",i,".csv"))
data.test =
read.csv(paste0("titanic2class.test.",i,".csv"))
#membuat model
model = J48(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,4], positive = "Yes")
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,4])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
#menggambar ROC
if(i > 1) {
plot(roc.tpr.fpr, add = TRUE, col="red",lty=3)
} else {
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
}
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity = a_sensitivity +
performance.value$byClass[1]
208 │ M. Reza Faisal & Dodon T. Nugrahadi
a_specificity = a_specificity +
performance.value$byClass[2]
a_auc = a_auc + as.numeric(roc.auc@y.values)
}
print(paste("average
print(paste("average
print(paste("average
print(paste("average
accuracy:", a_accuracy/i))
sensitivity:", a_sensitivity/i))
specificity:", a_specificity/i))
AUC:", a_auc/i))
Nilai kinerja dari klasifikasi dengan J48() untuk kasus dataset Titanic
adalah sebagai berikut.
"average
"average
"average
"average
accuracy: 0.783283858998145"
sensitivity: 0.390859844380971"
specificity: 0.970469798657718"
AUC: 0.680664821519345"
Gambar 124. Kurva ROC aplikasi 3 dengan fungsi J48() dan cross validation
kasus dataset Titanic.
Multiclass Classification
Untuk clasifikasi multiclass dan cross validation digunakan dataset iris
3 class. Berikut adalah kode yang digunakan.
library(RWeka)
library(caret)
setwd("D:/ClassificationR")
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 209
#variables
a_accuracy = 0
a_sensitivity_setosa = 0
a_specificity_setosa = 0
a_sensitivity_versicolor = 0
a_specificity_versicolor = 0
a_sensitivity_virginica = 0
a_specificity_virginica = 0
for(i in 1:5) {
#membaca data training & data testing
data.training =
read.csv(paste0("iris.train.",i,".csv"))
data.test = read.csv(paste0("iris.test.",i,".csv"))
#membuat model & melakukan prediksi
model = J48(Species~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print("-----------------------------------------------")
print(performance.value)
#menghitung jumlah setiap nilai kinerja
a_accuracy = a_accuracy + performance.value$overall[1]
a_sensitivity_setosa = a_sensitivity_setosa +
performance.value$byClass[1]
a_specificity_setosa = a_specificity_setosa +
performance.value$byClass[4]
a_sensitivity_versicolor = a_sensitivity_versicolor +
performance.value$byClass[2]
a_specificity_versicolor = a_specificity_versicolor +
performance.value$byClass[5]
a_sensitivity_virginica = a_sensitivity_virginica +
performance.value$byClass[3]
a_specificity_virginica = a_specificity_virginica +
performance.value$byClass[6]
}
print(paste("average accuracy:", a_accuracy/i))
210 │ M. Reza Faisal & Dodon T. Nugrahadi
print(paste("average sensitivity
a_sensitivity_setosa/i))
print(paste("average specificity
a_specificity_setosa/i))
print(paste("average sensitivity
a_sensitivity_versicolor/i))
print(paste("average specificity
a_specificity_versicolor/i))
print(paste("average sensitivity
a_sensitivity_virginica/i))
print(paste("average specificity
a_specificity_virginica/i))
- setosa:",
- setosa:",
- versicolor:",
- versicolor:",
- virginica:",
- virginica:",
Decision tree yang dibentuk oleh model di atas dapat dilihat pada
gambar di bawah ini.
Gambar 125. Decision tree dataset iris 3 class.
Berikut adalah hasil kinerja dari klasifikasi kasus di atas.
"average accuracy: 0.94"
"average sensitivity - setosa: 0.98"
"average specificity - setosa: 1"
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 211
"average
"average
"average
"average
sensitivity
specificity
sensitivity
specificity
-
versicolor: 0.94"
versicolor: 0.94"
virginica: 0.9"
virginica: 0.97"
10.5 Catatan
Pada pembahasan tentang perhitungan pembuatan decision tree
menggunakan perhitungan entropi. Seperti halnya Naïve Bayes
perhitungan dipengaruhi oleh perbandingan antara jumlah instance
masing-masing class sehingga jika jumlah instance pada masing-masing
class tidak seimbang maka kemungkinan akan mempengaruhi
kebenaran prediksi class minoritas (class dengan jumlah instance
sedikit).
212 │ M. Reza Faisal & Dodon T. Nugrahadi
Bab XI Klasifikasi Kelas Tidak Seimbang
11.1 Definisi & Efek Kelas Tidak Seimbang
Kelas tidak seimbang atau imbalanced class adalah keadaan ketika ada
salah satu class memiliki jumlah instance yang lebih banyak dari class
lainnya. Jika kasus class tidak seimbang terjadi klasifikasi dua class
(binary class) maka class yang memiliki jumlah instance lebih banyak
disebut sebagai class mayoritas. Sedangkan class yang memiliki jumlah
instance yang lebih sedikit disebut class minoritas.
Data yang ditemui pada kasus nyata pada umumnya adalah class tidak
seimbang. Sebagai contoh, pada dunia orang yang menderita kanker
lebih sedikit dibanding orang normal. Sehingga class “penderita
kanker” adalah class minoritas, dan class “normal” adalah class
mayoritas. Class minoritas juga disebut sebagai class positif dan class
mayoritas disebut sebagai class negatif.
Sebagai contoh dimiliki data sebagai berikut.
'data.frame':
1000 obs. of 3 variables:
$ cls: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1
...
$ x1 : num 0.2008 0.0166 0.2287 0.1264 0.6008 ...
$ x2 : num 0.678 1.5766 -0.5595 -0.0938 -0.2984 ...
Dengan summary sebagai berikut.
cls
0:980
1: 20
x1
Min.
:-3.73468
1st Qu.:-0.39539
Median :-0.03025
Mean
:-0.03185
3rd Qu.: 0.35474
Max.
: 1.98859
x2
Min.
:-3.17886
1st Qu.:-0.78564
Median :-0.06871
Mean
:-0.06603
3rd Qu.: 0.69454
Max.
: 3.03422
Dari summary di atas dapat dilihat terdapat dua class yaitu 0 dan 1.
Class 0 berjumlah 980 instance dan class 1 berjumlah 20 intance. Di
bawah ini adalah sebaran data kedua class.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 213
Gambar 126. Sebaran dataset hacide.
Jika data ini diklasifikasi dengan algoritma-algoritma yang telah
dijelaskan pada bab-bab sebelumnya maka hasilnya adalah sebagai
berikut.
KNN
Berikut adalah hasil klasifikasi data di atas dengan algoritma KNN.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 245
3
1
0
2
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.988
(0.9653, 0.9975)
0.98
0.2622
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
:
:
:
:
0.4000
1.0000
1.0000
0.9879
214 │ M. Reza Faisal & Dodon T. Nugrahadi
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
0.0200
0.0080
0.0080
0.7000
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
Gambar 127. Kurva ROC klasifikasi dataset hacide dengan KNN.
Naïve Bayes
Berikut adalah hasil klasifikasi data di atas dengan algoritma Naïve
Bayes.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 245
3
1
0
2
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.988
(0.9653, 0.9975)
0.98
0.2622
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 215
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4000
1.0000
1.0000
0.9879
0.0200
0.0080
0.0080
0.7000
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
Gambar 128. Kurva ROC klasifikasi dataset hacide dengan Naïve Bayes.
SVM
Berikut adalah hasil klasifikasi data di atas dengan algoritma SVM.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 245
3
1
0
2
216 │ M. Reza Faisal & Dodon T. Nugrahadi
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.988
(0.9653, 0.9975)
0.98
0.2622
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4000
1.0000
1.0000
0.9879
0.0200
0.0080
0.0080
0.7000
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
Gambar 129. Kurva ROC klasifikasi dataset hacide dengan SVM.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 217
Decision Tree
Berikut adalah hasil klasifikasi data di atas dengan algoritma Decision
Tree.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 245
3
1
0
2
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.988
(0.9653, 0.9975)
0.98
0.2622
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4000
1.0000
1.0000
0.9879
0.0200
0.0080
0.0080
0.7000
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
218 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 130. Kurva ROC klasifikasi dataset hacide dengan Decision Tree.
Kinerja dari setiap algoritma di atas menghasilkan nilai yang sama.
Dapat dilihat pada confusion matrix setiap algoritma di atas, seluruh
instance class 0 dapat diprediksi dengan benar. Sedangkan instace class
1 tidak semuanya dapat dipredeksi dengan benar, lebih 50 persen
instance class 1 diprediksi sebagai class 0.
Walau akurasi yang didapatkan adalah 0.988 tetapi classifier gagal
melakukan prediksi class positif atau class minoritas dengan baik. Misal
class 1 adalah class orang “penderita kanker”, artinya classifier tidak
dapat mendeteksi penyakit kanker dengan benar.
11.2 Solusi Masalah
Ada 2 cara yang umumnya digunakan untuk menyelesaikan masalah
klasifikasi class tidak seimbang, yaitu:
1. Pendekatan data.
Solusi ini bertujuan untuk menyeimbangkan data.
Cara
menyeimbangkan data yang dapat dilakukan terbagi atas 2 cara
yaitu:
- Undersampling, mengurangi class mayoritas agar jumlahnya
sebanding dengan class minoritas.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 219
Oversampling, menambah class minoritas agar jumlahnya
sebanding dengan class mayoritas.
- Gabungan undersampling dan oversampling.
2. Pendekatan algoritma.
Solusi ini bertujuan menyelesaikan masalah dengan
memodifikasi algoritma yang sudah ada atau membuat
algoritma klasifikasi baru agar dapat menyelesaikan masalah
class tidak seimbang.
Jika penyelesaikan masalah
memanfaatkan algoritma-algoritma yang sudah ada dengan
modifikasi cara penggunaannya, maka cara yang dapat
digunakan adalah sebagai berikut:
- Bagging, membangun beberapa model dengan algoritma
yang sama (multiple classifier) dari sub sample yang berbeda
dari data training.
- Boosting, membangun beberapa model dengan algoritma
yang sama yang mana masing-masing model belajar untuk
memperbaiki kesalahan prediksi dari model sebelumnya.
- Stack, membangun beberapa model yang terdiri atas
algoritma yang berbeda jenis (campuran dari KNN, naïve
bayes, SVM, decision tree dan lain-lain) dan model
supervisor yang belajar bagaimana mencari cara terbaik
untuk mengabungkan prediksi dari model utama.
-
Tetapi dalam praktiknya pendekatan algoritma perlu bantuan
preprocessing data untuk pembagian data. Hal ini bertujuan
untuk menghasilkan kemampuan prediksi yang bagus.
11.3 Dataset Class Tidak Seimbang
Dataset class tidak seimbang yang digunakan pada buku ini adalah
dataset hacide. Dataset hacide didapat dari package ROSE. Untuk
menginstall package ROSE digunakan perintah berikut ini.
install.packages("ROSE")
220 │ M. Reza Faisal & Dodon T. Nugrahadi
Untuk menggunakan dataset hacide digunakan kode di bawah ini.
library(ROSE)
data(hacide)
Maka akan dapat dilihat akan terdapat 2 obyek yaitu:
-
hacide.train, yang digunakan sebagai data training.
hacide.test yang digunakan sebagai data testing.
Summary data hacide.test adalah sebagai berikut.
cls
0:245
1: 5
x1
Min.
:-2.12655
1st Qu.:-0.32244
Median : 0.04004
Mean
: 0.02918
3rd Qu.: 0.37115
Max.
: 2.15575
x2
Min.
:-2.84904
1st Qu.:-0.57730
Median : 0.10856
Mean
: 0.09874
3rd Qu.: 0.82948
Max.
: 4.36886
Summary data hacide.traing adalah sebagai berikut.
cls
0:980
1: 20
x1
Min.
:-3.73468
1st Qu.:-0.39539
Median :-0.03025
Mean
:-0.03185
3rd Qu.: 0.35474
Max.
: 1.98859
x2
Min.
:-3.17886
1st Qu.:-0.78564
Median :-0.06871
Mean
:-0.06603
3rd Qu.: 0.69454
Max.
: 3.03422
Untuk melihat perbandingan class ini dapat digunakan perintah
berikut.
prop.table(table(hacide.train[,1]))
Sehingga didapat hasil sebagai berikut:
0
1
0.98 0.02
Artinya 98% adalah class 0 dan 2% adalah class1. Pada kasus class tidak
seimbang dikenal istilah Imbalance Ratio yang merupakan
perbandingan antara prosentase class mayoritas dengan prosentase
class minoritas.
Nilai IR untuk dataset hacide adalah:
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 221
𝐼𝑅 =
𝑝𝑟𝑜𝑠𝑒𝑛𝑡𝑎𝑠𝑒 𝑐𝑙𝑎𝑠𝑠 𝑚𝑎𝑦𝑜𝑟𝑖𝑡𝑎𝑠
98
=
= 49
𝑝𝑟𝑜𝑠𝑒𝑛𝑡𝑎𝑠𝑒 𝑐𝑙𝑎𝑠𝑠 𝑚𝑖𝑛𝑜𝑟𝑖𝑡𝑎𝑠
2
Semakin besar nilai IR maka dataset semakin tidak seimbang.
11.4 Solusi Pendekatan Data
Undersampling
Undersampling adalah membuat instance class minoritas menjadi lebih
sedikit. Kekurangan cara ini adalah dapat membuat kehilangan
informasi penting karena pengurangan instance.
Salah satu package yang dapat digunakan untuk proses undersampling
adalah package ROSE. Fungsi yang digunakan untuk melakukan proses
undersampling adalah:
ovun.sample(formula, data = train_data, method =
"under", N = total_data, seed = 1)
Keterangan:
-
formula adalah cara untuk menentukan target variable.
train_data adalah obyek yang menyimpan data training.
method adalah metode yang akan digunakan, untuk proses
undersampling maka digunakan nilai “under”.
total_data adalah jumlah instance yang diinginkan.
Sebagai contoh untuk membuat jumlah instance mayoritas menjadi
sama dengan jumlah instance minoritas digunakan cara sebagai berikut.
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "under", N = 40, seed = 1)$data
Karena jumlah instance minoritas adalah 20 instance maka agar untuk
menyeimbangkan dataset kita harus membuat jumlah instance
mayoritas adalah 20 instance juga. Sehingga nilai N pada kode di atas
adalah 40. Kemudian nilai method=”under” untuk melakukan proses
undersampling.
222 │ M. Reza Faisal & Dodon T. Nugrahadi
Berikut adalah hasil perhitungan kinerja classifier-classifier setelah
dilakukan proses undersampling.
KNN
Kode yang digunakan dengan classifier KNN adalah sebagai berikut.
library(kknn)
library(caret)
library(ROCR)
library(ROSE)
setwd("D:/ClassificationR")
#membaca data training & data testing
data(hacide)
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "under", N = 40, seed = 1)$data
data.test = hacide.test
#proses 2
#membuat model
model = kknn(cls~., data.training, data.test[,-1], k =
5, distance = 1, kernel = "triangular")
#menghitung kinerja
performance.value = confusionMatrix(model$fitted.values,
data.test[,1], positive = "1")
print(performance.value)
roc.prediction =
prediction(as.numeric(as.factor(model$fitted.values)),
as.numeric(as.factor(data.test[,1])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Kinerja berupa confusion matrix yang dihasilkan adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 237
1
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 223
1
8
4
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.964
(0.9328, 0.9834)
0.98
0.9696
Kappa : 0.4552
Mcnemar's Test P-Value : 0.0455
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.8000
0.9673
0.3333
0.9958
0.0200
0.0160
0.0480
0.8837
'Positive' Class : 1
Luas AUC yang dihasilkan adalah sebagai berikut:
"Luas AUC: 0.883673469387755"
Dan berikut adalah kinerja classifier yang digambarkan dalam kurva
ROC.
Gambar 131. Kurva ROC untuk kasus klasifikasi dengan KNN dan
undersampling.
224 │ M. Reza Faisal & Dodon T. Nugrahadi
Naïve Bayes
Kode yang digunakan dengan classifier naïve bayes adalah sebagai
berikut.
library(e1071)
library(caret)
library(ROCR)
library(ROSE)
setwd("D:/ClassificationR")
#membaca data training & data testing
data(hacide)
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "under", N = 40, seed = 1)$data
data.test = hacide.test
#proses 2
#membuat model
model = naiveBayes(cls~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-1])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,1], positive = "1")
print(performance.value)
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,1])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Berikut adalah kinerja dalam bentuk confusion matrix.
Confusion Matrix and Statistics
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 225
Reference
Prediction
0
1
0 217
0
1 28
5
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.888
(0.8422, 0.9243)
0.98
1
Kappa : 0.2366
Mcnemar's Test P-Value : 3.352e-07
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0000
0.8857
0.1515
1.0000
0.0200
0.0200
0.1320
0.9429
'Positive' Class : 1
Dan luas AUC adalah sebagai berikut.
"Luas AUC: 0.942857142857143"
Kurva ROC dari kasus ini adalah sebagai berikut.
226 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 132. Kurva ROC untuk kasus klasifikasi dengan Naïve Bayes dan
undersampling.
SVM
Kode yang digunakan dengan classifier SVM adalah sebagai berikut.
library(kernlab)
library(caret)
library(ROCR)
library(ROSE)
setwd("D:/ClassificationR")
#membaca data training & data testing
data(hacide)
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "under", N = 40, seed = 1)$data
data.test = hacide.test
#proses 2
#membuat model
model = ksvm(cls~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-1])
#menghitung kinerja
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 227
performance.value = confusionMatrix(predict_result,
data.test[,1], positive = "1")
print(performance.value)
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,1])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Berikut adalah kinerja classifier dalam bentuk confusion matrix.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 231
0
1 14
5
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.944
(0.9078, 0.969)
0.98
0.999814
Kappa : 0.3976
Mcnemar's Test P-Value : 0.000512
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0000
0.9429
0.2632
1.0000
0.0200
0.0200
0.0760
0.9714
'Positive' Class : 1
Dan luas AUC adalah sebagai berikut.
"Luas AUC: 0.971428571428571"
228 │ M. Reza Faisal & Dodon T. Nugrahadi
Dan berikut adalah kurva ROC yang dihasilkan dari perhitungan kinerja
classifier ini.
Gambar 133. Kurva ROC untuk kasus klasifikasi dengan SVM dan
undersampling.
Decision Tree
Kode yang digunakan dengan classifier decision tree adalah sebagai
berikut.
library(RWeka)
library(caret)
library(ROCR)
library(ROSE)
setwd("D:/ClassificationR")
#membaca data training & data testing
data(hacide)
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "under", N = 40, seed = 1)$data
data.test = hacide.test
#proses 2
#membuat model
model = J48(cls~., data.training)
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 229
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-1])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,1], positive = "1")
print(performance.value)
roc.prediction =
prediction(as.numeric(as.factor(predict_result)),
as.numeric(as.factor(data.test[,1])))
roc.tpr.fpr = performance(roc.prediction,"tpr","fpr")
roc.auc = performance(roc.prediction,"auc")
plot(roc.tpr.fpr, col="red",lty=3)
abline(a=0, b= 1)
#menampilkan hasil perhitungan kinerja dan luas AUC
print(paste("Luas AUC:", roc.auc@y.values))
Kinerja berupa confusion matrix yang dihasilkan adalah sebagai berikut:
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 206
1
1 39
4
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.84
(0.7886, 0.8832)
0.98
1
Kappa : 0.1357
Mcnemar's Test P-Value : 4.909e-09
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.80000
0.84082
0.09302
0.99517
0.02000
0.01600
0.17200
0.82041
'Positive' Class : 1
230 │ M. Reza Faisal & Dodon T. Nugrahadi
Luas AUC yang dihasilkan adalah:
"Luas AUC: 0.820408163265306"
Dan berikut adalah kurva ROC yang dihasilkan.
Gambar 134. Kurva ROC untuk kasus klasifikasi dengan decision tree dan
undersampling
Pembahasan
Tabel di bawah ini adalah rangkuman kinerja dari 4 classifier di atas
setelah dilakukan proses undersampling.
Classifier
Accuracy
Sensitivity
Specificity
AUC
KNN
0.964
0.8000
0.9673
0.8836
Naïve Bayes
0.888
1.0000
0.8857
0.9428
SVM
0.944
1.0000
0.9429
0.9714
Decision Tree
0.84
0.8000
0.84082
0.8204
Nilai AUC dari classifier setelah proses undersampling lebih baik
daripada nilau AUC tanpa proses undersampling (AUC = 0.7). Tetapi
nilai accuracy dari classifier pada tabel di atas lebih kecil jika
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 231
dibandingkan dengan accuracy tanpa proses undersampling (accuracy
= 0.988).
Pada table nilai kinerja classifier di atas dapat dilihat kinerja SVM lebih
bagus jika dibandingkan algoritmat klasifikasi lainnya. Dan untuk
kasus ini proses undersampling dapat meningkatkan keberhasilan
prediksi class minoritas.
Oversampling
Membuat instance class minoritas menjadi lebih banyak. Cara ini
dikenal dengan istilah oversampling. Kekurangan cara ini adalah dapat
membuat overfitting.
Untuk melakukan proses oversampling digunakan perintah dengan
sintaks berikut ini.
ovun.sample(formula, data = train_data, method = "over",
N = total_data, seed = 1)
Keterangan:
-
formula adalah cara untuk menentukan target variable.
train_data adalah obyek yang menyimpan data training.
method adalah metode yang akan digunakan, untuk proses
oversampling maka digunakan nilai “over”.
total_data adalah jumlah instance yang diinginkan.
Sebagai contoh untuk membuat jumlah instance minoritas menjadi sama
dengan jumlah instance mayoritas digunakan cara sebagai berikut.
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "over", N = 1960, seed = 1)$data
Karena jumlah instance mayoritas adalah 980 instance maka agar untuk
menyeimbangkan dataset kita harus membuat jumlah instance
minoritas adalah 980 instance juga. Sehingga nilai N pada kode di atas
adalah 1960. Kemudian nilai method=”under” untuk melakukan proses
undersampling.
232 │ M. Reza Faisal & Dodon T. Nugrahadi
Berikut adalah hasil perhitungan kinerja classifier-classifier setelah
dilakukan proses oversampling.
KNN
Kinerja berupa confusion matrix dari classifier KNN untuk kasus ini
adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 244
3
1
1
2
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.984
(0.9595, 0.9956)
0.98
0.4387
Kappa : 0.4924
Mcnemar's Test P-Value : 0.6171
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4000
0.9959
0.6667
0.9879
0.0200
0.0080
0.0120
0.6980
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.697959183673469"
Dan berikut ini adalah kurva ROC kinerja classifier KNN untuk kasus
ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 233
Gambar 135. Kurva ROC untuk kasus klasifikasi dengan KNN dan
oversampling.
Naïve Bayes
Kinerja berupa confusion matrix dari classifier Naïve Bayes untuk kasus
ini adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 225
0
1 20
5
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.92
(0.8791, 0.9505)
0.98
1
Kappa : 0.3103
Mcnemar's Test P-Value : 2.152e-05
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
:
:
:
:
:
:
:
1.0000
0.9184
0.2000
1.0000
0.0200
0.0200
0.1000
234 │ M. Reza Faisal & Dodon T. Nugrahadi
Balanced Accuracy : 0.9592
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.959183673469388"
Dan berikut ini adalah kurva ROC kinerja classifier Naïve Bayes untuk
kasus ini.
Gambar 136. Kurva ROC untuk kasus klasifikasi dengan Naïve Bayes dan
oversampling.
SVM
Kinerja berupa confusion matrix dari classifier SVM untuk kasus ini
adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 241
1
1
4
4
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 235
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.98
(0.9539, 0.9935)
0.98
0.6160
Kappa : 0.6057
Mcnemar's Test P-Value : 0.3711
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.8000
0.9837
0.5000
0.9959
0.0200
0.0160
0.0320
0.8918
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.891836734693878"
Dan berikut ini adalah kurva ROC kinerja classifier SVM untuk kasus
ini.
Gambar 137. Kurva ROC untuk kasus klasifikasi dengan SVM dan
oversampling.
236 │ M. Reza Faisal & Dodon T. Nugrahadi
Decision Tree
Kinerja berupa confusion matrix dari classifier decision tree untuk kasus
ini adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 244
3
1
1
2
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.984
(0.9595, 0.9956)
0.98
0.4387
Kappa : 0.4924
Mcnemar's Test P-Value : 0.6171
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.4000
0.9959
0.6667
0.9879
0.0200
0.0080
0.0120
0.6980
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.697959183673469"
Dan berikut ini adalah kurva ROC kinerja classifier decision tree untuk
kasus ini.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 237
Gambar 138. Kurva ROC untuk kasus klasifikasi dengan decision tree dan
oversampling.
Pembahasan
Tabel di bawah ini adalah rangkuman kinerja dari 4 classifier di atas
setelah dilakukan proses oversampling.
Classifier
Accuracy
Sensitivity
Specificity
AUC
KNN
0.984
0.4000
0.9959
0.6979
Naïve Bayes
0.92
1.0000
0.9184
0.9591
SVM
0.98
0.8000
0.9837
0.8918
Decision Tree
0.984
0.4000
0.9959
0.6979
Nilai AUC terbaik pada tabel di atas adalah dimiliki oleh classifier Naïve
Bayes. Sedangkan untuk classifier KNN dan Decision Tree didapatkan
nilai AUC yang lebih kecil dibandingkan nilai AUC tanpa proses
oversampling.
238 │ M. Reza Faisal & Dodon T. Nugrahadi
Gabungan Undersampling & Oversampling
Pada sub bab ini akan dicontohkan cara menyeimbangkan data dengan
mengurangi jumlah instance class mayoritas dan menambah instance
class minoritas. Fungsi yang digunakan untuk melakukan proses ini
adalah sebagai berikut.
ovun.sample(formula, data = train_data, method = "both",
p = probality, N = total_data, seed = 1)
Keterangan:
-
formula adalah cara untuk menentukan target variable.
train_data adalah obyek yang menyimpan data training.
method adalah metode yang akan digunakan, untuk proses
undersampling dan oversampling maka digunakan nilai “both”.
probality adalah probilitas class minoritas baru yang akan
dihasilkan.
total_data adalah jumlah instance yang diinginkan.
Berikut ini adalah contoh penggunaan fungsi ini adalah sebagai berikut.
data.training = ovun.sample(cls ~ ., data =
hacide.train, method = "both", p = 0.5, N = 1000, seed =
1)$data
Pada contoh kode di atas tidak akan mengubah total jumlah data
training yaitu 1000. Tetapi yang dilakukan adalah mengurangi jumlah
instance class mayoritas dan menambah jumlah instance class minoritas
sehingga terjadi keseimbangan data. Kode di atas akan didapat 520
instance class mayoritas dan 480 instace class minoritas.
Selanjutnya akan dilihat kinerja masing-masing classifier setelah
dilakukan proses penyeimbangan data dengan cara di tas.
KNN
Kinerja berupa confusion matrix dari classifier KNN untuk kasus ini
adalah sebagai berikut.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 239
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 243
2
1
2
3
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.984
(0.9595, 0.9956)
0.98
0.4387
Kappa : 0.5918
Mcnemar's Test P-Value : 1.0000
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.6000
0.9918
0.6000
0.9918
0.0200
0.0120
0.0200
0.7959
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.795918367346939"
Dan berikut ini adalah kurva ROC kinerja classifier KNN untuk kasus
ini.
240 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 139. Kurva ROC untuk kasus klasifikasi dengan KNN dan
gabungan oversampling dan undersampling.
Naïve Bayes
Kinerja berupa confusion matrix dari classifier naïve bayes untuk kasus
ini adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 225
0
1 20
5
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.92
(0.8791, 0.9505)
0.98
1
Kappa : 0.3103
Mcnemar's Test P-Value : 2.152e-05
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
1.0000
0.9184
0.2000
1.0000
0.0200
0.0200
0.1000
0.9592
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 241
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.959183673469388"
Dan berikut ini adalah kurva ROC kinerja classifier naïve bayes untuk
kasus ini.
Gambar 140. Kurva ROC untuk kasus klasifikasi dengan Naïve Bayes dan
gabungan oversampling dan undersampling.
SVM
Kinerja berupa confusion matrix dari classifier SVM untuk kasus ini
adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 241
1
1
4
4
Accuracy : 0.98
95% CI : (0.9539, 0.9935)
242 │ M. Reza Faisal & Dodon T. Nugrahadi
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.6160
Kappa : 0.6057
Mcnemar's Test P-Value : 0.3711
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.8000
0.9837
0.5000
0.9959
0.0200
0.0160
0.0320
0.8918
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.891836734693878"
Dan berikut ini adalah kurva ROC kinerja classifier SVM untuk kasus
ini.
Gambar 141. Kurva ROC untuk kasus klasifikasi dengan SVM dan
gabungan oversampling dan undersampling.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 243
Decision Tree
Kinerja berupa confusion matrix dari classifier decision tree untuk kasus
ini adalah sebagai berikut.
Confusion Matrix and Statistics
Reference
Prediction
0
1
0 243
2
1
2
3
Accuracy
95% CI
No Information Rate
P-Value [Acc > NIR]
:
:
:
:
0.984
(0.9595, 0.9956)
0.98
0.4387
Kappa : 0.5918
Mcnemar's Test P-Value : 1.0000
Sensitivity
Specificity
Pos Pred Value
Neg Pred Value
Prevalence
Detection Rate
Detection Prevalence
Balanced Accuracy
:
:
:
:
:
:
:
:
0.6000
0.9918
0.6000
0.9918
0.0200
0.0120
0.0200
0.7959
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
"Luas AUC: 0.795918367346939"
Dan berikut ini adalah kurva ROC kinerja classifier decision tree untuk
kasus ini.
244 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 142. Kurva ROC untuk kasus klasifikasi dengan decision tree dan
gabungan oversampling dan undersampling.
Pembahasan
Tabel di bawah ini adalah rangkuman kinerja dari 4 classifier di atas
setelah dilakukan proses gabungan oversampling dan undersampling.
Classifier
Accuracy
Sensitivity
Specificity
AUC
KNN
0.984
0.6000
0.9918
0.7959
Naïve Bayes
0.92
1.0000
0.9184
0.9591
SVM
0.98
0.8000
0.9837
0.8918
Decision Tree
0.984
0.6000
0.9918
0.7959
Nilai AUC terbaik pada tabel di atas adalah dimiliki oleh classifier Naïve
Bayes.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 245
11.5 Solusi Pendekatan Algoritma
Bootstrap Aggregating (Bagging)
Cara kerja teknik ini dapat dilihat pada gambar di bawah ini.
Gambar 143. Skema teknik bagging.
Teknik bagging akan membagi data training T menjadi beberapa bagian,
misal sejumlah m. Kemudian dibuat model klasifikasi C sejumlah m.
Hasil prediksi setiap model P juga akan berjumlah m. Untuk
mendapatkan prediksi akhir Pf dilakukan dengan cara voting dari hasil
prediksi setiap model klasifikasi C.
Ciri utama dari teknik bagging ini adalah setiap model klasifikasi
menggunakan algoritma yang sama. Artinya jika C1 menggunakan
algoritma KNN maka C2, C3 … Cm juga menggunakan algoritma KNN.
Untuk kasus klasifikasi class tidak seimbang, dataset hacide yang
memiliki 980 instance class 0 dan 20 instance class 1, maka pembagian
data dapat dilakukan dengan membagi 980 instance class 0 menjadi 49
bagian dimana setiap bagian terdiri atas 20 intance class 0. Kemudian
20 instance class 1 akan digabung dengan setiap bagian class 0. Sehingga
akan dimiliki 49 bagian data dimana setiap bagiannya terdiri atas 20
instance class 0 dan 20 instance class 1. Dengan pembagian seperti ini
246 │ M. Reza Faisal & Dodon T. Nugrahadi
maka data akan seimbang tanpa harus menghilangkan data dengan
undersampling atau menambah data dengan oversampling. Tetapi cara
pemilihan data untuk setiap bagian data sebaiknya dilakukan dengan
baik dengan melihat sebaran data. Jangan sampai sebaran data terlalu
acak sehingga setiap model tidak dapat menghasilkan prediksi yang
bagus.
Cara voting yang dilakukan untuk memilih prediksi akhir Pf dapat
dilakukan dengan dua cara, yaitu:
-
-
Suara terbanyak, artinya nilai prediksi yang dihasilkan oleh lebih
50% dari jumlah classifier yang ada akan dijadikan prediksi akhir
Pf. Sebagai contoh jika ada 49 classifier yang digunakan, jika 30
classifier memprediksi sebagai class 1 maka prediksi akhir
adalah class 1.
Bounded minority rule, cara ini bertujuan menentukan prediksi
akhir Pf sebagai class minoritas jika dan hanya jika seluruh
classifier memprediksi sebagai class minoritas. Sebagai contoh
jika ada 49 classifier yang digunakan, maka seluruh 49 classifier
harus memprediksi class 1 (class minoritas) untuk menentukan
Pf adalah class 1. Jika ada satu saja classifier yang memberikan
hasil prediksi class 0 maka hasil prediksi akhirnya menjadi class
0.
Boosting
Teknik boosting mirip dengan teknik bagging yaitu menggunakan
beberapa model dengan algoritma yang sama.
Pada teknik bagging setiap model memiliki bobot (weight) yang sama.
Sedangkan pada teknik boosting setiap model diberikan bobot yang
berbeda, sehingga prediksi akhir ditentukan berdasarkan voting dengan
bantuan bobot dari masing-masing model. Cara ini membuat teknik
boosting dapat memperbaiki kesalahan prediksi dari model
sebelumnya.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 247
Gambar 144. Skema teknik boosting.
Pada gambar di atas dapat dilihat terdapat Test Sample (TS) pada setiap
iterasi yang berfungsi untuk menguji classifier pada setiap iterasi dan
sekaligus memeriksa kesalahan yang dilakukan. Jika terjadi kesalahan
maka akan dilakukan update bobot (weight). Hal ini dilakukan pada
setiap iterasi, sehingga diakhir didapatkan model yang terbaik.
Stacking
Perbedaan yang mendasar antara teknik stacking dengan kedua teknik
sebelumnya adalah teknik stacking menggunakan algoritma yang
berbeda-beda sebagai classifier. Artinya C1 dapat menggunakan
algoritma KNN, C2 menggunakan algoritma Naïve Bayes, C3
menggunakan algoritma SVM dan seterusnya.
248 │ M. Reza Faisal & Dodon T. Nugrahadi
Gambar 145. Skema teknik stacking.
11.6 Catatan
Data pada kasus dunia nyata itu bersifat unik. Sebaran instance-instance
suatu dataset pada data space dapat berbeda-beda. Jumlah class yang
terdapat pada suatu data pun dapat berbeda. Perbandingan jumlah
instance untuk masing-masing class pada suatu data juga berbeda-beda.
Ada data yang terpisah sehingga gampang untuk diselesaikan oleh
seluruh algoritma klasifikasi yang ada, sebagai contoh dataset Iris. Ada
juga data yang saling overalapping antara class-class didalamnya
ditambah ketidakseimbangan class di dalamnya, hal membuat kasus ini
sudah diselesaikan oleh algortima klasifikasi yang ada.
Suatu algoritma klasifikasi yang berhasil menyelesaikan kasus klasifikasi
dataset A belum tentu dapat dengan baik menyelesaikan kasus klasifikasi
dataset B. Begitu juga proses oversampling dan undersampling belum tentu
dapat membantu menyelesaikan kasus klasifikasi data tidak seimbang. Pada
bab ini dapat dilihat bagaimana proses undersampling dan algoritma SVM
dapat menyelesaikan kasus klasifikasi data tidak seimbang dataset hacide. Dan
pada kasus lain proses oversampling dan algoritma SVM tidak dapat
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 249
memberikan prediksi yang bagus jika dibandingkan dengan hasil prediksi dari
proses oversampling dan algoritma Naïve Bayes.
Dari catatan di atas maka dapat disimpulkan penyelesaikan klasifikasi suatu
dataset merupakan proses pencarian preprocessing data dan algoritma yang
cocok untuk mendapatkan kinerja yang terbaik.
250 │ M. Reza Faisal & Dodon T. Nugrahadi
Daftar Pustaka
1.
Max Kuhn. Contributions from Jed Wing, Steve Weston, Andre
Williams, Chris Keefer, Allan Engelhardt, Tony Cooper, Zachary
Mayer, Brenton Kenkel, the R Core Team, Michael Benesty, Reynald
Lescarbeau, Andrew Ziem, Luca Scrucca, Yuan Tang, Can Candan
and Tyler Hunt. (2016). caret: Classification and Regression
Training. R package version 6.0-73. https://CRAN.Rproject.org/package=caret.
2.
Alexandros Karatzoglou, Alex Smola, Kurt Hornik, Achim Zeileis
(2004). kernlab - An S4 Package for Kernel Methods in R. Journal of
Statistical
Software
11(9),
1-20.
URL
http://www.jstatsoft.org/v11/i09/.
3.
David Meyer, Evgenia Dimitriadou, Kurt Hornik, Andreas
Weingessel and Friedrich Leisch (2015). e1071: Misc Functions of the
Department of Statistics, Probability Theory Group (Formerly:
E1071), TU Wien. R package version 1.6-7. https://CRAN.Rproject.org/package=e1071.
4.
Klaus Schliep and Klaus Hechenbichler (2016). kknn: Weighted kNearest Neighbors. R package version 1.3.1. https://CRAN.Rproject.org/package=kknn.
5.
Hornik K, Buchta C and Zeileis A (2009). “Open-Source Machine
Learning: R Meets Weka.” _Computational Statistics_, *24*(2), pp.
225-232.
doi:
10.1007/s00180-008-0119-7
(URL:
http://doi.org/10.1007/s00180-008-0119-7).
6.
Adrian A. Dragulescu (2014). xlsx: Read, write, format Excel 2007
and Excel 97/2000/XP/2003 files. R package version 0.5.7.
https://CRAN.R-project.org/package=xlsx.
7.
Brian Ripley and Michael Lapsley (2016). RODBC: ODBC Database
Access.
R
package
version
1.3-14.
https://CRAN.Rproject.org/package=RODBC.
8.
Ligges, U. and Mächler, M. (2003). Scatterplot3d - an R Package for
Visualizing Multivariate Data. Journal of Statistical Software 8(11),
1-20.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 251
9.
January Weiner (2015). pca3d: Three Dimensional PCA Plots. R
package version 0.8. https://CRAN.R-project.org/package=pca3d.
10. Sing T, Sander O, Beerenwinkel N and Lengauer T (2005). “ROCR:
visualizing classifier performance in R.” _Bioinformatics_, *21*(20),
pp. 7881. <URL: http://rocr.bioinf.mpi-sb.mpg.de>.
11. Nicola Lunardon, Giovanna Menardi, and Nicola Torelli (2014).
ROSE: a Package for Binary Imbalanced Learning. R Journal, 6(1),
82-92.
252 │ M. Reza Faisal & Dodon T. Nugrahadi
Tentang Penulis
M Reza Faisal, lahir di Banjarmasin, 20 Desember
1976. Pendidikannya, lulus SMA tahun 1995.
Pernah Kuliah di Informatika Universitas
Pasundan (Unpas) dan Fisika Institut Teknologi
Bandung (ITB). Sejak kuliah telah aktif menulis
sebagai di beberapa majalah komputer seperti
Mikrodata, CHIP, dan InfoKomputer. Setelah
menamatkan kuliah kemudian bekerja sebagai pengembang software
di perusahaan swasta dan trainer kursus komputer di Bandung.
Penulis juga aktif komunitas teknologi komputer dengan berbagi
pengetahuan dalam bentuk blog atau ebook gratis yang fokus pada
pembahasan teknologi Microsoft. Sehingga tahun 2008 mendapat
penghargaan sebagai Microsoft Most Valuable Professional sampai
sekarang.
Kemudian pada akhir tahun 2008 kembali ke Banjarmasin menjadi
dosen di Ilmu Komputer Universitas Lambung Mangkurat (ULM).
Pada tahun 2010 melanjutkan studi di jenjang S2 di Informatika ITB
konsentrasi Rekayasa Perangkat Lunak. Dan tahun 2015 melanjutkan
ke pendidikan jenjang S3 di bidang Bioinformatika di Kanazawa
University, Jepang.
Dodon T Nugrahadi, lahir di Banjarmasin, 12
Januari 1980. Pendidikannya, lulus SMA tahun
1998. Kemudian melanjutkan kuliah Informatika Universitas Kristen Petra Surabaya
dengan konsentrasi bidang Sistem Informasi.
Dan pada tahun 2006 melanjutkan kuliah
jenjang S2 di Magister Teknologi Informasi
Universitas Gajah Mada Yogyakarta.
Setelah selesai kuliah kemudian tahun 2009 kembali ke Banjarmasin
menjadi dosen di Ilmu Komputer Universitas Lambung Mangkurat
(ULM). Dan sejak tahun 2012 menjabat sebagai Kepala Program Studi
Ilmu Komputer sampai sekarang. Saat ini penulis fokus riset bidang
data science dan jaringan komputer.
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R │ 253
View publication stats
Download