Feature scaling

Ada hal yang perlu diperhatikan ketika melakukan pemodelan ML yaitu memastikan kita memiliki skala yang sama untuk setiap kolom atau variabel yang kita miliki. Sebagai contoh mudah, kita lihat proses preprocessing dan pembagian training dan test set sebelumnya. Dataset yang kita miliki adalah sebagai berikut:

Pada kolom ‘Usia’, rentangnya adalah dari 30-an sampai 50-an. Maka selisihnya kurang lebih 20 poin. Sekarang kita lihat kolom ‘Gaji’. Rentangnya sangat besar mulai  dari 500K sampai 800K, maka selisihnya sekitar 300K. Jika kita tidak menyamakan skalanya ini akan menjadi maslaah bagi model ML kita. Apa masalahnya?

Pada model ML secara umum, skala yang digunakan adalah jarak euclidean (euclidean distance). jarak euclidean adalah jarak antara dua titik yang merupakan hasil dari akar dari penjumlahan selisih kuadrat keduanya. Ilustrai mudahnya dapat dilihat melalui gambar di bawah ini:

Mari kita ambil contoh baris ke-2 dengan baris ke-8, di mana kolom usia sebagai X dan kolom Gaji sebagai Y. Maka jarak euclideannya adalah

X = kudrat dari 48-27 =  441

Y = kuadrat dari 48000-79000 = 961 juta

Jika kita ambil akar dari X dan Y, maka sudah jelas koordinat X tidak berarti apa-apa karena terlalu kecil. Sementara koordinat Y dengan nilai jutaan jelas mendominasi, yang nantinya membuat model ML kita menjadi tidak optimal. Tentunya kita tidak menginginkan ini. Oleh karena itu perlu proses yang disebut dengan feature scaling yaitu dengan mentransformasikan kolom ‘Usia’ dan ‘Gaji’ menjadi nilai dengan rentang dari -1 sampai 1 melalui aritmatika standardisasi atau normalisasi.

 

Proses feature scaling dilakukan dengan menulis script sebagai berikut:

 

Bahasa Python

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

Penjelasan:

  • Line kedua adalah proses impor class StandardScaler dari library scikit-learn dan sublibrary preprocessing
  • Line ketiga adalah mendefinisikan sc_X (dibaca scale of X) sebagai variabel proses dari StandarScaler nantinya. Kita ingin menormalisasi variabel X (independen).
  • Line keempat adalah proses mengonversi X_train menjadi X_train yang sudah di rescale
  • Line kelima adalah proses konversi untuk X_test. Perlu diperhatikan kita tidak memakai fit_transform, melainkan cukup transform saja karena X_test secara otomatis sudah melalui proses fit terhadap X_train. Proses pertama yang kit lakukan adalah sc_X.fit_transform(X_train), maka secara otomatis sc_X sudah di fit-kan terhadap X_train.

Muncul pertanyaan, apakah y (variabel dependen) memerlukan feature scaling? Dalam konteks contoh di atas tidak perlu, karena datanya hanya terdiri dari dua kategori yaitu 0 dan 1. Namun ketika variabel dependen memiliki rentang yang besar, misal seperti permasalahan pada regresi (dibahas di bagian lain), maka feature scaling juga harus dilakukan.

 

Bahasa R

# Feature Scaling
training_set[,2:3] = scale(training_set[,2:3]) 
test_set[,2:3] = scale(test_set[,2:3])

Leave a Reply

avatar
  Subscribe  
Notify of