Biasanya data yang didapatkan dari flat files atau database berupa data mentah. Algoritma machine learning classification bekerja dengan data yang akan diformat dengan cara tertentu sebelum mereka memulai proses training. Untuk menyiapkan data untuk konsumsi oleh algoritma machine learning, kita harus memrosesnya terlebih dahulu dan mengonversinya menjadi format yang tepat.
dalam penerapannya kita bisa menggunakan scikit-learn untuk preprocessing data, dalam library scikit-learn ada banyak fungsi-fungsi yang tersedia.
Binarization
proses binarization adalah ketika kita ingin mengubah variabel numerik kedalam nilai boolean (0 dan 1)
input = np.array([[8,2,3],
[4,7,1],
[9,2,6]])
data_biner = preprocessing.Binarizer(threshold = 5).transform(input)
output:
[[1 0 0]
[0 1 0]
[1 0 1]]
Mean Removal
Mean removal adalah cara umum dalam teknik preprocessing yang digunakan dalam machine learning, menghilangkan rata-rata biasanya sangat berguna dari variabel, jadi variabel berada ditengah tengah pada angka 0. kita melakukannya untuk menghilangkan bias dari variabel
# Sebelum mean removal
print("Mean = ", input.mean(), "\n", "Std deviation = ", input.std(axis = 0))
output:
Mean = 4.66666666667
Std deviation = [ 2.1602469 2.3570226 2.05480467]
# Sesudah mean removal
data_scaled = preprocessing.scale(input)
print("Mean = ", data_scaled)
print("Std deviation = ", data_scaled.std(axis = 0))
output:
Mean = [[ 0.46291005 -0.70710678 -0.16222142]
[-1.38873015 1.41421356 -1.13554995]
[ 0.9258201 -0.70710678 1.29777137]]
Std deviation = [ 1. 1. 1.]
Scaling
biasanya dalam dataset yang masih mentah, beberapa variabel memiliki nilai yang sangat bervariasi dan random, jadi sangat penting untuk di scale feature feature tersebut, in my prespective feature-feature tersebut nilainya sangat besar atau kecil hanya karena the nature of measurements
data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0, 1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input)
data_scaled_minmax
output:
array([[ 0.8, 0. , 0.4],
[ 0. , 1. , 0. ],
[ 1. , 0. , 1. ]])
Normalization
Biasanya dalam preprocessing, proses normalisasi untuk memodifikasi nilai dalam varabel sehingga kita dapat mengukurnya dalam skala umum. Dalam machine learning, kita menggunakan berbagai bentuk normalisasi. Beberapa bentuk normalisasi yang paling umum bertujuan untuk mengubah nilai-nilai sehingga jumlahnya menjadi 1. Normalisasi L1 (di library scikit-learn), yang mengacu pada Penyimpangan Absolut Terkecil, bekerja dengan memastikan bahwa jumlah nilai absolut adalah 1 dalam setiap baris. Normalisasi L2, yang mengacu pada kuadrat terkecil, bekerja dengan memastikan bahwa jumlah kuadrat adalah 1. Secara umum, teknik normalisasi L1 dianggap lebih kuat daripada teknik normalisasi L2. Teknik normalisasi L1 kuat karena tahan terhadap outlier dalam data. Seringkali, data cenderung mengandung outlier dan kita tidak bisa berbuat apa-apa. Kami ingin menggunakan teknik yang dapat dengan aman dan efektif mengabaikannya selama perhitungan. Jika kita memecahkan masalah di mana outlier itu penting, maka mungkin normalisasi L2 menjadi pilihan yang lebih baik
data_normalized_l1 = preprocessing.normalize(input, norm='l1')
data_normalized_l2 = preprocessing.normalize(input, norm='l2')
print("\nL1 normalized data:\n", data_normalized_l1)
print("\nL2 normalized data:\n", data_normalized_l2)
L1 normalized data:
[[ 0.61538462 0.15384615 0.23076923]
[ 0.33333333 0.58333333 0.08333333]
[ 0.52941176 0.11764706 0.35294118]]
L2 normalized data:
[[ 0.91168461 0.22792115 0.34188173]
[ 0.49236596 0.86164044 0.12309149]
[ 0.81818182 0.18181818 0.54545455]]
Label encoding
Ketika kita melakukan klasifikasi, biasanya kita berurusan dengan banyak label. Label-label ini bisa dalam bentuk kata-kata, angka, atau sesuatu yang lain. Fungsi pembelajaran mesin dalam sklearn mengharapkan mereka menjadi angka. Jadi jika mereka sudah menjadi nomor, maka kita dapat menggunakannya secara langsung untuk memulai pelatihan. Tetapi ini tidak biasanya terjadi.
Di dunia nyata, label dibuat dalam bentuk kata-kata, karena kata-kata dapat dibaca manusia. kita melabeli data training dengan kata-kata sehingga pemetaan dapat dilacak. Untuk mengonversi label kata menjadi angka, kita perlu menggunakan pembuat label encoding. label encoding mengacu pada proses transformasi label kata menjadi bentuk numerik. dalam hal regresi jika memuat varibel kategori dan nilainya tidak bisa di faktorisasi dalam bentuk tingkatan, dilakukan proses dummy, setiap nilai didalam variabel itu menjadi variabel lain.
label_kategori = ['senin', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu', 'minggu']
encoder = preprocessing.LabelEncoder()
encoder.fit(label_kategori)
print("\nLabel mapping:")
for i, item in enumerate(encoder.classes_):
print(item, '>', i)
output:
Label mapping:
jumat > 0
kamis > 1
minggu > 2
rabu > 3
sabtu > 4
selasa > 5
senin > 6
# Encode list menggunakan encoder sebelumnya
test_labels = ['senin', 'kamis', 'jumat']
encoded_values = encoder.transform(test_labels)
print("Labels =", test_labels)
print("Encoded values =", list(encoded_values))
Labels = ['senin', 'kamis', 'jumat']
Encoded values = [6, 1, 0]