Pengertian dan Cara melakukan Normalisasi Data untuk Deep Learning
Mengapa sih kita butuh normalisasi data? Data adalah salah satu aset yang paling berharga dalam dunia modern. Dalam berbagai bidang, mulai dari bisnis hingga ilmu pengetahuan, data digunakan untuk mengambil keputusan yang cerdas. Namun, data hanya bermanfaat jika kita dapat menganalisisnya dengan benar. Salah satu langkah penting dalam pengolahan data adalah normalisasi. Dalam artikel ini, kita akan membahas mengapa normalisasi data penting, bagaimana melakukannya, dan berbagai metode yang bisa digunakan.
Apa itu Normalisasi Data?
Contents
Normalisasi data adalah proses mengubah data ke dalam format yang seragam atau standar. Tujuannya adalah untuk menghilangkan ketidakseimbangan dalam data, sehingga analisis data dapat dilakukan dengan lebih efektif. Ketidakseimbangan ini bisa terjadi dalam berbagai aspek data, seperti skala, distribusi, atau rentang nilai.
Dalam banyak kasus, data yang tidak dinormalisasi dapat menghasilkan kesalahan interpretasi yang signifikan. Misalnya, ketika data memiliki skala yang berbeda, maka perbandingan antara variabel-variabel tersebut bisa menjadi tidak adil. Normalisasi membantu mengatasi masalah ini sehingga kita dapat memahami data dengan lebih baik.
Mengapa Normalisasi Data Penting?
Ada beberapa alasan mengapa normalisasi data sangat penting:
- Perbandingan yang Adil: Normalisasi memastikan bahwa perbandingan antara variabel-variabel dalam data adalah adil. Ini memungkinkan kita untuk membuat keputusan yang lebih baik berdasarkan data.
- Kinerja Algoritma: Dalam machine learning dan data mining, banyak algoritma berkinerja lebih baik saat bekerja dengan data yang sudah dinormalisasi. Ini dapat menghasilkan hasil yang lebih akurat dan efisien.
- Visualisasi Data: Normalisasi data membuat visualisasi data lebih informatif. Ketika data sudah dalam skala yang seragam, grafik dan diagram menjadi lebih mudah dipahami.
-
Menghindari Kesalahan: Data yang tidak dinormalisasi dapat mengarah pada kesalahan dalam analisis statistik. Normalisasi membantu menghindari kesalahan ini.
Bagaimana Melakukan Normalisasi Data?
Normalisasi data bisa dilakukan dengan berbagai metode. Beberapa metode normalisasi yang umum digunakan antara lain:
Min-Max Scaling:
Dalam metode ini, data dinormalisasi ke dalam rentang 0 hingga 1. Ini dilakukan dengan mengurangkan nilai minimum dari setiap titik data, kemudian membaginya dengan selisih antara nilai maksimum dan minimum. Formula yang digunakan adalah:
X_normalized = (X - X_min) / (X_max - X_min)
baca lebih lanjut Pengertian dan Cara Normalisasi Data Teknik Normalisasi Citra
Z-Score (Standard Score) Scaling:
Dalam metode ini, data dinormalisasi menjadi distribusi normal dengan mean (rerata) 0 dan standar deviasi 1. Ini sangat berguna dalam statistik dan analisis data. Formula yang digunakan adalah:
Z = (X - X_mean) / X_std
Robust Scaling:
Metode ini mirip dengan Min-Max Scaling, tetapi lebih tahan terhadap outlier. Ia menggunakan kuartil bawah (Q1) dan kuartil atas (Q3) sebagai referensi. Formula yang digunakan adalah:
X_normalized = (X - Q1) / (Q3 - Q1)
Log Transformation:
Dalam beberapa kasus, data yang memiliki distribusi yang sangat tidak merata bisa dinormalisasi dengan mentransformasikannya menggunakan logaritma alami (ln). Ini biasanya berguna ketika data memiliki skewness yang tinggi.
Pilihan Metode Lain:
Terdapat berbagai metode normalisasi lain yang dapat disesuaikan dengan kebutuhan spesifik setiap data.
Kapan Harus Melakukan Normalisasi Data?
Normalisasi data perlu dilakukan tergantung pada jenis data yang Anda miliki dan tujuan analisisnya. Berikut adalah beberapa situasi di mana normalisasi data umumnya diperlukan:
- Ketika Anda bekerja dengan algoritma machine learning yang sensitif terhadap skala data, seperti Support Vector Machines (SVM) atau k-Means Clustering.
- Ketika Anda ingin membandingkan variabel-variabel dengan skala yang berbeda dalam analisis statistik atau visualisasi data.
- Ketika Anda ingin menghilangkan efek outlier pada data.
- Ketika Anda ingin mengubah distribusi data menjadi lebih normal untuk analisis statistik tertentu.
- Ketika Anda ingin meningkatkan interpretasi data dalam konteks tertentu.
Percobaan Machine Learning
Pengertian dan Cara melakukan Normalisasi Data untuk Deep Learning akan berguna ketika bekerja di Machine Learning. Secara umum, untuk Framework Pytorch dan Tensorflow membutuhkan data masukan/input berupa rentang nilai 0 sampai 1, walaupun demikian, kita bisa paksa saja untuk menggunakan data apa adanya tanpa perlu melakukan normalisasi.
Mari kita coba pakai tensorflow saja untuk di uji cobakan dengan dataset iris, baca lebih lanjut Memilih Tensorflow atau Pytorch untuk Framework Deep Learning
Tahap pertama menggunakan scaler untuk melakukan Scaling
from sklearn import datasets from sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScaler import tensorflow as tf from tensorflow import keras import numpy as np iris = datasets.load_iris() X = iris.data y = iris.target scaler = StandardScaler() X_scaled = scaler.fit_transform(X) lbl_clf = LabelEncoder() y_encoded = lbl_clf.fit_transform(y) y_final = tf.keras.utils.to_categorical(y_encoded) model = keras.models.Sequential([ keras.layers.Dense(128, activation='relu'), keras.layers.Dense(64, activation='relu'), keras.layers.Dense(3, activation='softmax') ]) model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics=['accuracy']) history = model.fit(X_scaled, y_final, epochs=5000,batch_size=32,shuffle=True, steps_per_epoch=500) prediksi = np.argmax(model.predict(X_scaled),axis=1) jumlah_benar = (y==prediksi).sum() print("akurasi: "+str((jumlah_benar/len(prediksi))*100)+" %")
hasilnya
500/500 [==============================] - 1s 1000us/step - loss: 9.2983e-10 - accuracy: 1.0000 Epoch 48/5000 500/500 [==============================] - 1s 1ms/step - loss: 7.7883e-10 - accuracy: 1.0000 Epoch 49/5000 500/500 [==============================] - 1s 1ms/step - loss: 3.8942e-10 - accuracy: 1.0000 Epoch 50/5000 500/500 [==============================] - 1s 1ms/step - loss: 1.8279e-10 - accuracy: 1.0000 Epoch 51/5000 500/500 [==============================] - 0s 39us/step - loss: 1.8279e-10 - accuracy: 1.0000 akurasi: 100.0 %
mari kita coba tanpa normalisasi dengan mengganti masukan X_scaled menjadi X saja pada kode berikut
history = model.fit(X, y_final, epochs=5000,batch_size=32,shuffle=True, steps_per_epoch=500) prediksi = np.argmax(model.predict(X),axis=1) jumlah_benar = (y==prediksi).sum() print("akurasi: "+str((jumlah_benar/len(prediksi))*100)+" %")
hasilnya
Epoch 48/5000 500/500 [==============================] - 0s 925us/step - loss: 0.0069 - accuracy: 0.9986 Epoch 49/5000 500/500 [==============================] - 0s 924us/step - loss: 0.0217 - accuracy: 0.9901 Epoch 50/5000 500/500 [==============================] - 0s 925us/step - loss: 0.0140 - accuracy: 0.9931 Epoch 51/5000 500/500 [==============================] - 0s 30us/step - loss: 0.0140 - accuracy: 0.9931 akurasi: 99.33333333333333 %
Bisa terlihat ternyata ada pengaruh yang cukup signifikan terhadap hasil nya