Berkenalan dengan scikit-learn (Part 7) – Bekerja dengan Variabel Kategori (Categorical Variables)

“Categorical variables are a problem. On one hand they provide valuable information; on the other hand, it’s probably text-either the actual text or integers corresponding to the text-like an index in a lookup table.”

~ Hauck T. (2014)

Pada kali ini, kita perlu untuk merepresentasikan data teks yang kita miliki sebagai integer atau bilangan bulat, untuk machine learning model kita, tapi kita tidak bisa sembarang menggunakan field/kolom “id”, atau sembarang merepresentasikannya. Hal ini dikarenakan, kita perlu menghindari problem yang sama dengan yang kita hadapi pada Berkenalan dengan scikit-learn (Part 6) – Membuat Binary Features dengan Metode Thresholding. Jika kita memperlakukan data yang kontinu, data tersebut juga harus direpresentasikan sebagai data yang kontinu.

 

Hands On

Kali ini kita tidak menggunakan dataset boston, karena tidak cocok untuk materi variabel kategori. Sehingga, pada postingan kali ini, kita akan menggunakan dataset iris.

Bayangkan bahwa kita ingin memprediksi lebar sepal, sehingga informasi tentang spesies bunga, kemungkinan akan berguna sebagai variabel feature.

Pertama, seperti biasa, import dan sort dataset terlebih dahulu:

from sklearn import datasets

iris = datasets.load_iris()

X = iris.data
y = iris.target

Lalu, lakukan operasi berikut:

import numpy as np
d = np.column_stack((X, y))

Selanjutnya, konversikan kolom teks menjadi tiga feature, dengan perintah berikut:

from sklearn import preprocessing

text_encoder = preprocessing.OneHotEncoder()
text_encoder.fit_transform(d[:, -1:]).toarray()[:5]

Dengan tampilan pada console sebagai berikut:

klasifikasi scikit-learn variabel kategori

Sumber Gambar: Dokumentasi Pribadi.

Function encoder membuat feature tambahan untuk setiap variabel kategori, dan nilai yg dihasilkan dalam bentuk sparse matrix. Output yang dihasilkan benar-benar memenuhi definisi sparse matrix, karena hasilnya didominasi oleh nilai nol, keculai pada kolom yang nilainya berasosiasi dengan kategori feature.

text_encoder telah menjadi model standar pada scikit-learn, dan dapat kita gunakan kembali, dengan contoh sebagai berikut:

text_encoder.transform(np.ones((3, 1))).toarray()

Tampilan pada console:

scikit-learn variabel kategori text encoder

Sumber Gambar: Dokumentasi Pribadi.

Terdapat beberapa opsi lain untuk membuat variabel kategori menggunakan scikit-learn. Contohnya, DictVectorizer, apabila proyek kita dependensinya hanya terbatas pada scikit-learn dan skema encoding yang kita punya relatif sederhana.

Apabila kita membutuhkan encoding kategori yang lebih rumit/mewah, patsy adalah pilihan yang baik.

 

DictVectorizer

Dengan DictVectorizer, kita dapat secara langsung mengubah string menjadi feature.

Contoh penerapannya, sebagai berikut:

from sklearn.feature_extraction import DictVectorizer

dv = DictVectorizer()
my_dict = [{"species": iris.target_names[i]} for i in y]
dv.fit_transform(my_dict).toarray()[:5]

Dengan mudah kita bisa mengubah data pada dictionary “species” menjadi feature.

Tampilan di console:

dictvectorizer scikit-learn

Sumber Gambar: Dokumentasi Pribadi.

 

Patsy

Patsy merupakan package di luar scikit-learn, yang dapat digunakan untuk encoding variabel kategori. Patsy seringklai digunakan bersamaan dengan StatsModels. Patsy dapat mengubah array  yang tersusun oleh string menjadi design matrix.

Sebagai contoh, dm = patsy.design_matrix(“x” + “y”) akan membuat kolom yang tepat, apabila x dan y adalah string. Jika bukan, C(x) yang terdapat pada formula, akan membantu memperjelas bahwa ia adalah variabel kategori.

Sebagai contoh, kita akan menganggap iris.target sebagai variabel kontinu, apabila kita tidak terlalu mengenal datanya. Sehingga, perlu dilakukan operasi berikut:

import patsy

patsy.dmatrix("0 + C(species)", {"species": iris.target})

Tampilan pada console:

design matrix variabel kategori scikit-learn

Sumber Gambar: Dokumentasi Pribadi.

Selamat mencoba, dan semoga bermanfaat. Enjoy machine learning! 🙂

 

References & Further Reading

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

 

Sumber Gambar

Dokumentasi Pribadi.

https://medium.com/codebagng/basic-analysis-of-the-iris-data-set-using-python-2995618a6342

Follow and like us:

5 tanggapan pada “Berkenalan dengan scikit-learn (Part 7) – Bekerja dengan Variabel Kategori (Categorical Variables)”

  1. I see you don’t monetize your website, don’t waste your traffic, you can earn extra cash every month.
    You can use the best adsense alternative for any type of website (they
    approve all websites), for more details simply search
    in gooogle: boorfe’s tips monetize your website

  2. Pingback: Berkenalan dengan scikit-learn (Part 8) – Binarizing Label Features - hakim-azizul.com

  3. Hey there I am so happy I found your webpage, I really found
    you by error, while I was searching on Bing for something else, Nonetheless I
    am here now and would just like to say kudos for a
    incredible post and a all round enjoyable blog (I
    also love the theme/design), I don’t have time to read it
    all at the minute but I have book-marked it and also included your RSS feeds, so when I have time I will be
    back to read much more, Please do keep up the
    fantastic b.

Tinggalkan Balasan

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