Pada modul ini akan dibahas implementasi pemilihan feature dengan metoda filter menggunakan Python.
Pertama, import library yang digunakan yaitu, pandas, numpy, matplotlib, yellowbrick dan sklearn.
- Pandas, numpy untuk menangani dataframe.
- Matplotlib untuk data visualization
- Yellowbrick untuk data correlation
- Sklearn untuk feature filter
import pandas as pd import numpy as np import matplotlib.pyplot as plt from yellowbrick.target import FeatureCorrelation from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import f_regression
Load data HousingData.csv, HousingData.csv adalah salah satu dataset yang cukup terkenal untuk prediksi harga rumah di area Boston. Data download di https://drive.google.com/file/d/1SITrjPEoymayijavt_9JXLjxpm3TWDUb/view?usp=sharing
Ubah nama kolom agar lebih deskriptif. Pertama deskripsikan array col_nm berisi nama kolom, kemudian assign nama column dengan perintah df.columns = col_nm.
Missing value HousingData.csv menggunakan string ‘NA’, untuk mempermudah, replace dengan nilai nan menggunakan np.nan. Lalu periksa data null.
house_df = pd.read_csv('HousingData.csv')
col_nm = ['CrimeRate', 'ZonedRatio', 'IndusRatio', 'AlongRiver', 'NO2Level', 'Rooms', 'OldHomeRatio', 'Distance', 'RoadAcces', 'TaxRate', 'PupilTeacher', 'MedianHomeVal',]
house_df.columns = col_nm
house_df = house_df.replace('NA', np.nan)
house_df.isnull().sum().sort_values(ascending=False)
OldHomeRatio 20
AlongRiver 20
IndusRatio 20
ZonedRatio 20
CrimeRate 20
MedianHomeVal 0
PupilTeacher 0
TaxRate 0
RoadAcces 0
Distance 0
Rooms 0
NO2Level 0
Ada 5 column yang memiliki data null, karena ukuran dataset kecil, digunakan pendekatan replace dengan nilai mean.
data = house_df.fillna(house_df.mean())
Langkah berikutnya adalah optional, yaitu melihat data correlation menggunakan library yellowbrick.
target = data['MedianHomeVal']
features = data.drop('MedianHomeVal', axis=1)
feature_nm = list(features.columns)
visualizer = FeatureCorrelation(labels= feature_nm)
visualizer.fit(features, target)
visualizer.poof()

Langkah berikutnya adalah feature filtering menggunakan library sklearn. Fungsi yang digunakan adalah SelectKBeast dengan score function f_regression. Paramete k adalah jumlah feature terbaik yang akan digunakan.
Untuk dokumentasi lengkap lihat di https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html
selected_univariate = SelectKBest(f_regression, k=5).fit(features, target) feature_mask = selected_univariate.get_support()
Proses feature filtering sudah selesai, langkah berikutnya adalah untuk menampilkan score feature diurutkan berdasar score tertinggi.
Dapat dilihat, hasil feature filtering, 5 feature yang paling baik adalah Fooms, PupilTeacher, IndusRatio, TaxRate dan NO2Level.
pd.DataFrame({'FeatureName' : features.columns, 'Score' : selected_univariate.scores_}).sort_values(by='Score', ascending=False)
FeatureName Score
5 Rooms 471.846740
10 PupilTeacher 175.105543
2 IndusRatio 149.792187
9 TaxRate 141.761357
4 NO2Level 112.591480
8 RoadAcces 85.914278
6 OldHomeRatio 85.177279
0 CrimeRate 84.901074
1 ZonedRatio 77.928600
7 Distance 33.579570
3 AlongRiver 16.853633
Langkah berikut adalah optional, yaitu menyimpan data nama column feature.
feature_df = pd.DataFrame({'Univariate' : features.columns[feature_mask]})
2 thoughts on “Feature Selection Metoda Filter”