Feature scaling

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 dengan rentang 0 sampai 1 dengan aritmatika 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 kita lakukan adalah sc_X.fit_transform(X_train), maka secara otomatis sc_X sudah di fit-kan terhadap X_train.

Penjelasan lebih mudahnya adalah seperti ini;

fit” menghitung nilai rataan dan standar deviasi untuk NANTI-nya digunakan saat proses scaling. Ia hanya menghitung nilai rataan dan standar deviasi saja, tanpa memberikan apa-apa ke kita.

Sementara “transform” menggunakan hasil perhitungan rataan dan standar deviasi sebelumnya (dari ‘fit’) untuk diterapkan ke datanya (mengurangkan semua data dengan nilai rataan, kemudian dibagi dengan standar deviasi – lihat rumus standardisasi di atas).

“fit_transform” melakukan keduanya sekaligus. Lebih mudah menulis fit_transform karena hanya 1 baris, daripada menuliskannya 2 kali melalui fit kemudian transform.

Untuk X_training, kita memerlukan fit_transform, karena kita hitung rataan, standar deviasi lalu mengaplikasikannya ke dataset X_train itu sendiri. Sementara X_test tidak perlu, karena nilai rataan dan standar deviasi tadi sudah dihitung (dan disimpan di memory), sehingga kita cukup mengaplikasikan hasil perhitungan tadi dengan cukup menggunakan transform ke X_test. Bisa dipahami ya.

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])
Subscribe
Notify of
guest

37 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
hanru
hanru
4 years ago

done

andi
andi
4 years ago

Kemudian jika kita sudah punya Training dan test set, bagaimana tahapan untuk menguji nya?

andi
andi
Reply to  MB Herlambang
4 years ago

Jadi misalnya data di training set (pada contoh diatas) difitting menggunakan multiple linear regression (salah satu contoh model machine learning). Begitu ya mas ?
Mohon maaf masih pemula banget

Adi Purnawan
Adi Purnawan
4 years ago

Saya punya dataset untuk knee disorders normal dan abnormal, saya ingin memulai tahapan preprocessing sblm ke Machine learning, bagaimana caranya ya mas?

Egy
Egy
4 years ago

Halo mas, mau tanya untuk proses pembagian Ratio secara manual untuk data Set menjadi data training dan testing , jika saya punya data hanya 40 bolehkah menggunakan presentasi 90:10 mas, apa ada ketentuannya berdasarkan jumlah data yg kita punya, makasih mas sebelumnya hehe

Egy
Egy
Reply to  MB Herlambang
4 years ago

Thanks mas infonya, iya data nya dpt dr kuesioner jd dikit

Shafa
Shafa
Reply to  MB Herlambang
3 years ago

Halo mas, kalau data saya 105 ingin menggunakan logistic regression dan neural network untuk thesis. Bagaimana menurut mas apakah datanya terlalu sedikit? Karena saya lihat ada yang menggunakan data 38 saja

Kimebmen Simbolon
Kimebmen Simbolon
4 years ago

Kalau dalam proses manual scaling, normalisasi atau standarisasi terlebih dahulu yang dikerjakan pak?

Kimebmen Simbolon
Kimebmen Simbolon
Reply to  MB Herlambang
4 years ago

Terimakasih atas jawabannya pak 😀

Shafa
Shafa
Reply to  MB Herlambang
3 years ago

Kalau kasus saya prediksi menggunakan metode logistic regression dan neural network (Metode Machine Learning), apakah tepat jika menggunakan feature scaling normalisasi? Terima kasih

Shafa
Shafa
Reply to  MB Herlambang
3 years ago

Baik, terima kasih atas jawabannya pak 😀

Nova
Nova
Reply to  MB Herlambang
2 years ago

Wah siap, terjawab sudah. Jadi data contoh dianggap berdistribusi normal ya senhingga menggunakan fungsi standardscaler?

Yudi Hendra
Yudi Hendra
4 years ago

Mas Herlambang, bgmn cara melakukan scale thd data frame dg dimensi 1 baris (dlm R)? Saya ingin melakukan new prediction thd model ANN yg telah dibuat, dimana new data tsb dimasukkan dlm data frame baru dg dimensi 1 baris tsb. Trims penjelasannya.

Afrizal
Afrizal
4 years ago

Assalamualaikum, saya ingin menanyakan beberapa hal pak :
1. Apakah feature scaling wajib dilakukan terutama pada supervised learning (regresi dan klasifikasi) atau ada pengecualian sehingga feature scaling tidak perlu dilakukan.?
2. Apakah dengan melakukan feature scaling (standarisasi) membuat data kita berdistribusi normal itu juga berarti menghilangkan outlier pada data kita.?
Mohon pencerahannya pak.

Kimebmen Simbolon
Kimebmen Simbolon
4 years ago

Halo Pak, saya mau bertanya, untuk feature scaling lebih baik dilakukan sebelum atau sesudah spliting data?
Terimakasih, mohon bantuannya pak.

Kimebmen Simbolon
Kimebmen Simbolon
Reply to  MB Herlambang
4 years ago

Terimakasih banyak pak 😀

Muthia Zahra Nurfatiha
Muthia Zahra Nurfatiha
4 years ago

Halo pak, terimakasih banyak ilmu nya, semoga berkah ya pak.
Disini saya mau bertanya pak, kan kalau standardisasi itu membuat nilai menjadi antara rentang [-1, 1]. Setelah di transformasikan dengan X_test = sc_X.transform(X_test) nilai saya data:image/png;base64,— menjadi seperti itu pak, apakah itu normal? apa ternyata perlu menggunakan fit_transform?
terimakasih pak sebelumnya.

khairi
khairi
4 years ago

mau bertanya pak, untuk feature scaling kan datanya kalau d standarisasi berkisar antara -1 smpai 1. jika kita melakukan predict nntinya apakah data yang dihasilkan berada d rentang tersebut ?

Nabil
Nabil
2 years ago

Apabila proses standarisasi/normalisasi telah dilakukan pada dataset, apakah data yang digunakan untuk predict juga perlu melalui proses standarisasi/normalisasi? Jika iya, bagaimana cara untuk menormalisasi/standarisasi data yang akan di prediksi?

Nabil
Nabil
Reply to  MB Herlambang
2 years ago

Maksud saya itu data yang diprediksi bukan test set, melainkan data yang menjadi parameter dari fungsi predict seperti gambar berikut. Apakah data yang menjadi parameter juga perlu dinormalisasi/standarisasi?

wwww.png
Nabil
Nabil
Reply to  MB Herlambang
2 years ago

caranya bagaimana ya? apakah ada fungsi khusus untuk melakukan hal tersebut?

Nabil
Nabil
Reply to  MB Herlambang
2 years ago

Oke, Terima kasih banyak

Fathur
Fathur
1 year ago

Halo mas, apakah ada contoh dimana y (variabel dependen) diperlukan feature scaling? atau adakah referensi jurnal/paper yang dapat saya baca?