Bahan Kuliah Pemodelan Klasifikasi - Prodi Statistika Terapan - IPB University

Supervised Discretization

File ini akan mendiskusikan dua teknik supervised discretization yaitu:

  • MDLP
  • Chi-Merge

Keduanya dipilih karena memiliki cara berpikir yang berbeda dalam menentukan titik batas penyusunan bins/selang. MDLP bekerja dengan cara splitting, sedangkan Chi-Merge bekerja dengan cara merging.

Pembaca dapat melihat penjelasan pada video … untuk memperoleh penjelasan lebih lanjut.

Kedua jenis diskretisasi ini dapat dilakukan menggunakan fungsi-fungsi yang ada pada package discretization.

Untuk mengilustrasikan keduanya, kita akan gunakan data disk.csv seperti yang kita gunakan pada bagian 1 dari topik ini (https://rpubs.com/bagusco/diskretisasi01).

#membaca data
data <- read.csv("D:/disk01.csv", header=TRUE)

#menampilkan nama-nama kolom pada data
names(data)
## [1] "x"     "class"

yang akan diilustrasikan adalah mendiskretisasi peubah/kolom x berdasarkan informasi peubah/kolom class

Pengerjaan MDLP di R

Fungsi yang akan digunakan adalah mdlp() yang memerlukan masukan berupa sebuah dataframe. Kolom yang menjadi variabel target (dalam hal ini adalah class) harus diletakkan pada kolom terakhir. Fungsi mdlp() akan menjalankan algoritma diskretisasi MDLP terhadap seluruh variabel numerik yang ada pada dataframe input-an kita.

Berbeda dengan unsupervised discretization dimana user dapat menentukan berapa banyak bins/selang yang akan dibentuk, teknik supervised discretization tidak demikian. Banyaknya bins akan tergantung pada hubungan antara variabel numerik tersebut dengan variabel supervising-nya. Berikut contoh penerapan algoritma MDLP.

library(discretization)
disk.mdlp <- mdlp(data)

Untuk menampilkan breakpoints (titik batas antar selang)

disk.mdlp$cutp
## [[1]]
## [1] 29.5 54.5 46.5 64.5

Ada empat titik batas yang dihasilkan. Titik batas yang lain adalah nilai minimum dan nilai maksimum sehingga secara total ada 5 (lima) bins yang terbentuk yaitu (kita perlu mengurutkan titik-titik tersebut):

  • kurang dari 29.5
  • 29.5 s/d 46.5
  • 46.5 s/d 54.5
  • 54.5 sd/ 64.5
  • lebih dari 64.5

Kode kelompok dari setiap unsur di x dapat dipanggil menggunakan perintah disk.mdlp\(Disc.data\)x. Berikut nilai label bin dari 10 baris pertama:

head(disk.mdlp$Disc.data$x, n = 10)
##  [1] 3 1 5 2 4 3 4 2 4 2

Dan berikut jika kita padankan dengan nilai asli dari kolom x

data1 <- cbind(data, xmdlp=disk.mdlp$Disc.data$x)
head(data1, n=10)
##     x class xmdlp
## 1  51     0     3
## 2  19     1     1
## 3  66     1     5
## 4  35     0     2
## 5  64     1     4
## 6  48     1     3
## 7  62     0     4
## 8  35     0     2
## 9  63     1     4
## 10 37     0     2

Kolom xmdlp merupakan kolom label hasil diskretisasi. Perhatikan bahwa amatan pertama bernilai 51 dan dimasukkan pada bin ke-3, sedangkan amatan kedua bernilai 19 sehingga dimasukkan pada bin ke-1. Demikian seterusnya.

Pengerjaan CHI-MERGE di R

Fungsi yang akan digunakan adalah chiM() yang memerlukan masukan berupa sebuah dataframe. Kolom yang menjadi variabel target (dalam hal ini adalah class) harus diletakkan pada kolom terakhir. Fungsi chiM() akan menjalankan algoritma diskretisasi CHI-MERGE terhadap seluruh variabel numerik yang ada pada dataframe input-an kita.

Selain input data, kita juga perlu memasukkan nilai tarafnyata uji chi-square untuk menyatakan apakah dua bins perlu di-merge atau tidak.

Berikut contoh penerapan algoritma CHI-MERGE.

library(discretization)
disk.chim <- chiM(data, 0.01)

Untuk menampilkan breakpoints (titik batas antar selang)

disk.chim$cutp
## [[1]]
## [1] 23.5 30.5 33.5 45.5 49.5 54.5 59.5 64.5

Ada 8 (delapan) titik batas yang dihasilkan. Titik batas yang lain adalah nilai minimum dan nilai maksimum sehingga secara total ada 9(lima) bins yang terbentuk yaitu (kita perlu mengurutkan titik-titik tersebut):

  • kurang dari 23.5
  • 23.5 s/d 30.5
  • 30.5 s/d 33.5
  • 33.5 s/d 45.5
  • 45.5 s/d 49.5
  • 49.5 s/d 54.5
  • 54.5 s/d 59.5
  • 59.5 sd/ 64.5
  • lebih dari 64.5

Kode kelompok dari setiap unsur di x dapat dipanggil menggunakan perintah disk.chim\(Disc.data\)x. Berikut nilai label bin dari 10 baris pertama:

head(disk.chim$Disc.data$x, n = 10)
##  [1] 6 1 9 4 8 5 8 4 8 4

Dan berikut jika kita padankan dengan nilai asli dari kolom x

data2 <- cbind(data1, xchim=disk.chim$Disc.data$x)
head(data2, n=10)
##     x class xmdlp xchim
## 1  51     0     3     6
## 2  19     1     1     1
## 3  66     1     5     9
## 4  35     0     2     4
## 5  64     1     4     8
## 6  48     1     3     5
## 7  62     0     4     8
## 8  35     0     2     4
## 9  63     1     4     8
## 10 37     0     2     4

Kolom xchim merupakan kolom label hasil diskretisasi. Perhatikan bahwa amatan pertama bernilai 51 dan dimasukkan pada bin ke-6, sedangkan amatan kedua bernilai 19 sehingga dimasukkan pada bin ke-1. Demikian seterusnya.