Feature Selection Metoda Filter

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]})

Sharing is caring:

2 thoughts on “Feature Selection Metoda Filter”

Leave a Comment