BelajarDataScience ISBN
BelajarDataScience ISBN
net/publication/312160783
CITATIONS READS
11 21,850
2 authors:
Some of the authors of this publication are also working on these related projects:
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.
M. Reza Faisal
Dodon T. Nugrahadi
Belajar Data Science: Klasifikasi dengan Bahasa Pemrograman R
© 2019 M. Reza Faisal & Dodon T. Nugrahadi
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.
Penerbit
Scripta Cendekia
Banjarbaru, Kalimantan Selatan, Indonesia
E: scriptacendekia@gmail.com
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.
Selain masalah filter email spam juga ada masalah lain seperti:
1. Klasifikasi.
2. Prediksi.
3. Clustering.
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:
Istilah-Istilah
Sebelum membahas tentang machine learning lebih dalam, maka pada
sub bab ini akan disebutkan dan diterangkan terminologi atau istilah-
istilah yang umum digunakan.
1. Sepal.Length.
2. Sepal.Width.
3. Petal.Length.
4. Petal.Width.
5. 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.
Untuk teknik pembagian dataset menjadi training dan test set akan
diterangkan pada bab yang lain.
Tipe
Machine learning dapat dibedakan menjadi dua tipe. Tipe yang
dimaksudkan di sini adalah tipe algoritma yaitu:
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.
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
1. K-Nearest Neighbors.
2. Naïve Bayes.
3. Suport Vector Machine.
4. Decision Trees.
5. Linear Regression.
6. 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
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.
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.r-
project.org/bin/windows/base/.
Klik link “Download R.3.3.2 for Windows. Nama file installernya adalah
R.3.3.2-win.exe. File ini berukuran sekitar 70MB.
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.
Gambar 17. Window Microsoft R Open 3.3.1 – Lisensi Math Kernel Library.
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.
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"))
}
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.
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. Maka akan
ditampilkan window grafik seperti berikut ini.
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.
Gambar 30. Window RStudio Setup - Memilih lokasi folder Start Menu.
RStudio juga memiliki fitur auto complete kode seperti terlihat pada
gambar di bawah ini.
Installasi
Setelah installer selesai didownload. Klik double pada file installer.
Maka akan ditampilkan window seperti gambar di bawah ini.
Klik tombol Install, maka proses installasi akan dilakukan seperti yang
terlihat pada gambar di bawah ini.
Gambar 39. Proses installasi R Tool 0.5 for Visual Studio 2015 selesai.
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.
install.packages(“NamaPackage”)
install.packages("kernlab")
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.
atau
library(“NamaPackage”)
library("kernlab")
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")
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.
Iris adalah salah satu dataset yang umum digunakan sebagai latihan
atau contoh pemrograman R.
write.csv()
Fungsi write.csv() untuk menulis file yang berisi nilai-nilai yang
dipisahkan oleh koma. Format file yang dihasilkan adalah file text.
write.csv(ObjectName, "FileName")
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")
write.table(iris, "data.txt")
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")
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")
data_txt = read.table("data.txt")
install.packages("xlsx")
Setelah proses installasi package “xslx” selesai, muat library ini dengan
perintah di bawah ini.
library(xlsx)
install.packages("RMySQL")
library(RMySQL)
install.packages("RODBC")
Ketik obyek data_iris pada R console untuk melihat isi data tabel iris.
head(ObjekName, RowNumber)
tail()
Untuk menampilkan sejumlah data dari akhir digunakan fungsi tail().
Sintaks fungsi ini adalah sebagai berikut.
tail(ObjekName, RowNumber)
View()
Fungsi View() digunakan untuk menampilkan data dalam bentuk tabel.
Untuk menampilkan data dari obyek data_txt, gunakan perintah di
bawah ini.
Gambar 45. Output fungsi View() pada R Tool for Visual Studio.
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
data_txt$Sepal.Width
data_txt[,1:4]
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]
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"),]
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
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.Length"
"Petal.Width" "Species"
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 virginica
50 50 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 Sepal.Width
Min. :4.300 Min. :2.000
1st Qu.:5.100 1st Qu.:2.800
Median :5.800 Median :3.000
Mean :5.843 Mean :3.057
3rd Qu.:6.400 3rd Qu.:3.300
Max. :7.900 Max. :4.400
Petal.Length Petal.Width
Min. :1.000 Min. :0.100
1st Qu.:1.600 1st Qu.:0.300
Median :4.350 Median :1.300
Mean :3.758 Mean :1.199
3rd Qu.:5.100 3rd Qu.:1.800
Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
plot()
Fungsi plot() untuk membuat titik dari nilai sumbu x dan sumbu y.
Sintaks umum fungsi plot() adalah sebagai berikut.
plot(x, y)
plot(iris[,1], iris[,2])
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.
scatterplot3()
Untuk membuat plot 3 dimensi diperlukan package tambahan yaitu
scatterplot3d. Langkah pertama adalah menginstall package ini dengan
fungsi berikut.
install.packages("scatterplot3d")
library(scatterplot3d)
scatterplot3d(x,y,z, main="YourTitle")
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.
library(rgl)
plot3d(x, y, z)
Untuk membuat plot dari data mtcars dapat dilihat pada kode di bawah
ini.
hist(x)
hist(mtcars[,1])
atau
hist(mtcars$mpg)
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))
pie()
Fungsi pie() digunakan untuk membuat grafik pie. Sintaks fungsi ini
adalah sebagai berikut.
pie(x, labels = y)
Jika dimiliki obyek table maka akan lebih mudah untuk membuat grafik
pie. Sebagai contoh sebagai berikut.
pie(table(iris[,5]))
barplot(x)
boxplot(iris[,1:4])
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)
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)
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.
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.
atau
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 Petal.Width
5.843333 3.057333 3.758000 1.199333
biplot(iris.pca)
library(pca3d)
Parameter group diisi dengan feature dataset yang menyimpan label setiap
instance. Berikut adalah grafik yang dihasilkan.
Visualisasi 3D
Untuk membuat grafik 3 dimensi digunakan fungsi pca3d() dari
package pca3d yang telah digunakan pada sub bab sebelumnya.
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)
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.
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.
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
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:
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
Data harus dibagi menjadi dua, misal 80 instace untuk proses training
dan 20 instace untuk pengujian.
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.
Ketiga, kotak ketiga akan menjadi data testing dan sisanya menjadi data
training.
Keempat, kotak keempat akan menjadi data testing dan sisanya menjadi
data training.
Kelima, kotak kelima akan menjadi data testing dan sisanya menjadi
data training.
(10 setosa, (10 setosa, (10 setosa, (10 setosa, (10 setosa,
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.
Sedangkan jika data testing disimpan dalam obyek data_testing. Dan isi
obyek data_testing adalah sebagai berikut.
F.1 F.2 F.3 F.4 F5 TV
1 6.7 3.3 5.7 2.5 class1
2 6.7 3.0 5.2 2.3 class2
3 5.1 3.5 1.4 0.2 class1
4 6.7 3.0 5.2 2.3 class2
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 probability
[1,] class1 1
[2,] class1 0.6
[3,] class1 1
[4,] class2 0.9
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)
Jika digunakan data hasil prediksi dan data test/aktual data di atas
maka confusion matrix dapat digambar sebagai berikut.
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.
(𝛽 2 + 1)𝑃 × 𝑅
𝐹𝛽 =
𝛽2𝑃 + 𝑅
𝑃×𝑅
𝐹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.
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.
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.
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
View(iris)
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)
summary(iris)
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])
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])
Titanic
Sex
Class Male Female
1st 0 0
2nd 0 0
3rd 35 17
Crew 0 0
Sex
Class Male Female
1st 118 4
2nd 154 13
3rd 387 89
Crew 670 3
Sex
Class Male Female
1st 5 1
2nd 11 13
3rd 13 14
Crew 0 0
Sex
Class Male Female
1st 57 140
2nd 14 80
3rd 75 76
Crew 192 20
View(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.
data_titanic = as.data.frame(Titanic)
data_titanic = x[idx,]
Selanjutnya untuk melihat struktur obyek data_titanic dapat dilakan
dengan kode berikut.
str(data_titanic)
summary(data_titanic)
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.
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")
yeast = read.table("yeast.data")
str(yeast)
summary(yeast)
V6 V7 V8
V9 V10
Min. :0.5000 Min. :0.0000 Min. :0.0000 Min.
:0.0000 CYT :463
1st Qu.:0.5000 1st Qu.:0.0000 1st Qu.:0.4800 1st
Qu.:0.2200 NUC :429
Median :0.5000 Median :0.0000 Median :0.5100
Median :0.2200 MIT :244
Mean :0.5047 Mean :0.0075 Mean :0.4999 Mean
:0.2762 ME3 :163
3rd Qu.:0.5000 3rd Qu.:0.0000 3rd Qu.:0.5300 3rd
Qu.:0.3000 ME2 : 51
Max. :1.0000 Max. :0.8300 Max. :0.7300 Max.
:1.0000 ME1 : 44
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.
Pada sub bab ini juga akan disiapkan data untuk kasus klasifikasi binary
class dan multi class.
setwd("D:/ClassificationR")
Kode di atas harus ditulis disetiap file kode program R, agar fungsi-
fungsi dalam file kode program dapat membaca file data pada working
directory. Atau menulis dan menyimpan file output dari fungsi ke
dalam working directory.
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
#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.
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)
#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.
#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)
#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)
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:
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)
Keterangan:
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)
Keterangan:
Rancangan Aplikasi 3
Pada aplikasi ketiga ini akan digunakan seluruh data hasil pembagian
data pada cross validation. Karena pembagian data menggunakan 5-
data.training = read(file_training_data)
data.testing = read(file_testing_data)
model = training(data.training)
predict(model, data.testing)
yes
is data exist?
no
average_result = all_result / N
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.
install.packages("kknn")
7.3 Sintaks
Sintaks fungsi kknn() adalah sebagai berikut.
Keterangan:
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")
model$fitted.values
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 actual
[1,] "setosa" "setosa"
[2,] "setosa" "setosa"
[3,] "setosa" "setosa"
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")
setwd("D:/ClassificationR")
#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:
Reference
Prediction setosa versicolor
setosa 10 0
versicolor 0 10
Accuracy : 1
95% CI : (0.8316, 1)
No Information Rate : 0.5
P-Value [Acc > NIR] : 9.537e-07
Kappa : 1
Sensitivity : 1.0
Specificity : 1.0
Pos Pred Value : 1.0
Neg Pred Value : 1.0
Prevalence : 0.5
Detection Rate : 0.5
Detection Prevalence : 0.5
Balanced Accuracy : 1.0
setwd("D:/ClassificationR")
#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)
output_object_name = prediction(prediction_value,
actual_value)
Fungsi yang kedua adalah performance(). Sintaks dari fungsi ini adalah
sebagai berikut.
output_object_name =
performance(prediction_output_object, value1, value2)
output_object_name =
performance(prediction_output_object, value1)
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"
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")
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()
1. acc: accuracy.
2. err: error rate.
3. fpr: false positive rate.
4. fall: fallout, nilai ini sama dengan fpr.
5. tpr: true positive rate.
6. rec: recall sama dengan tpr.
7. sens: sensitivity sama dengan tpr.
8. fnr: false negative rate.
9. miss: nilai ini sama dengan fnr.
10. tnr: true negative rate.
11. spec: specificity sama dengan tnr.
12. ppv: positive predictive value.
13. prec: precision sama dengan ppv.
14. npv: negative predictive value.
15. pcfall: prediction-conditioned fallout.
16. pcmiss: prediction-conditioned miss.
17. rpp: rate of positive preditions.
18. rnp: rate of negative prediction.
19. phi: phi correlation coefficient.
20. mat: Matthew correlation coeficient.
21. mi: mutual information.
22. chisq: chi square test statistic.
23. odds: odds ratio.
24. lift: lift value.
25. f: precision-recall F measure.
26. rch: ROC convex hull.
27. auc: area under the curve.
28. prbe: precision-recall break-even point.
29. cal: calibration error.
30. mxe: mean cross-entropy.
31. 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.
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.
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.
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.
1. Akurasi rata-rata.
2. Sensitivity rata-rata.
3. Specificity rata-rata.
4. Luas AUC rata-rata.
Selain itu aplikasi ini juga akan menggambar perhitungan ROC dari
setiap data dalam sebuah grafik.
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
#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)
}
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.
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.
setwd("D:/ClassificationR")
#variables
a_accuracy = 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"))
#menghitung kinerja
performance.value =
confusionMatrix(model$fitted.values, data.test[,5])
print("-----------------------------------------------
-")
print(performance.value)
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]
}
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 : 0.9667
95% CI : (0.8278, 0.9992)
No Information Rate : 0.3333
P-Value [Acc > NIR] : 2.963e-13
Kappa : 0.95
Mcnemar's Test P-Value : NA
Statistics by Class:
Reference
Prediction setosa versicolor virginica
setosa 10 0 0
versicolor 0 10 1
virginica 0 0 9
Overall Statistics
Accuracy : 0.9667
95% CI : (0.8278, 0.9992)
No Information Rate : 0.3333
P-Value [Acc > NIR] : 2.963e-13
Kappa : 0.95
Mcnemar's Test P-Value : NA
Statistics by Class:
Reference
Prediction setosa versicolor virginica
setosa 10 0 0
versicolor 0 7 0
virginica 0 3 10
Overall Statistics
Accuracy : 0.9
95% CI : (0.7347, 0.9789)
No Information Rate : 0.3333
P-Value [Acc > NIR] : 1.665e-10
Kappa : 0.85
Mcnemar's Test P-Value : NA
Statistics by Class:
Reference
Prediction setosa versicolor virginica
setosa 10 0 0
versicolor 0 9 2
virginica 0 1 8
Overall Statistics
Accuracy : 0.9
95% CI : (0.7347, 0.9789)
No Information Rate : 0.3333
P-Value [Acc > NIR] : 1.665e-10
Kappa : 0.85
Mcnemar's Test P-Value : NA
Statistics by Class:
Reference
Prediction setosa versicolor virginica
setosa 10 0 0
versicolor 0 10 0
virginica 0 0 10
Overall Statistics
Accuracy : 1
95% CI : (0.8843, 1)
No Information Rate : 0.3333
P-Value [Acc > NIR] : 4.857e-15
Kappa : 1
Mcnemar's Test P-Value : NA
Statistics by Class:
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"
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.
Sunny.
Overcast.
Rainy.
Maka berikut ini adalah kemungkinan yang terjadi.
Hot.
Mild.
Cool.
Berikut ini adalah kemungkinan yang terjadi.
High.
Normal.
Berikut ini adalah kemungkinan yang terjadi untuk feature ini.
True.
False.
WIND play = yes play = no Total
Berikut ini adalah macam-macam Naïve Bayes untuk berbagai tipe data,
yaitu:
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:
Keterangan:
predict(model, testing_data)
Keterangan:
setwd("D:/ClassificationR")
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] = "OUTLOOK"
names(data.training)[2] = "TEMP"
names(data.training)[3] = "HUMIDITY"
names(data.training)[4] = "WINDY"
names(data.training)[5] = "PLAY"
#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.
> 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.
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])
print(comparation_result)
Baris pertama berfungsi untuk memuat package e1071, agar fungsi
naiveBayes() dapat digunakan.
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.
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])
A-priori probabilities:
Y
setosa versicolor
Conditional probabilities:
Sepal.Length
Y [,1] [,2]
setosa 5.0425 0.3601193
versicolor 5.8950 0.4517487
Sepal.Width
Y [,1] [,2]
setosa 3.4575 0.3928120
versicolor 2.7450 0.3063013
Petal.Length
Y [,1] [,2]
setosa 1.4650 0.1874936
versicolor 4.2325 0.4676112
Petal.Width
Y [,1] [,2]
setosa 0.2525 0.1109111
versicolor 1.3125 0.2040456
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")
#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 : 0.7455
95% CI : (0.702, 0.7855)
No Information Rate : 0.6773
P-Value [Acc > NIR] : 0.001091
Sensitivity : 0.6408
Specificity : 0.7953
Pos Pred Value : 0.5987
Neg Pred Value : 0.8229
Prevalence : 0.3227
Detection Rate : 0.2068
Detection Prevalence : 0.3455
Balanced Accuracy : 0.7181
setwd("D:/ClassificationR")
#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
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0
Specificity : 1.0
Pos Pred Value : 1.0
Neg Pred Value : 1.0
Prevalence : 0.5
Detection Rate : 0.5
Detection Prevalence : 0.5
Balanced Accuracy : 1.0
setwd("D:/ClassificationR")
#membuat model
model = naiveBayes(Survived~., data.training)
#melakukan prediksi
predict_result = predict(model, data.test[,-4])
#menghitung kinerja
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)
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.
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)
#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"))
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print("-----------------------------------------------
-")
print(performance.value)
a_sensitivity_versicolor = a_sensitivity_versicolor +
performance.value$byClass[2]
a_specificity_versicolor = a_specificity_versicolor +
performance.value$byClass[5]
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.
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.
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.
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")
library(kernlab)
Keterangan:
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)
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"
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])
setwd("D:/ClassificationR")
#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 : 1
95% CI : (0.8316, 1)
No Information Rate : 0.5
P-Value [Acc > NIR] : 9.537e-07
Kappa : 1
Sensitivity : 1.0
Specificity : 1.0
Pos Pred Value : 1.0
Neg Pred Value : 1.0
Prevalence : 0.5
Detection Rate : 0.5
Detection Prevalence : 0.5
Balanced Accuracy : 1.0
setwd("D:/ClassificationR")
#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
Kappa : 0.4584
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.4085
Specificity : 0.9832
Pos Pred Value : 0.9206
Neg Pred Value : 0.7772
Prevalence : 0.3227
Detection Rate : 0.1318
Detection Prevalence : 0.1432
Balanced Accuracy : 0.6958
setwd("D:/ClassificationR")
#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")
Berikut ini adalah contoh kode klasifikasi dataset Iris dengan SVM dan
pengukuran kinerja dengan ROC.
library(kernlab)
library(caret)
library(ROCR)
setwd("D:/ClassificationR")
#membuat model
model = ksvm(Species~., data.training)
#melakukan prediksi
predict_result = predict(model, 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)
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.
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)
}
setwd("D:/ClassificationR")
#variables
a_accuracy = 0
a_sensitivity = 0
a_specificity = 0
a_auc = 0
#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)
}
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
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print("-----------------------------------------------
-")
print(performance.value)
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]
}
Gambar 113. Kurva ROC kasus dataset Iris pada kasus multiclass
classification.
Di bawah ini adalah contoh decision tree yang dibentuk oleh dataset
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.
o Nama.
o Usia.
o Berat.
o Kelamin.
Sedangkan target variable adalah Hipertensi.
Keterangan:
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:
Berat
pasien5 (+)
pasien7 (+)
Berat
pasien4 (-)
pasien5 (+)
Wanita Pria
Ya pasien1 (+)
pasien4 (-)
pasien5 (+)
Wanita Pria
Ya Ya
Tidak
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")
library(RWeka)
10.3 Sintaks
Sintaks penggunaan fungsi J48() adalah sebagai berikut:
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])
Number of Leaves : 2
#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])
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)
Sex = 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 : 10
Size of the tree : 15
Gambar decision tree dari kasus Titanic ini adalah sebagai berikut.
Confusion Matrix
Pada sub bab ini akan dilakukan perhitungan kinerja dengan
menggunakan fungsi confusionMatrix().
setwd("D:/ClassificationR")
#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
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0
Specificity : 1.0
Pos Pred Value : 1.0
Neg Pred Value : 1.0
Prevalence : 0.5
Detection Rate : 0.5
Detection Prevalence : 0.5
Balanced Accuracy : 1.0
setwd("D:/ClassificationR")
#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)
Reference
Prediction No Yes
No 293 84
Yes 5 58
Accuracy : 0.7977
95% CI : (0.7571, 0.8343)
No Information Rate : 0.6773
P-Value [Acc > NIR] : 1.262e-08
Kappa : 0.4584
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.4085
Specificity : 0.9832
Pos Pred Value : 0.9206
Neg Pred Value : 0.7772
Prevalence : 0.3227
Detection Rate : 0.1318
Detection Prevalence : 0.1432
Balanced Accuracy : 0.6958
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")
#membuat model
model = J48(Species~., data.training)
#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)
Kode perhitungan kinerja fungsi J48() dengan ROC untuk kasus dataset
Titanic digunakan kode berikut ini.
library(RWeka)
library(ROCR)
setwd("D:/ClassificationR")
#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)
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) {
Gambar 123. Kurva ROC aplikasi 3 dengan fungsi J48() dan cross validation
kasus dataset Iris.
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)
}
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")
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"))
#melakukan prediksi
predict_result = predict(model, data.test[,-5])
#menghitung kinerja
performance.value = confusionMatrix(predict_result,
data.test[,5])
print("-----------------------------------------------
-")
print(performance.value)
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]
}
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).
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.
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 : 0.988
95% CI : (0.9653, 0.9975)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.2622
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity : 0.4000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.9879
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
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 : 0.988
95% CI : (0.9653, 0.9975)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.2622
Sensitivity : 0.4000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.9879
Prevalence : 0.0200
Detection Rate : 0.0080
Detection Prevalence : 0.0080
Balanced Accuracy : 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
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity : 0.4000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.9879
Prevalence : 0.0200
Detection Rate : 0.0080
Detection Prevalence : 0.0080
Balanced Accuracy : 0.7000
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
Reference
Prediction 0 1
0 245 3
1 0 2
Accuracy : 0.988
95% CI : (0.9653, 0.9975)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.2622
Kappa : 0.5665
Mcnemar's Test P-Value : 0.2482
Sensitivity : 0.4000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.9879
Prevalence : 0.0200
Detection Rate : 0.0080
Detection Prevalence : 0.0080
Balanced Accuracy : 0.7000
'Positive' Class : 1
Dengan luas AUC adalah 0.7 dan berikut alah kurva ROC dari
perhitungan kinerja klasifikasinya.
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.
install.packages("ROSE")
prop.table(table(hacide.train[,1]))
Keterangan:
KNN
Kode yang digunakan dengan classifier KNN adalah sebagai berikut.
library(kknn)
library(caret)
library(ROCR)
library(ROSE)
setwd("D:/ClassificationR")
#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)
Reference
Prediction 0 1
0 237 1
Accuracy : 0.964
95% CI : (0.9328, 0.9834)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.9696
Kappa : 0.4552
Mcnemar's Test P-Value : 0.0455
Sensitivity : 0.8000
Specificity : 0.9673
Pos Pred Value : 0.3333
Neg Pred Value : 0.9958
Prevalence : 0.0200
Detection Rate : 0.0160
Detection Prevalence : 0.0480
Balanced Accuracy : 0.8837
'Positive' Class : 1
Gambar 131. Kurva ROC untuk kasus klasifikasi dengan KNN dan
undersampling.
setwd("D:/ClassificationR")
#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)
Accuracy : 0.888
95% CI : (0.8422, 0.9243)
No Information Rate : 0.98
P-Value [Acc > NIR] : 1
Kappa : 0.2366
Mcnemar's Test P-Value : 3.352e-07
Sensitivity : 1.0000
Specificity : 0.8857
Pos Pred Value : 0.1515
Neg Pred Value : 1.0000
Prevalence : 0.0200
Detection Rate : 0.0200
Detection Prevalence : 0.1320
Balanced Accuracy : 0.9429
'Positive' Class : 1
Dan luas AUC adalah sebagai berikut.
SVM
Kode yang digunakan dengan classifier SVM adalah sebagai berikut.
library(kernlab)
library(caret)
library(ROCR)
library(ROSE)
setwd("D:/ClassificationR")
#proses 2
#membuat model
model = ksvm(cls~., data.training)
#proses 3
#melakukan prediksi
predict_result = predict(model, data.test[,-1])
#menghitung kinerja
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)
Reference
Prediction 0 1
0 231 0
1 14 5
Accuracy : 0.944
95% CI : (0.9078, 0.969)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.999814
Kappa : 0.3976
Mcnemar's Test P-Value : 0.000512
Sensitivity : 1.0000
Specificity : 0.9429
Pos Pred Value : 0.2632
Neg Pred Value : 1.0000
Prevalence : 0.0200
Detection Rate : 0.0200
Detection Prevalence : 0.0760
Balanced Accuracy : 0.9714
'Positive' Class : 1
Dan luas AUC adalah sebagai berikut.
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")
#proses 2
#membuat model
model = J48(cls~., data.training)
#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)
Reference
Prediction 0 1
0 206 1
1 39 4
Accuracy : 0.84
95% CI : (0.7886, 0.8832)
No Information Rate : 0.98
P-Value [Acc > NIR] : 1
Kappa : 0.1357
Mcnemar's Test P-Value : 4.909e-09
Sensitivity : 0.80000
Specificity : 0.84082
Pos Pred Value : 0.09302
Neg Pred Value : 0.99517
Prevalence : 0.02000
Detection Rate : 0.01600
Detection Prevalence : 0.17200
Balanced Accuracy : 0.82041
'Positive' Class : 1
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.
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.
Keterangan:
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 : 0.984
95% CI : (0.9595, 0.9956)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.4387
Kappa : 0.4924
Mcnemar's Test P-Value : 0.6171
Sensitivity : 0.4000
Specificity : 0.9959
Pos Pred Value : 0.6667
Neg Pred Value : 0.9879
Prevalence : 0.0200
Detection Rate : 0.0080
Detection Prevalence : 0.0120
Balanced Accuracy : 0.6980
'Positive' Class : 1
Dan berikut ini adalah kurva ROC kinerja classifier KNN untuk kasus
ini.
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 : 0.92
95% CI : (0.8791, 0.9505)
No Information Rate : 0.98
P-Value [Acc > NIR] : 1
Kappa : 0.3103
Mcnemar's Test P-Value : 2.152e-05
Sensitivity : 1.0000
Specificity : 0.9184
Pos Pred Value : 0.2000
Neg Pred Value : 1.0000
Prevalence : 0.0200
Detection Rate : 0.0200
Detection Prevalence : 0.1000
'Positive' Class : 1
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
Kappa : 0.6057
Mcnemar's Test P-Value : 0.3711
Sensitivity : 0.8000
Specificity : 0.9837
Pos Pred Value : 0.5000
Neg Pred Value : 0.9959
Prevalence : 0.0200
Detection Rate : 0.0160
Detection Prevalence : 0.0320
Balanced Accuracy : 0.8918
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
Dan berikut ini adalah kurva ROC kinerja classifier SVM untuk kasus
ini.
Gambar 137. Kurva ROC untuk kasus klasifikasi dengan SVM dan
oversampling.
Reference
Prediction 0 1
0 244 3
1 1 2
Accuracy : 0.984
95% CI : (0.9595, 0.9956)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.4387
Kappa : 0.4924
Mcnemar's Test P-Value : 0.6171
Sensitivity : 0.4000
Specificity : 0.9959
Pos Pred Value : 0.6667
Neg Pred Value : 0.9879
Prevalence : 0.0200
Detection Rate : 0.0080
Detection Prevalence : 0.0120
Balanced Accuracy : 0.6980
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
Dan berikut ini adalah kurva ROC kinerja classifier decision tree untuk
kasus ini.
Pembahasan
Tabel di bawah ini adalah rangkuman kinerja dari 4 classifier di atas
setelah dilakukan proses oversampling.
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.
Keterangan:
KNN
Kinerja berupa confusion matrix dari classifier KNN untuk kasus ini
adalah sebagai berikut.
Reference
Prediction 0 1
0 243 2
1 2 3
Accuracy : 0.984
95% CI : (0.9595, 0.9956)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.4387
Kappa : 0.5918
Mcnemar's Test P-Value : 1.0000
Sensitivity : 0.6000
Specificity : 0.9918
Pos Pred Value : 0.6000
Neg Pred Value : 0.9918
Prevalence : 0.0200
Detection Rate : 0.0120
Detection Prevalence : 0.0200
Balanced Accuracy : 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.
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 : 0.92
95% CI : (0.8791, 0.9505)
No Information Rate : 0.98
P-Value [Acc > NIR] : 1
Kappa : 0.3103
Mcnemar's Test P-Value : 2.152e-05
Sensitivity : 1.0000
Specificity : 0.9184
Pos Pred Value : 0.2000
Neg Pred Value : 1.0000
Prevalence : 0.0200
Detection Rate : 0.0200
Detection Prevalence : 0.1000
Balanced Accuracy : 0.9592
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)
Kappa : 0.6057
Mcnemar's Test P-Value : 0.3711
Sensitivity : 0.8000
Specificity : 0.9837
Pos Pred Value : 0.5000
Neg Pred Value : 0.9959
Prevalence : 0.0200
Detection Rate : 0.0160
Detection Prevalence : 0.0320
Balanced Accuracy : 0.8918
'Positive' Class : 1
Luas AUC yang didapat dari perhitungan kinerja adalah sebagai
berikut.
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.
Reference
Prediction 0 1
0 243 2
1 2 3
Accuracy : 0.984
95% CI : (0.9595, 0.9956)
No Information Rate : 0.98
P-Value [Acc > NIR] : 0.4387
Kappa : 0.5918
Mcnemar's Test P-Value : 1.0000
Sensitivity : 0.6000
Specificity : 0.9918
Pos Pred Value : 0.6000
Neg Pred Value : 0.9918
Prevalence : 0.0200
Detection Rate : 0.0120
Detection Prevalence : 0.0200
Balanced Accuracy : 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.
Pembahasan
Tabel di bawah ini adalah rangkuman kinerja dari 4 classifier di atas
setelah dilakukan proses gabungan oversampling dan undersampling.
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.
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.
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.
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.