Package
Silahkan install jika belum ada
Memanggil Package
Deskripsi singkat data
Data yang digunakan pada tutorial kali ini adalah data yang bernama Pima Indian Diabetes yang sudah sedikit diedit. Berikut adalah informasi singkat mengenai data
This dataset is originally from the National Institute of Diabetes and Digestive and Kidney Diseases. The objective of the dataset is to diagnostically predict whether or not a patient has diabetes, based on certain diagnostic measurements included in the dataset. Several constraints were placed on the selection of these instances from a larger database. In particular, all patients here are females at least 21 years old of Pima Indian heritage.
Content The datasets consists of several medical predictor variables and one target variable, Outcome. Predictor variables includes the number of pregnancies the patient has had, their BMI, insulin level, age, and so on.
Acknowledgements Smith, J.W., Everhart, J.E., Dickson, W.C., Knowler, W.C., & Johannes, R.S. (1988). Using the ADAP learning algorithm to forecast the onset of diabetes mellitus. In Proceedings of the Symposium on Computer Applications and Medical Care (pp. 261–265). IEEE Computer Society Press.
data ini bisa diperoleh di link berikut ini https://github.com/gerrydito/Model-Klasifikasi/tree/master/Praktikum/KNN
Pemodelan Naive Bayes dan SVM
Import data di R
## Pregnancies Glucose BloodPressure SkinThickness Insulin BMI
## 1 6 148 72 35 0 33.6
## 2 1 85 66 29 0 26.6
## 3 8 183 64 0 0 23.3
## 4 1 89 66 23 94 28.1
## 5 0 137 40 35 168 43.1
## 6 5 116 74 0 0 25.6
## DiabetesPedigreeFunction Age Outcome
## 1 0.627 50 Case
## 2 0.351 31 Control
## 3 0.672 32 Case
## 4 0.167 21 Control
## 5 2.288 33 Case
## 6 0.201 30 Control
Khusus yang menggunakan R versi 4.00 keatas, argumen stringsAsFactors = TRUE disertakan agar data yang berbentuk string bisa berubah menjadi factor.
Import data ke ekosistem mlr3
Import data ke mlr3 bisa dilakukan dengan menggunakan fungsi TaskClassif$new atau TaskRegr$new yang berasal dari package mlr3. TaskClassif$new digunakan jika peubah respon kita berupa peubah biner atau multiclass, sedangkan TaskRegr$new digunakan jika responya berupa peubah numerik.
task_diabetes = TaskClassif$new(id="diabetes",backend = data_diabetes,
target = "Outcome",positive ="Case")Argumen utama dalam fungsi TaskClassif$new adalah sebagai berikut:
idyang merupakan nama dari task (bisa diisi dengan nama apapun)backendadalah data yang ingin dimodelkan dengan catatan peubah respon-nya harus berupa factortargetadalah nama kolom yang dijadikan peubah responpositiveadalah nama kelas positif dari peubah respon
Menentukan model yang digunakan
Pada tahap ini fungsi yang digunakan adalah lrn yang memiliki argumen utama nama model yang ingin digunakan. Berikut adalah model-model yang akan digunakan beserta argumen di dalam fungsi lrn dan asal packagenya:
- Naive Bayes -
"classif.naive_bayes"-library(e1071) - SVM -
"classif.svm"-library(e1071)
Sebagai catatan, untuk model-model yang digunakan dalam mlr3 berasal dari package-package lain sehingga package-package tersebut perlu install terlebih dahulu.
Argumen-argumen yang bisa dimasukkan pada "classif.naive_bayes" dan "classif.svm"adalah sebagai berikut.
## id class lower upper levels nlevels is_bounded special_vals
## 1: laplace ParamDbl 0 Inf Inf FALSE <list[0]>
## 2: threshold ParamDbl -Inf Inf Inf FALSE <list[0]>
## 3: eps ParamDbl -Inf Inf Inf FALSE <list[0]>
## default storage_type tags
## 1: 0 numeric train
## 2: 0.001 numeric predict
## 3: 0 numeric predict
## id class lower upper levels
## 1: type ParamFct NA NA C-classification,nu-classification
## 2: cost ParamDbl 0 Inf
## 3: nu ParamDbl -Inf Inf
## 4: kernel ParamFct NA NA linear,polynomial,radial,sigmoid
## 5: degree ParamInt 1 Inf
## 6: coef0 ParamDbl -Inf Inf
## 7: gamma ParamDbl 0 Inf
## 8: cachesize ParamDbl -Inf Inf
## 9: tolerance ParamDbl 0 Inf
## 10: shrinking ParamLgl NA NA TRUE,FALSE
## 11: cross ParamInt 0 Inf
## 12: fitted ParamLgl NA NA TRUE,FALSE
## 13: scale ParamUty NA NA
## 14: class.weights ParamUty NA NA
## 15: decision.values ParamLgl NA NA TRUE,FALSE
## nlevels is_bounded special_vals default storage_type tags
## 1: 2 TRUE <list[0]> C-classification character train
## 2: Inf FALSE <list[0]> 1 numeric train
## 3: Inf FALSE <list[0]> 0.5 numeric train
## 4: 4 TRUE <list[0]> radial character train
## 5: Inf FALSE <list[0]> 3 integer train
## 6: Inf FALSE <list[0]> 0 numeric train
## 7: Inf FALSE <list[0]> <NoDefault[3]> numeric train
## 8: Inf FALSE <list[0]> 40 numeric train
## 9: Inf FALSE <list[0]> 0.001 numeric train
## 10: 2 TRUE <list[0]> TRUE logical train
## 11: Inf FALSE <list[0]> 0 integer train
## 12: 2 TRUE <list[0]> TRUE logical train
## 13: Inf FALSE <list[0]> TRUE list train
## 14: Inf FALSE <list[0]> list train
## 15: 2 TRUE <list[0]> FALSE logical predict
Keterangan untuk masing-masing argumen dapat melihat package asal kedua metode yaitu package e1071.
Untuk menjalankan model-model tersebut kita bisa tulis seperti dibawah ini
Menentukan cara pembagian data
Penentuan cara pembagian data bisa dilakukan dengan fungsi rsmp.
Metode pembagian data yang dipilih disini adalah metode cross-validation dengan 10 folds atau lipatan. Setelah kedua hal ini sudah dilakukan, selanjutnya komparasi model bisa dilakukan
Komparasi model
Pada bagian ini kita akan melakukan komparasi model antar model yang sudah kita definisikan diatas. Langkah pertama yang kita lakukan adalah mengabungkan learner yang sudah kita definisikan diawal ke dalam list
Komparasi model bisa dilakukan dengan menggunakan fungsi benchmark_design dan benchmark. Fungsi benchmark_design digunakan untuk memasukan informasi-inforamsi yang dibutuhkan untuk komparasi, seperti data yang digunakan (tasks), model yang ingin dikomparasi (learners) dan metode pembagian data yang digunakan (resamplings).
design <- benchmark_grid(tasks = task_diabetes,
learners = learner_diabetes,
resamplings = resample_diabetes_cv
)Kemudian fungsi benchmark digunakan untuk menjalankan/ running komparasi model berdasarkan desain yang sudah dirancang.
## INFO [12:12:58.698] Benchmark with 20 resampling iterations
## INFO [12:12:58.990] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 3/10)
## INFO [12:12:59.124] Applying learner 'classif.svm' on task 'diabetes' (iter 1/10)
## INFO [12:12:59.199] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 7/10)
## INFO [12:12:59.233] Applying learner 'classif.svm' on task 'diabetes' (iter 3/10)
## INFO [12:12:59.295] Applying learner 'classif.svm' on task 'diabetes' (iter 5/10)
## INFO [12:12:59.368] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 1/10)
## INFO [12:12:59.402] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 2/10)
## INFO [12:12:59.434] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 5/10)
## INFO [12:12:59.468] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 10/10)
## INFO [12:12:59.508] Applying learner 'classif.svm' on task 'diabetes' (iter 2/10)
## INFO [12:12:59.571] Applying learner 'classif.svm' on task 'diabetes' (iter 7/10)
## INFO [12:12:59.654] Applying learner 'classif.svm' on task 'diabetes' (iter 10/10)
## INFO [12:12:59.769] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 4/10)
## INFO [12:12:59.800] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 6/10)
## INFO [12:12:59.834] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 9/10)
## INFO [12:12:59.880] Applying learner 'classif.svm' on task 'diabetes' (iter 9/10)
## INFO [12:12:59.944] Applying learner 'classif.svm' on task 'diabetes' (iter 4/10)
## INFO [12:13:00.043] Applying learner 'classif.svm' on task 'diabetes' (iter 6/10)
## INFO [12:13:00.131] Applying learner 'classif.svm' on task 'diabetes' (iter 8/10)
## INFO [12:13:00.194] Applying learner 'classif.naive_bayes' on task 'diabetes' (iter 8/10)
## INFO [12:13:00.239] Finished benchmark
Karena terdapat 2 model dan masing-masing model menjalankan 10-folds cross-validation maka iterasi yang dilakukan ada sebanyak 20 kali.
Hasil Komparasi model
Hasil komparasi model dapat berupa nilai-nilai ukuran kebaikan model yang ditentukan oleh pengguna.
result = bmr$aggregate(list(msr("classif.acc"),
msr("classif.bacc") # balanced accuracy
,
msr("classif.sensitivity"),
msr("classif.specificity"),
msr("classif.precision")
)
)
result## nr resample_result task_id learner_id resampling_id iters
## 1: 1 <ResampleResult[21]> diabetes classif.naive_bayes cv 10
## 2: 2 <ResampleResult[21]> diabetes classif.svm cv 10
## classif.acc classif.bacc classif.sensitivity classif.specificity
## 1: 0.7579123 0.7205343 0.6105286 0.8305400
## 2: 0.7606316 0.7075371 0.5387718 0.8763024
## classif.precision
## 1: 0.6543094
## 2: 0.6911870
Berdasarkan nilai akurasi model yang memiliki performa prediksi terbaik adalah model regresi svm karena dari kelima kriteria/metric 4 diantaranya unggul.