Berkenalan dengan scikit-learn (Part 8) – Binarizing Label Features

mastering scikit-learn 8

“There’s another way to work with categorical variables. Instead of dealing with the categorical variables using OneHotEncoder, we can use LabelBinarizer. This is a combination of thresholding and working with categorical variables.”

~ Hauck T. (2014)

Kali ini kita akan bekerja dengan variabel kategori (categorical variables) menggunakan metode yang berbeda dari yang pernah kita bahas sebelum-sebelumnya. Sebelumnya kita sudah pernah membahas metode thresholding di Berkenalan dengan scikit-learn (Part 6) – Membuat Binary Features dengan Metode Thresholding dan metode encoding di Berkenalan dengan scikit-learn (Part 7) – Bekerja dengan Variabel Kategori (Categorical Variables). Dalam kasus ketika kita dihadapkan pada data yang hanya memiliki satu atau dua kategori dari feature yang penting atau berpengaruh, akan lebih bijak apabila kita menghindari extra dimensionality yang akan terjadi apabila kita memiliki banyak kategori.

 

Hands On

Seperti biasa, kita import terlebih dahulu modul dan dataset yang akan kita gunakan:

from sklearn import datasets as d

iris = d.load_iris()
target = iris.target

Import juga method LabelBinarizer() dan buat objek sebagai berikut:

from sklearn.preprocessing import LabelBinarizer
label_binarizer = LabelBinarizer()

Selanjutnya, transformasikan variabel target menjadi feature space yang baru:

new_target = label_binarizer.fit_transform(target)

Selanjutnya, mari kita lihat ukuran atau shape dari new_target, dan kita lihat beberapa baris datanya:

new_target.shape

new_target[:5]
new_target[-5:]

label_binarizer.classes_

Dengan penampakan di console sebagai berikut:

data

Sumber Gambar: Dokumentasi Pribadi.

scikit-learn

Sumber Gambar: Dokumentasi Pribadi.

scikit-learn

Sumber Gambar: Dokumentasi Pribadi.

scikit-learn

Sumber Gambar: Dokumentasi Pribadi.

Variabel target pada dataset iris memiliki kardinalitas 3, atau memiliki tiga nilai unik. Ketika LabelBinarizer mengkonversikan vektor N * 1 menjadi vektor N * C, di mana C adalah kardinalitas atau cardinality dari N * 1 dataset, perlu dicatat bahwa setelah objek di-fit-kan, jika kita memanggil nilai di luar kardinalitas, maka akan terjadi error:

label_binarizer.transform([4])
label_binarizer.transform([3])

Penampakkan di console:

cardinality error

Sumber Gambar: Dokumentasi Pribadi.

Err, baiklah, daya tidak tahu apa yang terjadi, tapi dari referensi yang saya gunakan, error message yang didapatkan, seharusnya berbunyi: “[…] ValueError: classes [0 1 2] mismatch with the labels [4] found in the data”. Tapi dari hasil di atas, dapat kita simpulkan bahwa error yang diperoleh sama, karena nilai nol yang mengisi semua array di atas, menandakan bahwa kita gagal meng-address variabel kategori sesuai kardinalitas yang tersedia pada variabel target di dataset iris.

Bandingkan dengan hasil apabila kita memanggil nilai yang berada dalam kardinalitas yang tersedia:

label_binarizer.transform([2])
label_binarizer.transform([1])
label_binarizer.transform([0])

Hasil di konsol:

cardinality scikit-learn

Sumber Gambar: Dokumentasi Pribadi.

 

Bonus

Nol dan satu tidak selalu harus merepresentasikan nilai negatif dan positif pada nilai target. Kita juga dapat mengubah settingan defaultnya, sehingga sebagai contoh, kita dapat merepresentasikan nilai positif sebagai 1000, dan nilai negatif sebagai -1000, dengan cara sebagai berikut:

label_binarizer = LabelBinarizer(neg_label=-1000, pos_label=1000)
label_binarizer.fit_transform(target)[:5]

Hasilnya:

hakim-azizul.com

Sumber Gambar: Dokumentasi Pribadi.

Selamat mencoba, dan sampai jumpa di postingan berikutnya!

Have a great day! Enjoy machine learning! 🙂

 

References & Further Reading

Hauck T. (2014): scikit-learn Cookbook, Packt Publishing.

http://www.belajarsql.com/artikel-umum/apa-itu-data-cardinality

 

Sumber Gambar

Dokumentasi Pribadi.

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelBinarizer.html

Follow and like us:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *