Feature Selection menggunakan Information Gain
Calculate Entropy, Information Gain dan Filtering Sparse Matrix Feature Vector
Hi semua, setelah sebelumnya kita melakukan proses feature engineering data tweet menggunakan TF-IDF disini,
Sekarang kita akan masuk ketahap feature selection, feature selection adalah proses pemilihan subset dari feature yang relevan (variables, predictors) untuk digunakan dalam pembuatan model[1].
Feature selection dilakukan dengan maksud untuk :
- Penyederhanaan model, membuatnya lebih mudah untuk diintrepretasi oleh researcher/user
- Mempercepat proses training
- Menghidari curse of dimensionality (beragam fenomena yang timbul saat menganalisa atau mengolah data dengan dimensi tinggi. Dalam Machine Learning ini terjadi ketika high-dimensional feature space memiliki n_samples yang terbatas)
- Enhance generalization dengan cara menurunkan overfitting.
Information Gain
Ada banyak jenis teknik seleksi fitur, diataranya adalah Information Gain (Kullback–Leibler divergence), Chi-Squared, ANOVA (Analysis of Variance), dll. Untuk sekarang kita akan menggunakan Information Gain. Information Gain dalam machine learning digunakan untuk mengukur seberapa relevan / berpengaruh sebuah feature terhadap hasil pengukuran. Penggunaan teknik ini dapat mereduksi dimensi feature dengan cara mengukur reduksi Entropy sebelum dan sesudah pemisahan. Information Gain (IG) dikenal juga dengan sebutan Mutual Information (MI) dalam kasus untuk mengetahui dependency antara dua variable (x,y).
Information Gain, IG(c,t) dirumuskan sebagai berikut,
S(c) merupakan Entropy seluruh feature c (sebelum pemisahan),
S(cⱼ) merupakan Entropy feature c untuk class t = j (setelah pemisahan)
value(t) merupakan himpunan nilai-nilai yang mungkin untuk class t,
n merupakan jumlah nilai-nilai yang mungkin untuk class t,
|cⱼ| merupakan jumlah sample class dengan nilai = j,
|c| merupakan jumlah sample untuk seluruh class.
Sedangkan Entropy, S(c) dirumuskan sebagai berikut,
p(cᵢ) merupakan probabilitas feature ke-i,
m merupakan jumlah maksimum feature.
Implementasi Menggunakan Scikit-Learn
Pada Scikit-Learn tersedia module untuk feature selection diantaranya adalah mutual_info_classif()
yang dapat digunakan untuk discrete target variable. Karena kasus yang akan kita selesaikan kedepanya adalah permasalahan target discrete (klasifikasi tweet hoax dan bukan hoax). Jika kita ingin digunakan untuk target data continue, gunakan mutual_info_regression()
.
Sebagai contoh, kita akan menghadirkan tiga feature x_1, x_2, x_3, x_4 dengan target y. Dimana sebenarnya y adalah color. Sehingga kita akan buktikan menggunakan mutual_info_classif()
.
LabelEncoder()
digunakan untuk memetakan categorical data color menjadi numeric. fungsi inverse_transform()
digunakan untuk mengembalikan encoded value menjadi color label. Kita gunakan discrete_features=False
untuk data structur dense matrix (x). JIka True
untuk data structure sparse matrix.
Output pada Jupyter Notebook,
Dari hasil tersebut, terlihat jika x_4 memiliki nilai MI 0.00, menandakan x_4 dengan target y tidak saling bergantung. Sehingga pada penerapanya nanti kita bisa gunakan sebuah nilai threshold untuk membatasi berapa nilai MI/IG sehingga sebuah fiture bisa dikatakan berpengaruh atau tidak terhadap target data.
Penerapan Pada Sparse Matrix TF-IDF
Sekarang kita akan coba untuk mencari MI untuk Sparse Matrix TF-IDF dan menerapkan threshold MI sebesar 0.01. Sehingga Feature yang akan dipilih hanya yang nilai MI-nya ≥ 0.01.
Untuk memulai tahap ini, pastikan kita sudah melakukan tutorial sebelumnya tentang TF-IDF, untuk mendapatkan sparse matrix TF-IDF.
Di tutorial sebelumnya kita sudah memiliki sparse matrix tfidf_mat_unigram
, tfidf_mat_bigram
dan tfidf_mat_trigram
,
Selanjutnya kita hitung MI/GI dengan menggunakan fungsi mutual_info_classif
untuk tfidf_mat_unigram
, tfidf_mat_bigram
dan tfidf_mat_trigram
sebagai input data dengan size (n_samples, n_feature) dan tags
sebagai target data dengan size (n_samples). Sebelumnya pada tahap feature Engineering TF-IDF kita memilih n_feature sebanyak 1000 term. Setelah itu dilakukan normalisasi agar nilai yang dihasilkan MI/GI terdistribusi direntang 0-1.
Result tfidf_mat_unigram
index 0 pada Jupyter Notebook,
Setelah itu kita baca file json yang menyimpan feature_name untuk tfidf_mat_unigram
, tfidf_mat_bigram
dan tfidf_mat_trigram
Selanjunya kita bisa menampilkan result MI untuk top 10 term dengan nilai tfidf terbesar pada tfidf_mat_unigram
, tfidf_mat_bigram
dan tfidf_mat_trigram
Result pada Jupyter Notebook,
- top 10 tfidf unigram dengan nilai MI
- top 10 tfidf bigram dengan nilai MI
- top 10 tfidf trigram dengan nilai MI
selanjutnya kita filter kolom dengan nilai norm_mi
< 0.01, list index kolom ini akan kita gunakan setelahnya untuk men-delete kolom-kolom pada sparse matrix tfidf_mat_unigram
, tfidf_mat_bigram
dan tfidf_mat_trigram
menggunakan numpy.delete()
,
Selanjutnya kita dapat plot untuk membandingkan banyaknya feature sebelum dan sesudah feature selection, plot dengan cara berikut,
Result pada Jupyter Notebook,
dari bar chart tersebut, terlihat bahwa sparse matrix baru tfidf_mat_unigram_selection
, tfidf_mat_bigram_selection
dan tfidf_mat_trigram_selection
, memiliki jumlah feature lebih kecil sebanyak 506
, 514
, 477
secara berturut-turut. Sedangkan kita tau pada sparse matrix sumbernya tfidf_mat_unigram
, tfidf_mat_bigram
dan tfidf_mat_trigram
memiliki ukuran 1000
untuk ketiganya, berarti +/- 50% feature pada sparse matrix dengan nilai MI dibawah 0.01.
Jika kita lihat kembali pada Dataframe ranking_unigram
, ranking_bigram
, ranking_trigram
, ada term dengan nilai MI
= 0.0 namun nilai TF-IDF nya besar. Apakah ini normal? bisa saja, karena Mutual Information / Information Gain akan mengkalkulasi derajat keterkaitan antara term sebagai feature (input) data dengan label sebagai class /(output) data.
Save Data
Terakhir, kita bisa save data diatas, Dataframe ranking, Sparse Matrix setelah seleksi fitur dan Feature name/ terms setelah seleksi feature,
Full code diatas bisa kalian dapatkan pada Github saya disini,
Nah ditahap ini kita berhasil mereduksi dimensi feature (term) dari sparse matrix. Dimensionality reduction ini seperti dijelaskan diawal tulisan memiliki banyak manfaat. Selanjutnya sparse matrix setelah seleksi fitur akan kita apply kedalam algoritma Convolution Neural Network (CNN).
Sekian dan terima kasih.
Sumber :
- https://en.wikipedia.org/wiki/Feature_selection
- https://en.wikipedia.org/wiki/Mutual_information
- https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
- https://en.wikipedia.org/wiki/Entropy_(information_theory)
- https://machinelearningmastery.com/information-gain-and-mutual-information/
- https://www.researchgate.net/publication/320143360_Seleksi_Fitur_Pada_Dokumen_Abstrak_Teks_Bahasa_Indonesia_Menggunakan_Metode_Information_Gain
- https://stackoverflow.com/questions/53470097/how-to-apply-mutual-information-on-categorical-features
- https://scikit-learn.org/stable/auto_examples/feature_selection/plot_f_test_vs_mi.html#sphx-glr-auto-examples-feature-selection-plot-f-test-vs-mi-py
- https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.mutual_info_classif.html#r50b872b699c4-1