Melakukan Feature Scaling pada Dataset
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:
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:
Tentu saja dengan menggunakan Python dan R, kita tidak perlu memasukkan rumus tersebut secara manual.
Daftar Isi
- Python / Spyder
- R / RStudio
Python / Spyder
Buka Anaconda Navigator, lalu buka Spyder
Lanjutkan project sebelumnya tentang Data Preprocessing 05
Tambahkan kode berikut:
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.”
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:
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:
Eksekusi kode diatas, dan akan muncul error seperti ini
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:
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:
Eksekusi pada kode diatas kali ini tidak akan menimbulkan error, yang berarti variabel training_set dan test_set berhasil di-scaling: