Melakukan Feature Scaling pada Dataset

Data Preprocessing 06

R. Kukuh
4 min readFeb 10, 2018

Perhatikan dataset yang kita gunakan selama ini. Fokuskan pada kolom yang berisi numerical data, yaitu: Age dan Salary. Walaupun kedua kolom ini sama-sama berisi data dengan tipe numeric, namun keduanya memiliki karakteristik rentang nilai yang berbeda.

Age memiliki rentang dari 1 sampai 150 (dalam tahun), sedangkan Salary memiliki rentang dari 10 ribu sampai 100 ribu (dalam dolar). Perbedaan rentang nilai inilah yang nantinya bisa menimbulkan masalah dalam model Machine Learning.

Kenapa demikian?

Well, sebagian besar model Machine Learning berdasarkan pada perhitungan Euclidean Distance antar 2 poin:

Rumus dan visualisasi perhitungan Euclidean Distance

Dengan menggunakan rumus Euclidean Distance diatas, maka jelas bahwa hasil perhitungan pada kolom Age dan Salary akan memiliki jarak (distance) yang sangat jauh. Disinilah proses Feature Scaling dibutuhkan.

Feature Scaling adalah suatu cara untuk membuat numerical data pada dataset memiliki rentang nilai (scale) yang sama. Tidak ada lagi satu variabel data yang mendominasi variabel data lainnya.

Diatas kertas, rumus yang digunakan untuk proses Feature Scaling ini adalah Standarisation dan Normalisation:

Standarisation dan Normalisation yang digunakan dalam proses Feature Scaling

Tentu saja dengan menggunakan Python dan R, kita tidak perlu memasukkan rumus tersebut secara manual.

Daftar Isi

  1. Python / Spyder
  2. R / RStudio

Python / Spyder

Buka Anaconda Navigator, lalu buka Spyder

Lanjutkan project sebelumnya tentang Data Preprocessing 05

Tambahkan kode berikut:

Kode python untuk proses feature scaling terhadap variabel X_train dan X_test

Perhatikan bahwa untuk X_test hanya perlu transform dan bukan fit transform, karena X_test sudah “fit” terhadap X_train-nya.

ADA PERBEDAAN PENDAPAT

Sampai disini mungkin muncul pertanyaan:

“Apa perlu melakukan feature scaling pada dummy variable (ex: X_train)?”

Dalam banyak diskusi, ada 2 pendapat mengenai hal ini, yaitu:

Kelompok yang mengatakan tidak perlu di-scaling karena dummy variabel hanyalah hasil encoding, dan kelompok yang mengatakan perlunya men-scaling jika ingin meningkatkan akurasi dan kecepatan perhitungan dari model Machine Learning.

Lalu bagaimana dengan kasus yang sekarang sedang kita lakukan ini?

Well, untuk kasus ini jawabannya adalah: Tidak Perlu.

Karena dummy variables dalam kasus ini interpretasinya adalah tentang “Country yang ini nilai encoding-nya adalah yang ini, sedangkan country yang itu nilai encoding-nya adalah yang itu, dst.”

Mengingatkan kembali isi dari variabel X_train

Perhatian: Bagi yang lupa tentang apa dan bagaimana dummy variable maupun encoding categorical data, tolong kembali dulu ke tutorial sebelumnya.

MARI KITA LANJUTKAN…

Ehm, Oke!

Walaupun sudah saya katakan bahwa dalam kasus kali ini kita tidak perlu melakukan proses feature scaling, ditambah fakta bahwa tidak mengapa untuk melakukan feature scaling pada dummy variable, sekaligus bahwa artikel ini adalah tentang melakukan proses feature scaling, maka mari kita lakukan proses feature scaling 😂

Masih ingat tambahan kode yang saya minta untuk ditambahkan diatas? Good. Eksekusi kode tersebut, lalu lihat hasilnya:

Hasil feature scaling pada X_train dan X_test

Nampak bahwa sekarang data pada X_train dan X_test berhasil di-scaling (telah memiliki rentang nilai yang sama).

ADA PERBEDAAN PENDAPAT (LAGI)

Setelah melakukan feature scaling pada independent variables (seperti X = Country, Age, dan Salary), perlukan untuk melakukannya juga pada dependent variable (seperti Y = Purchased) ?

Jawabnya tergantung pada isi / jenis dependent variable tersebut.

Jika dependent variable isinya adalah categorical data yang jelas interpretasinya, seperti YES dan NO saja, maka tidak perlu dilakukan feature scaling.

Namun dalam kasus perhitungan Regression dimana dependent variable nilainya bisa sangat bervariasi, maka feature scaling harus dilakukan.

MARI KITA LANJUTKAN (LAGI)…

Hmm…, sebetulnya tidak ada yang perlu dilakukan. Kita sudah berhasil melakukan proses feature scaling pada independent variables X_train dan X_test.

R / RStudio

Buka RStudio

Lanjutkan project sebelumnya tentang Data Preprocessing 05

Tambahkan kode berikut:

Kode R untuk proses feature scaling

Eksekusi kode diatas, dan akan muncul error seperti ini

Error yang muncul saat scaling

Error ini mengatakan bahwa ada suatu kolom yang isinya tidak numeric, padahal feature scaling hanya bisa dilakukan pada numeric data.

Mari kita cari tahu apa isi dari data training_set yang bukan numeric:

Isi dari variabel training_set

Wew, ternyata isinya sudah numeric semua!?

Lalu kenapa R mengatakan bahwa ada non-numeric value di sana? Well, sebenarnya nilai numeric pada kolom Country dan Purchased tidaklah numeric. Bagi R, kedua kolom itu masih bernilai seperti sebelumnya.

Maka yang harus kita lakukan adalah tidak mengikut sertakan kolom Country dan Purchased pada proses feature scaling ini:

Proses feature scaling dilakukan hanya pada kolom Age dan Salary

Eksekusi pada kode diatas kali ini tidak akan menimbulkan error, yang berarti variabel training_set dan test_set berhasil di-scaling:

Hasil proses feature scaling pada data training_set
Hasil proses feature scaling pada data test_set

--

--

R. Kukuh

Sr. Software Dev Learning Facilitator at Apple Developer Academy @UC