Analisa data yang datasetnya kami peroleh dari kaggle ini kami pergunakan sebagai latihan yang ditugaskan oleh Algoritma Data Science dengan sebutan Learning by Building atau LBB untuk materi Supervised Learning, machine learning, Classification 2. Mudah-mudahan dengan tugas latihan yang kami kerjakan dapat melatih dan memahami materi lebih baik lagi. Sekaligus memberi pengetahuan baru dari sudut padang yang baru.
Meskipun dataset ini pada awalnya berkontribusi pada repositori UCI Machine Learning hampir 30 tahun yang lalu, perburuan jamur (atau dikenal sebagai “shrooming”) sedang menikmati popularitas baru. Pelajari fitur mana yang mengeja kematian tertentu dan yang paling cocok dalam dataset karakteristik jamur ini. Dan seberapa yakin model Anda?
Dataset ini mencakup uraian sampel hipotesis yang sesuai dengan 23 spesies jamur yang dipanggang di Agaricus dan Lepiota Family Mushroom yang diambil dari The Audubon Society Field Guide hingga North American Mushroom (1981). Setiap spesies diidentifikasi sebagai yang dapat dimakan, pasti beracun, atau tidak dapat dimakan dan tidak direkomendasikan. Kelas yang terakhir ini dikombinasikan dengan yang beracun. Panduan ini dengan jelas menyatakan bahwa tidak ada aturan sederhana untuk menentukan kelayakan suatu jamur; bahwa jamur tertentu layak dikonsumsi atau pasti beracun.
Tujuan dari analisis data tentang spesifikasi jamur adalah mengetahui akurasi dari konklusi spesifikasi suatu jamur. Apakah suatu jamur dengan kriteria tertentu dapat dikategorikan sebagai jamur yang dapat dimakan/dikonsumsi ataukah sebaliknya tidak dapat dimakan/beracun. Oleh karena itu target dari analisa ini adalah kelasnya sebagai eatable atau poisonous, dengan feature variabel yang kami pilih yaitu mengenai ciri bentuk topi (cap.shape), ciri permukaan topi(cap.surface), ciri warna topi (cap.color). Dengan menetapkan ciri tertentu dalam levels variabel tersebut, yaitu ciri-ciri jamur yang biasa kita temui dipasaran, berbentuk cembung, permukaan berserat, dan berwarna putih.
## 'data.frame': 8124 obs. of 23 variables:
## $ class : Factor w/ 2 levels "e","p": 2 1 1 2 1 1 1 1 2 1 ...
## $ cap.shape : Factor w/ 6 levels "b","c","f","k",..: 6 6 1 6 6 6 1 1 6 1 ...
## $ cap.surface : Factor w/ 4 levels "f","g","s","y": 3 3 3 4 3 4 3 4 4 3 ...
## $ cap.color : Factor w/ 10 levels "b","c","e","g",..: 5 10 9 9 4 10 9 9 9 10 ...
## $ bruises : Factor w/ 2 levels "f","t": 2 2 2 2 1 2 2 2 2 2 ...
## $ odor : Factor w/ 9 levels "a","c","f","l",..: 7 1 4 7 6 1 1 4 7 1 ...
## $ gill.attachment : Factor w/ 2 levels "a","f": 2 2 2 2 2 2 2 2 2 2 ...
## $ gill.spacing : Factor w/ 2 levels "c","w": 1 1 1 1 2 1 1 1 1 1 ...
## $ gill.size : Factor w/ 2 levels "b","n": 2 1 1 2 1 1 1 1 2 1 ...
## $ gill.color : Factor w/ 12 levels "b","e","g","h",..: 5 5 6 6 5 6 3 6 8 3 ...
## $ stalk.shape : Factor w/ 2 levels "e","t": 1 1 1 1 2 1 1 1 1 1 ...
## $ stalk.root : Factor w/ 5 levels "?","b","c","e",..: 4 3 3 4 4 3 3 3 4 3 ...
## $ stalk.surface.above.ring: Factor w/ 4 levels "f","k","s","y": 3 3 3 3 3 3 3 3 3 3 ...
## $ stalk.surface.below.ring: Factor w/ 4 levels "f","k","s","y": 3 3 3 3 3 3 3 3 3 3 ...
## $ stalk.color.above.ring : Factor w/ 9 levels "b","c","e","g",..: 8 8 8 8 8 8 8 8 8 8 ...
## $ stalk.color.below.ring : Factor w/ 9 levels "b","c","e","g",..: 8 8 8 8 8 8 8 8 8 8 ...
## $ veil.type : Factor w/ 1 level "p": 1 1 1 1 1 1 1 1 1 1 ...
## $ veil.color : Factor w/ 4 levels "n","o","w","y": 3 3 3 3 3 3 3 3 3 3 ...
## $ ring.number : Factor w/ 3 levels "n","o","t": 2 2 2 2 2 2 2 2 2 2 ...
## $ ring.type : Factor w/ 5 levels "e","f","l","n",..: 5 5 5 5 1 5 5 5 5 5 ...
## $ spore.print.color : Factor w/ 9 levels "b","h","k","n",..: 3 4 4 3 4 3 3 4 3 3 ...
## $ population : Factor w/ 6 levels "a","c","n","s",..: 4 3 3 4 1 3 3 4 5 4 ...
## $ habitat : Factor w/ 7 levels "d","g","l","m",..: 6 2 4 6 2 2 4 4 2 4 ...
Informasi Atribut:
class : kelas: dapat dimakan = e, beracun = p
cap.shape : bentuk topi: bel = b, kerucut = c, cembung = x, datar = f, knobbed = k, cekung = s
cap.surface : tutup-permukaan : berserat = f, alur = g, bersisik = y, halus = s
cap.color : warna topi : coklat = n, buff = b, kayu manis = c, abu-abu = g, hijau = r, pink = p, ungu = u, merah = e, putih = w, kuning = y
bruises : memar = t, no = f
odor : bau : almond = a, adas = l, creosote = c, amis = y, busuk = f, apak = m, tidak ada = n, pedas = p, pedas = s
gill.attachment : lampiran-insang : terlampir = a, turun = d, bebas = f, berlekuk = n
gill.spacing : jarak insang : dekat = c, ramai = w, jauh = d
gill.size : ukuran insang : luas = b, sempit = n
gill.color : warna insang : hitam = k, coklat = n, buff = b, coklat = h, abu-abu = g, hijau = r, oranye = o, merah muda = p, ungu = u, merah = e, putih = w, kuning = y
stalk.shape :tangkai-bentuk: memperbesar = e, meruncing = t
stalk.root :root-root: bulbous = b, club = c, cup = u, sama = e, rhizomorphs = z, rooted = r, missing =?
stalk.surface.above.ring:tangkai-permukaan-atas-cincin: berserat = f, bersisik = y, halus = k, halus = s
stalk.surface.below.ring:tangkai-permukaan-di bawah-cincin: berserat = f, bersisik = y, halus = k, halus = s
stalk.color.above.ring :tangkai-warna-atas-cincin: coklat = n, buff = b, kayu manis = c, abu-abu = g, oranye = o, merah muda = p, merah = e, putih = w, kuning = y
stalk.color.below.ring :tangkai-warna-di bawah-cincin: coklat = n, buff = b, kayu manis = c, abu-abu = g, oranye = o, pink = p, merah = e, putih = w, kuning = y
veil.type :tipe kerudung: sebagian = p, universal = u
veil.color :kerudung-warna: coklat = n, oranye = o, putih = w, kuning = y
ring.number :dering-angka: tidak ada = n, satu = o, dua = t
ring.type :tipe cincin: jaring laba-laba = c, evanescent = e, flaring = f, besar = l, tidak ada = n, liontin = p, selubung = s, zona = z
spore.print.color :spora-cetak-warna: hitam = k, coklat = n, buff = b, coklat = h, hijau = r, oranye = o, ungu = u, putih = w, kuning = y
population :populasi: berlimpah = a, berkerumun = c, banyak = n, tersebar = s, beberapa = v, soliter = y
habitat :habitat: rumput = g, daun = l, padang rumput = m, jalur = p, perkotaan = u, limbah = w, kayu = d
## class cap.shape cap.surface cap.color bruises odor gill.attachment
## 1 p x s n t p f
## 2 e x s y t a f
## 3 e b s w t l f
## 4 p x y w t p f
## 5 e x s g f n f
## 6 e x y y t a f
## gill.spacing gill.size gill.color stalk.shape stalk.root
## 1 c n k e e
## 2 c b k e c
## 3 c b n e c
## 4 c n n e e
## 5 w b k t e
## 6 c b n e c
## stalk.surface.above.ring stalk.surface.below.ring stalk.color.above.ring
## 1 s s w
## 2 s s w
## 3 s s w
## 4 s s w
## 5 s s w
## 6 s s w
## stalk.color.below.ring veil.type veil.color ring.number ring.type
## 1 w p w o p
## 2 w p w o p
## 3 w p w o p
## 4 w p w o p
## 5 w p w o e
## 6 w p w o p
## spore.print.color population habitat
## 1 k s u
## 2 n n g
## 3 n n m
## 4 k s u
## 5 n a g
## 6 k n g
## class cap.shape cap.surface
## 0 0 0
## cap.color bruises odor
## 0 0 0
## gill.attachment gill.spacing gill.size
## 0 0 0
## gill.color stalk.shape stalk.root
## 0 0 0
## stalk.surface.above.ring stalk.surface.below.ring stalk.color.above.ring
## 0 0 0
## stalk.color.below.ring veil.type veil.color
## 0 0 0
## ring.number ring.type spore.print.color
## 0 0 0
## population habitat
## 0 0
Kita cari satu per satu peluang yang dibutuhkan
Kita cek kelas targetnya :
##
## e p
## 4208 3916
##
## e p
## 0.5179714 0.4820286
## cap.shape
## class b c f k s x
## e 404 0 1596 228 32 1948
## p 48 4 1556 600 0 1708
Secara manual peluangnya dapat dibandingkan untuk setiap bentuk topi jamur. Jamur dengan bentuk topi yang bagaimana yang menunjukkan apakah jamur tersebut dalam kelas beracun atau tidak (dapat dimakan).
Kami memilih variabel prediktor cap.shape atau bentuk topi karena merupakan karakteristik pokok yang secara visual langsung dapat digambarkan atau diidentifikasikan bentuknya. Bentuk visual ini kami prioritaskan yang berbentuk cembung sebagai attribut variabel bentuk topi. Hal ini dikarenakan bentuk topi yang cembung merupakan bentuk umum jamur yang biasa ditemukan disekitar atau dipasaran.
## cap.surface
## class f g s y
## e 1560 0 1144 1504
## p 760 4 1412 1740
Secara manual peluangnya dapat dibandingkan untuk setiap permukaan topi jamur. Jamur dengan permukaan topi yang bagaimana yang menunjukkan apakah jamur tersebut dalam kelas beracun atau tidak (dapat dimakan).
Selain ciri-ciri fisik topi jamur yang langsung dapat digambarkan, ciri tutup permukaan atau permukaan topi juga menjadi variabel prediktor utama. Apakah porsi atau prosentase yang dihasilkan memiliki kecenderungan terhadap kelasnya sebagai jamur yang beracun ataukah tidak. Kami memprioritaskan atribut f = bersesrat untuk mengklasifikasikan secara sederhana. Bahwa Sebagai tanaman sayur yang aman untuk dikonsumsi tentunya yang mempunyai kandungan serat yang memadai.
## cap.color
## class b c e g n p r u w y
## e 48 32 624 1032 1264 56 16 16 720 400
## p 120 12 876 808 1020 88 0 0 320 672
Secara manual peluangnya dapat dibandingkan untuk setiap warna topi jamur. Jamur dengan warna topi yang apa yang menunjukkan apakah jamur tersebut dalam kelas beracun atau tidak (dapat dimakan).
Jamur dengan ciri-ciri warna putih adalah ciri dominan yang sering kita temui. Jamur berwarna putih bukan hanya dapat kita temui di pasar penjual jamur (yang berarti jamur tersebut dapat dimakan sebagi sayur), tapi juga sering kita temui di lingkungan sekitar, seperti di pekarangan, semak belukar, dan dipinggir jalan. Oleh karena itu untuk meyakinkan kita bahwa jamur dengan ciri warna putih memiliki kecenderungan yang meyakinkan daripada jamur dengan warna lainnya.
mush <- mushroom %>%
mutate(class = factor(class, levels = c("e","p"), labels = c("eatable", "poisonous"))) %>%
mutate(cap.shape = factor(cap.shape, levels = "x", labels = "cembung")) %>%
mutate(cap.surface = factor(cap.surface, levels ="f", labels = "berserat" )) %>%
mutate(cap.color = factor(cap.color, levels = "w", labels = "putih")) %>%
select(class,cap.shape,cap.surface,cap.color) %>%
na.omit(mush)
head(mush)## class cap.shape cap.surface cap.color
## 113 eatable cembung berserat putih
## 191 eatable cembung berserat putih
## 204 eatable cembung berserat putih
## 236 eatable cembung berserat putih
## 301 eatable cembung berserat putih
## 310 eatable cembung berserat putih
## class cap.shape cap.surface cap.color
## 0 0 0 0
##
## eatable poisonous
## 0.7575758 0.2424242
Proporsi sebaran data pada kisaran : etable 75.7%, poisonous 24.3%.
## class cap.shape cap.surface cap.color
## eatable :100 cembung:132 berserat:132 putih:132
## poisonous: 32
e1071library(e1071)
# Train Model
# x = prediktor, y = target
naive_model <- naiveBayes(x = mush %>% select(-class),
y = mush$class)
naive_model##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = mush %>% select(-class), y = mush$class)
##
## A-priori probabilities:
## mush$class
## eatable poisonous
## 0.7575758 0.2424242
##
## Conditional probabilities:
## cap.shape
## mush$class cembung
## eatable 1
## poisonous 1
##
## cap.surface
## mush$class berserat
## eatable 1
## poisonous 1
##
## cap.color
## mush$class putih
## eatable 1
## poisonous 1
Model Naive Bayes menyimpan informasi tentang nilai peluang dependen antara target dengan setiap feature dalam variabel. Kita bisa periksa nilainya dengan perhitungan manual.
predict(naive_model,
newdata = data.frame(class = c("eatable", "poisonous"), cap.shape = "cembung", cap.surface = "berserat", cap.color = "putih"), type = "raw")## eatable poisonous
## [1,] 0.7575758 0.2424242
## [2,] 0.7575758 0.2424242
Prediksi bentuk topi jamur dengan bentuk cembung = x , dan warna topi jamur dengan warna putih = w.
IMPORTANT POINTS
External resource: https://www.geeksforgeeks.org/naive-bayes-classifiers/
80% menjadi data training, sisanya 20% adalah data test.
set.seed(10)
index <- sample(nrow(mush), nrow(mush)*0.8)
data_train <- mush[index,]
data_test <- mush[-index,]## .
## eatable poisonous
## 0.7575758 0.2424242
## .
## eatable poisonous
## 0.7238095 0.2761905
## .
## eatable poisonous
## 0.8888889 0.1111111
Evaluasi
Evaluasi model dengan confusion matrix
Bisa compare nilai confusion matrix dari beberapa model
## Confusion Matrix and Statistics
##
## Reference
## Prediction eatable poisonous
## eatable 24 3
## poisonous 0 0
##
## Accuracy : 0.8889
## 95% CI : (0.7084, 0.9765)
## No Information Rate : 0.8889
## P-Value [Acc > NIR] : 0.6475
##
## Kappa : 0
##
## Mcnemar's Test P-Value : 0.2482
##
## Sensitivity : 1.0000
## Specificity : 0.0000
## Pos Pred Value : 0.8889
## Neg Pred Value : NaN
## Prevalence : 0.8889
## Detection Rate : 0.8889
## Detection Prevalence : 1.0000
## Balanced Accuracy : 0.5000
##
## 'Positive' Class : eatable
##
SUMMARY Naive Bayes :
Decision Tree adalah model yang dapat divisualisasikan menyerupai Flow Chart, sehingga bisa dibaca dan dipahami mengenai bagaimana model tersebut memprediksi hasilnya.Decision Tree terdiri dari 3 jenis bagian/node, yaitu;
Decision Tree selalu diakhiri dengan Terminal Node yang berisi nilai target hasil prediksi model.
Entropy adalah ukuran ketidakteraturan (measure of disorder) yang bisa digunakan untuk mewakili seberapa beragam kelas yang ada dalam suatu variabel.
Entropy=Σci=1−pi log2 pi
pi: proporsi kelas ke-i (jumlah observasi kelas i dibagi total seluruh observasi) Nilai entropy apabila dalam satu variabel terdapat 2 kelas atau nilai:
Entropy=− p1 log2 p1−p2 log2 p2
Interpretasi Entropy:
Ketika kita memiliki masalah berupa klasifikasi (target berupa factor atau kategori), model Decision Tree akan memiliki 1 tujuan: meminimalkan entropy. Semakin kecil entropy, semakin homogen atau seragam anggota dari kelompok data tersebut. Dengan membagi 1 data utuh menjadi beberapa cabang/subset data, kita berharap setiap cabang dapat memiliki anggota yang homogen atau salah satu kelas mendominasi.
Kemudian, bagaimana kita menentukan variabel yang akan digunakan untuk memisahkan 1 data menjadi 2 cabang. Berkaitan dengan Entropy di atas akan kita hitung tingkat penurunan nilai Entropy atau tingkat perolehan informasi (Information Gain)-nya ketidakberaturannya berapa.
Information Gain atau Perolehan Informasi digunakan untuk mengukur perubahan Entropy dan tingkat keragaman kelas setelah dilakukan percabangan. Ketika kita memisahkan 1 data menjadi 2 cabang (2 kelas) menggunakan variabel tertentu, information gain dipakai untuk menentukan variabel mana yang dapat memberikan penurunan Entropy yang paling besar. Perolehan informasi antara 2 cabang/kelas yang dipisahkan berdasarkan kriteria tertentu (subset data) menghasilkan nilai yang semakin homogen atau bahkan salah satu kelas mendominasi.
Information Gain=Entropy(awal)−(P1 Entropy1+P2 Entropy2)
Kita dapat mencari variabel terbaik (yang bisa digunakan untuk memisahkan dua kelas supaya entropy-nya semakin kecil), dengan cara mencari nilai perolehan informasi/Information Gain pada setiap variabel. Kemudian, kita dapat memilih variabel yang memberikan Information Gain terbesar.
Semakin tinggi information gain, maka penurunan entropy-nya semakin tinggi juga yang berarti variabel tersebut dapat membagi data dari yang beragam (heterogen) menjadi homogen. Semakin tinggi nilai information gain, semakin teratur data kelasnya, yang berarti semakin kecil Entropy-nya.
Variabel yang memberikan perolehan informasi yang lebih besar, berarti variabel tersebut dapat digunakan untuk memisahkan data.
partykit packagePada subset data mush untuk mengetahui kelas suatu jamur sebagai jamur beracun atau tidak, Kita bisa menggunakan function ctree() dari package partykit untuk membuat Decision Tree. Pemodelan diawal kita gunakan porsi data 80:20, sehingga menghasilkan kelas yang imbalance.
library(rsample)
set.seed(123)
index <- initial_split(data = mushrop,
prop = 0.9, # proporsi training - testing
strata = "class") # stratified random sampling
data_train <- training(index)
data_test <- testing(index)## .
## eatable poisonous
## 0.5179714 0.4820286
## .
## eatable poisonous
## 0.5179817 0.4820183
## .
## eatable poisonous
## 0.5178792 0.4821208
Datanya kurang se-imbang.
Ada beberapa solusi untuk class-imbalance:
Upsampling berarti menambah jumlah sampel untuk kelas minoritas (kelas yang jumlahnya lebih sedikit) sampai proporsi antar kedua kelasnya sama. Jumlah sampel ditambah dengan menduplikasi data yang ada.
Downsampling adalah kebalikan dari Upsampling. Downsampling dilakukan dengan mengurangi jumlah kelas mayoritas sampai proporsi antar kelasnya sama.
Membuat data sintetik atau data buatan. Topik ini di luar pembahasan kita. Saya berikan external source apabila Bapak ingin mempelajarinya. Penjelasan SMOTE: http://rikunert.com/SMOTE_explained
Kita bisa cek jumlah datanya dulu sebelum menentukan mau melakukan upsampling atau downsampling.
## [1] 8124 23
Sementara, kita gunakan Upsample terlebih dahulu. Karena sifatnya sampling, agar hasilnya sama, kita gunakan set.seed(100).
Untuk cek data yang duplicate
Kita cek kembali proporsi kelasnya.
##
## eatable poisonous
## 0.5 0.5
Gunakan function ctree() untuk membuat Decision Tree.
Kita bisa visualisasikan model Decision Tree
Prediksi nilai kelasnya dengan menggunakan function predict().
## 11 13 24 42 53 92
## eatable eatable eatable eatable eatable eatable
## Levels: eatable poisonous
## [1] 8124 23
Buat Confusion Matrix.
## Confusion Matrix and Statistics
##
## Reference
## Prediction eatable poisonous
## eatable 420 2
## poisonous 0 389
##
## Accuracy : 0.9975
## 95% CI : (0.9911, 0.9997)
## No Information Rate : 0.5179
## P-Value [Acc > NIR] : <0.0000000000000002
##
## Kappa : 0.9951
##
## Mcnemar's Test P-Value : 0.4795
##
## Sensitivity : 1.0000
## Specificity : 0.9949
## Pos Pred Value : 0.9953
## Neg Pred Value : 1.0000
## Prevalence : 0.5179
## Detection Rate : 0.5179
## Detection Prevalence : 0.5203
## Balanced Accuracy : 0.9974
##
## 'Positive' Class : eatable
##
Buat ROC Curve.
pred_test <- predict(tree_class, data_test, type = "prob")
# ambil peluang kelas positif saja
pred_prob <- pred_test[,2]
# prediction
class_roc <- prediction(pred_prob, data_test$class)
# performance
class_roc_vec <- performance(class_roc, "tpr", "fpr")
# buat plot
plot(class_roc_vec)
abline(0,1 , lty = 2)#Tree Pruning
Decision Tree mampu membagi-bagi data menjadi beberapa cabang hingga mendapatkan 1 node yang hanya berisi 1 observasi. Hal ini kurang bagus, karena artinya model Decision Tree kita overfit terhadap data training dan kemungkinan besar akan gagal mengenali unseen data dengan tepat. Untuk mengatasi hal tersebut, ada metode bernama Pruning.
Pruning artinya kita mencegah Decision Tree untuk membuat cabang berdasarkan kriteria tertentu. Tujuan dari Pruning adalah mencegah model menjadi terlalu kompleks dan overfit, sehingga model tidak hanya sulit dipahami apabila terlalu kompleks, tetapi juga kurang mampu menghadapi unseen data. Berdasarkan pendekatannya, Pruning terbagi menjadi 2 cara:
Pre-pruning artinya kita sudah menentukan dan mengatur dari awal parameter untuk mencegah Decision Tree memiliki terlalu banyak cabang. Kita melakukan pruning sebelum kita mendapatkan model yang lengkap atau kompleks. Metode ini kurang disarankan karena kita belum memiliki informasi sebaiknya Pruning dilakukan kapan atau nilai parameternya berapa yang harus kita atur.
Post-Pruning artinya kita melakukan Pruning setelah kita mendapatkan model yang lengkap atau kompleks. Setelah kita menghasilkan model lengkapnya, baru kita memutuskan berapa nilai paremeter Pruning-nya atau seberapa jauh kita akan memangkas cabang pada Decision Tree.
Parameter Pruning pada ctree()
Berikut beberapa parameter yang bisa diatur untuk menentukan seberapa kompleks pohon yang dihasilkan.
mincriterion : nilai batas dari test statistik agar terjadi split (1 - p-value) agar terjadi split minprob : minimal proporsi dari kedua kelas agar terjadi split mtry : jumlah variabel yang dipakai untuk membangun model, dipilih secara acak oleh model minsplit : minimal total bobot (sum of weight) pada sebuah cabang agar terjadi split minbucket : minimal total bobot (sum of weight) pada terminal node (cabang terakhir) agar terjadi split Misalkan kita buat model kita menjadi sangat kompleks (bercabang banyak) dan overfit dengan mengatur mincriterion menjadi 0.
ctrl <- ctree_control(mincriterion = 0)
tree_class <- ctree(class ~., data_train_up,
control = ctrl)
plot(tree_class, type = "simple")mtry = 2, hanya memilih 2 variabel ketika akan men-split data di setiap node/cabang
set.seed(13)
ctrl <- ctree_control(mtry = 2)
tree_class <- ctree(class ~., data_train_up,
control = ctrl)
plot(tree_class, type = "simple")Jika kita mengubah nilai mincriterion = 0.999, sehingga asalkan hasil tes statistik sudah melebihi 1-0.999 = 0.001, maka baru ketika hasil tes statistik adalah 0.999, akan terjadi split (keputusan untuk split semakin ketat). Pohon yang dihasilkan akan lebih sederhana, karena default dari mincretrion adalah 0.95. mincriterion = 0.999 lebih ketat dibandingkan mincriterion = 0.95. Semakin ketat, maka model semakin sederhana.
set.seed(123)
ctrl <- ctree_control(mincriterion = 0.999)
tree_class <- ctree(class ~., data_train_up,
control = ctrl)
plot(tree_class, type = "simple")Kegunaan Pruning: memangkas cabang/node supaya tidak overfit
Dari referensi ConfisionMatrix dengan metode Naive Bayes menunjukan porsi prediksi :
*Bahwa identifikasi Jamur dengan kriteria ; berbentuk cembung, permukaan berserat, dan berwarna putih dapat diklasifikasikan sebagai **jamur yang dapat dikonsumsi/dimakan*. Jamur dengan ciri seperti itu biasanya dinamakan “Jamur Susu”.
Sedangkan untuk model Decision Tree menunjukan confusion matix dengan Positive Class dari karakteristik jamur tersebut adalah eatable yang artinya dapat dikonsumsi. Dengan akurasi mendekati 100% jamur tersebut tidak bersifat patologis/beracun.