Traffine I/O

Bahasa Indonesia

2022-08-04

Feature Importance dalam Decision Tree

Pengenalan

Decision Tree adalah pilihan populer di antara algoritma pembelajaran mesin karena kesederhanaannya, keinterpretabilitasannya, dan kemudahan visualisasinya. Aspek kritis dari Decision Tree adalah kemampuannya untuk secara otomatis memilih dan menempatkan fitur-fitur yang paling relevan dalam sebuah kumpulan data. Proses ini, disebut sebagai Feature Importance, membantu dalam menyederhanakan kumpulan data yang kompleks dan mengidentifikasi variabel yang paling signifikan. Dalam artikel ini, saya akan menjelajahi konsep Feature Importance dalam Decision Tree dan membahas berbagai metode yang digunakan untuk menghitungnya, seperti Gini Impurity, Information Gain, dan Gain Ratio.

Gini Impurity

Gini Impurity adalah ukuran seberapa sering elemen acak dari kumpulan data akan salah diklasifikasikan jika secara acak diberi label sesuai dengan distribusi label dalam subset. Gini Impurity dihitung untuk setiap fitur, dan algoritma Decision Tree memilih fitur dengan Gini Impurity terendah untuk memisahkan kumpulan data pada setiap simpul. Feature Importance secara keseluruhan ditentukan oleh pengurangan kumulatif dalam Gini Impurity yang dibawa oleh setiap fitur dalam pohon.

Secara matematis, Gini Impurity untuk kumpulan data S dapat dihitung sebagai berikut:

Gini(S) = 1 - \sum (p_i)^2

di mana p_i adalah probabilitas elemen yang termasuk ke dalam kelas i.

Gini Impurity digunakan untuk memutuskan fitur mana yang harus dibagi pada setiap simpul dalam Decision Tree. Fitur yang menghasilkan Gini Impurity rata-rata tertimbang terendah setelah membagi dipilih.

Information Gain

Information Gain adalah metode lain yang digunakan untuk menghitung Feature Importance dalam Decision Tree. Pendekatan ini didasarkan pada konsep entropi, yang merupakan ukuran keacakan atau kekacauan dalam sebuah kumpulan data. Information Gain menghitung pengurangan entropi yang dihasilkan dari membagi sebuah kumpulan data berdasarkan suatu fitur tertentu. Fitur yang menghasilkan Information Gain tertinggi dipilih untuk membagi kumpulan data pada setiap simpul. Feature Importance secara keseluruhan ditentukan oleh Information Gain kumulatif yang diberikan oleh setiap fitur dalam pohon.

Entropi dari kumpulan data S dapat dihitung sebagai berikut:

Entropy(S) = - \sum p_i * \log_2(p_i)

di mana p_i adalah probabilitas elemen yang termasuk ke dalam kelas i.

Information Gain dapat dihitung menggunakan rumus:

InformationGain(S, A) = Entropy(S) - \sum ((|S_v| / |S|) * Entropy(S_v))

A adalah fitur yang sedang dipertimbangkan, S_v adalah subset dari kumpulan data dengan nilai v untuk fitur A, dan |S_v| dan |S| masing-masing mewakili ukuran subset S_v dan S.

Gain Ratio

Gain Ratio adalah variasi dari Information Gain yang memperhitungkan informasi intrinsik dari sebuah fitur. Ini mengatasi bias terhadap fitur dengan jumlah nilai yang berbeda yang besar dalam Information Gain. Gain Ratio dihitung dengan membagi Information Gain dengan informasi intrinsik dari sebuah fitur. Fitur dengan Gain Ratio tertinggi dipilih untuk memisahkan pada setiap simpul, dan Feature Importance secara keseluruhan ditentukan oleh Gain Ratio kumulatif yang diberikan oleh setiap fitur dalam pohon.

Informasi intrinsik dari fitur A dapat dihitung sebagai berikut:

IntrinsicInformation(A) = - \sum ((|S_v| / |S|) * \log_2(|S_v| / |S|))

di mana S_v adalah subset dari kumpulan data dengan nilai v untuk fitur A, dan |S_v| dan |S| masing-masing mewakili ukuran subset S_v dan S.

Gain Ratio kemudian dapat dihitung menggunakan rumus:

GainRatio(S, A) = InformationGain(S, A) / IntrinsicInformation(A)

Mengvisualisasikan Feature Importance

Dalam bagian ini, saya akan menunjukkan bagaimana memvisualisasikan Feature Importance dalam kasus regresi dan klasifikasi menggunakan Python.

Pertama, mari impor library yang diperlukan dan buat dataset:

python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression, make_classification
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# Create synthetic datasets for regression and classification
X_reg, y_reg = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=42)
X_clf, y_clf = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)

# Split the datasets into train and test sets
X_reg_train, X_reg_test, y_reg_train, y_reg_test = train_test_split(X_reg, y_reg, test_size=0.3, random_state=42)
X_clf_train, X_clf_test, y_clf_train, y_clf_test = train_test_split(X_clf, y_clf, test_size=0.3, random_state=42)

Sekarang, mari buat dan latih model Decision Tree untuk regresi dan klasifikasi:

python
# Create and train decision tree models
regressor = DecisionTreeRegressor(random_state=42)
classifier = DecisionTreeClassifier(random_state=42)

regressor.fit(X_reg_train, y_reg_train)
classifier.fit(X_clf_train, y_clf_train)

Setelah model dilatih, kita dapat memperoleh nilai Feature Importance dan memvisualisasikannya:

python
# Get feature importance values for regression and classification models
reg_importance = regressor.feature_importances_
clf_importance = classifier.feature_importances_

# Function to visualize feature importance
def plot_feature_importance(importances, title):
    indices = np.argsort(importances)[::-1]
    plt.figure()
    plt.title(title)
    plt.bar(range(len(importances)), importances[indices], align='center')
    plt.xticks(range(len(importances)), indices)
    plt.xlabel('Feature Index')
    plt.ylabel('Feature Importance')
    plt.show()

# Visualize feature importance for regression and classification
plot_feature_importance(reg_importance, 'Feature Importance for Regression')
plot_feature_importance(clf_importance, 'Feature Importance for Classification')

Feature importance for regression
Feature importance for classification

Ini akan menghasilkan dua diagram batang yang menampilkan nilai Feature Importance untuk kasus regresi dan klasifikasi. Sumbu-x mewakili indeks fitur, sedangkan sumbu-y mewakili nilai Feature Importance. Fitur diurutkan menurut pentingnya secara menurun.

Dalam contoh yang diberikan, Feature Importance dihitung menggunakan Gini Impurity untuk DecisionTreeClassifier dan mean squared error (MSE) untuk DecisionTreeRegressor. Ini adalah kriteria ketidakmurnian default yang digunakan dalam library Scikit-learn ketika membuat Decision Tree.

Anda dapat mengubah kriteria ketidakmurnian untuk DecisionTreeRegressor dan DecisionTreeClassifier dengan menentukan parameter kriteria ketika membuat model Decision Tree. Untuk DecisionTreeClassifier, Anda dapat menetapkan parameter criterion menjadi 'entropy' untuk menggunakan Information Gain sebagai gantinya dari Gini Impurity. Untuk DecisionTreeRegressor, Anda dapat menetapkan parameter criterion ke 'mae' (mean absolute error) jika Anda lebih suka menggunakan ukuran ketidakmurnian yang berbeda. Namun, Scikit-learn tidak mendukung Gain Ratio sebagai kriteria ketidakmurnian secara langsung.

Referensi

https://medium.com/data-science-in-your-pocket/how-feature-importance-is-calculated-in-decision-trees-with-example-699dc13fc078
https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html
https://medium.com/analytics-vidhya/feature-importance-explained-bfc8d874bcf

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!