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])
done
Kemudian jika kita sudah punya Training dan test set, bagaimana tahapan untuk menguji nya?
Data di training set di-fitting (dimodelkan) dengan model machine learning yang diinginkan.
Setelah itu diuji performanya untuk test set.
Silakan dibaca teknisnya di beberapa artikel yang membahas machine learning di website ini.
Semoga menjawab.
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
Iya betul
Saya punya dataset untuk knee disorders normal dan abnormal, saya ingin memulai tahapan preprocessing sblm ke Machine learning, bagaimana caranya ya mas?
Bisa dijelaskan datasetnya berupa gambar atau hanya angka-angka saja?
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
Secara umum 80:20, ada juga yang 70:30, tapi jarang 90:10. Kalau untuk iseng-iseng dan latihan silakan bebas, tapi kalau untuk riset sebaiknya ada dasarnya.
Data 40 terlalu sedikit untuk aplikasi machine learning, akan underfitting nanti.
Semoga menjawab.
Thanks mas infonya, iya data nya dpt dr kuesioner jd dikit
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
Semakin banyak datanya semakin bagus, itu aturan dasarnya.
Kalau dalam proses manual scaling, normalisasi atau standarisasi terlebih dahulu yang dikerjakan pak?
Keduanya memiliki tujuan berbeda: – Standardisasi merubah (transform) semua variabel yang ada agar nilai rata-ratanya berada di titik nol, dan standar deviasinya bernilai 1. Hasil standardisasi sering disebut z-score. Hasilnya nanti antara -1 (atau minus tak hingga) sampai 1 (positif tak hingga). – Normalisasi merubah (transform) semua variabel yang ada agar bernilai antara rentang 0 hingga 1. Penggunaan: – Gunakan standardisasi (seperti pada contoh artikel ini – perintah StandardScaler()) jika kita mengasumsikan datanya berdistribusi normal. Biasanya kita gunakan saat ingin melakukan proses analisis clustering atau untuk analisis statistik lebih lanjut. – Gunakan normalisasi (perintah MinMaxScaler()) jika kita mengasumsikan datanya tidak… Read more »
Terimakasih atas jawabannya pak 😀
Kalau kasus saya prediksi menggunakan metode logistic regression dan neural network (Metode Machine Learning), apakah tepat jika menggunakan feature scaling normalisasi? Terima kasih
Bisa2 saja
Baik, terima kasih atas jawabannya pak 😀
Wah siap, terjawab sudah. Jadi data contoh dianggap berdistribusi normal ya senhingga menggunakan fungsi standardscaler?
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.
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.
Halo Pak, saya mau bertanya, untuk feature scaling lebih baik dilakukan sebelum atau sesudah spliting data?
Terimakasih, mohon bantuannya pak.
Umumnya feature scaling dilakukan sebelum split datanya.
Semoga menjawab.
Terimakasih banyak pak 😀
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.
Apakah ini file image yg akan di standardisasi?
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 ?
Jawabannya tidak
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?
Data yang ingin diprediksi (test set) juga harus melakukan preprocess yang sama di training set.
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?
Ya sama, perlu juga
caranya bagaimana ya? apakah ada fungsi khusus untuk melakukan hal tersebut?
Pakai fungsi feature scaling di scikit learn juga bisa. Sama seperti saat di training set.
Oke, Terima kasih banyak
Halo mas, apakah ada contoh dimana y (variabel dependen) diperlukan feature scaling? atau adakah referensi jurnal/paper yang dapat saya baca?
Variabel dependen tidak diperlukan feature scaling.