Preprocessing data adalah tahap penting dalam pembelajaran mesin, karena data masukan yang baik dan tepat (harusnya) akan membuat estimator mampu menghasilkan keluaran yang baik pula. Show
Tulisan ini menjelaskan secara singkat beberapa langkah yang sering dijumpai dalam tahap data preprocessing:
Semua contoh di bawah menggunakan paket Anaconda 3 (2019.3), IDE Spyder 3.3.3, Python 3.7. Impor libraryAda dua library populer yang digunakan dalam tulisan ini selain Scikit, yaitu Numpy dan Pandas.
Dataset contoh yang digunakan dapat diunduh di sini atau dihasilkan langsung dari kode di bawah. Sebaiknya, letakkan file csv di direktori yang sama dengan file python sumber.
Dataset dalam wujud tabel: Terdapat 15 observasi. Anggaplah setiap observasi merupakan data seorang karyawan, yang terdiri atas provinsi asal, usia (tahun), gaji (rupiah), dan apakah mereka memiliki asuransi jiwa. Impor dataset dari file csvJalankan kode di bawah hanya jika Anda memutuskan mengunduh file csv dataset.
Ada beberapa parameter metode 2:
Untuk melihat sekilas dataframe yang telah diimpor, jalankan perintah 0. Terlihat ada beberapa nilai yang kosong ( 1).Data kemudian dibagi menjadi dua jenis: data independen/prediktor ( 2) dan data dependen/target ( 3). Pembagian data ini menggunakan 4 seperti di bawah. Karena dataset adalah matriks M*N, kita menggunakan slicing dengan format 5.Contoh format slicing:
Untuk dataset contoh:
Atribut 9 akan mengembalikan numpy array. Tanpa atribut ini, 0 akan mengembalikan obyek DataFrame. Karena province, age, dan wage adalah tipe data yang berbeda, tipe data numpy array yang dikembalikan adalah campuran/object ( 1).Menangani nilai kosong (NaN)Seperti terlihat pada gambar preview dataset sebelumnya, ada beberapa observasi yang nilainya tidak lengkap (missing value). Ada dua pilihan: hapus observasi itu, atau substitusi nilai dengan mean/rata-rata kolom itu. Tentu saja, harapannya data yang Anda gunakan sebagai data masukan sudah lengkap dan baik sejak awalnya, sehingga cara ini tidak perlu dilakukan. Pada contoh ini, nilai yang kosong itu akan digantikan dengan mean kolom. Kelas yang digunakan adalah 2.
Ketika membuat obyek dari kelas 3, terdapat beberapa parameter yang harus diatur:
Selanjutnya obyek imputer harus di fit berdasarkan kolom yang bersangkutan menggunakan metode 1, dalam hal ini 2 kolom indeks 1 (age) dan 2 (wage). Nilai kosong pada kedua kolom itu akan diubah menggunakan metode 3.Sekarang 2 memiliki data yang lengkap, terlihat pada gambar di bawah.Mengkodekan data kategoriPada matriks 2 yang telah kita buat, terdapat kolom yang nilai datanya bertipe string, yaitu Province. Pada banyak kasus dan algoritma machine learning, data seperti ini harus diubah menjadi numerik (entah itu int atau float) agar dapat digunakan dengan baik.Kita dapat saja mengkodekan nama-nama provinsi seperti Banten, DKI Jakarta, dan lain-lain menjadi 0, 1, dan seterusnya. Masalahnya, estimator bisa saja menganggap kode provinsi memiliki relasi order (misalnya karena 1 > 0), padahal kita tahu itu hanya sebatas kode angka. Solusinya kita harus menggunakan variabel dummy menggunakan 6 dan 7.
Ketika membuat obyek 8 dari kelas 7, ada beberapa parameter yang harus diatur:
Sekarang, kolom Province telah selesai dikodekan. Terlihat pada gambar di bawah bahwa karyawan pertama berasal dari Banten. Per observasi, nilai 1 adalah unik. Terlihat kolom 3 dan 4 adalah usia dan gaji. Jalankan perintah di bawah untuk mengetahui urutan variabel dummy pada matriks X.
Bagaimana dengan variabel target ( 3) ? Untuk kasus ini, kita hanya akan mengubahnya menjadi numerik (0, 1, dan seterusnya) dengan 6:
Pada contoh di atas, kita menggunakan 7, jalan pintas dari 1 dan 3. Sekarang 3 akan menjadi seperti terlihat pada gambar di bawah. Terlihat bahwa 1 dan 0 telah menggantikan Yes dan No.Membagi dataset ke dalam training set dan test setModel machine learning umumnya membutuhkan dua set data untuk "belajar" dan menghasilkan estimasi: training set dan test set. Biasanya training set ini memiliki proporsi lebih besar dibandingkan test set, misal 80%. Untuk dataset yang digunakan dalam tulisan ini:
Untuk parameter:
Karena kita hanya memiliki 15 observasi, rasionya menjadi 12:3. Gambar di bawah menunjukkan training set untuk X dan y. Bagaimana dengan validation set? Untuk mendapatkan tiga set (train, validate, test), cukup jalankan 4 dua kali. Yang pertama untuk mendapatkan test set, yang kedua kali untuk mendapatkan validation set dari training set. Validation set biasanya digunakan untuk mendapatkan hyperparameter yang tidak didapatkan dari mempelajari training set.
Feature ScalingKita perlu menskalakan kolom-kolom yang dibutuhkan. Perbedaan skala dapat menyebabkan kendala dengan estimator. Ingat euclidean distance. (Pada contoh ini, hanya 2 yang diskalakan. Untuk kasus tertentu, variabel independen dan dependen harus diskala.)Ada tiga scaler di library scikit-learn yang sering digunakan: 6, 7, dan 8.StandardScaler menghilangkan mean (terpusat pada 0) dan menskalakan ke variansi (deviasi standar = 1), dengan asumsi data terdistribusi normal (gauss) untuk semua fitur. Formulanya $$z = (x - u)/s$$, dengan $$u$$ adalah mean sampel dan $$s$$ adalah deviasi standar (DS) sampel. 0Sebenarnya ada dua parameter boolean yang bisa diatur untuk 9, yaitu 0 dan 1. Umumnya biarkan saja ke default, yaitu True.Terlihat pada potongan kode di atas, fitting untuk menghitung mean dan DS hanya dilakukan pada training set (lalu dilakukan transformasi ( 2)). Gunakan mean dan DS yang didapat tadi untuk test set (sehingga cukup 3 saja).MinMaxScaler menskalakan nilai data ke dalam suatu range. Tidak masalah pada data non-gaussian. Formulanya $$(x_i - min(x)) / (max(x) - min(x))$$. 1Ketika membuat obyek dari kelas ini, ada parameter yang bisa diatur: 4 dengan nilai tuple dengan format 5, misalnya 6. Jika ada data bernilai negatif, bisa menggunakan 7.Dua scaler ini lemah terhadap outlier (data dengan nilai ekstrem). Sedangkan RobustScaler ( 8) mirip dengan Min-Max, hanya saja menggunakan range interkuartil. Scaler ini tahan terhadap outlier. Formulanya$$(x_i - Q_1(x)) / (Q_3(x) - Q_1(x))$$, dengan $$Q_3$$ adalah kuartil atas, $$Q_1$$ kuartil bawah. Selain tiga di atas, masih ada normalisasi baris sehingga masing-masing obervasi memiliki panjang = 1, binerisasi nilai (misal berat badan (kg) >= 70 menjadi 1, < 70 menjadi 0), dan beberapa lagi. Apa beda data numerik dan kategorik?Data numerik adalah datakuantitatifyang nilainya dalam bentuk numerik (angka). Data kategorik merupakan kumpulan kategori dan setiap nilai mewakili beberapa kategori, data kategorik disebut juga data kualitatif yang berbentuk tidak beraturan (Bhagat et al., 2013).
Bisakah data numerik dijadikan data kategorik?Data Kategorik
Data kategorik juga dapat menggunakan nilai numerik. Data kategorik dibagi menjadi dua yaitu data nominal dan data ordinal.
Apa yang dimaksud dengan categorical data types?Categorical data mengacu pada data type yang dapat disimpan dan diidentifikasikan berdasarkan nama atau label yang diberikan pada data tersebut. Categorical data didapat dengan menarik kesimpulan dari kemiripan ataupun hubungan antar data lalu digrupkan berdasarkan dengan kesesuaian tersebut.
Variabel numerik apa saja?Untuk variabel kuantitatif (numerik) dibagi menjadi variabel diskrit dan variabel kontinu.
|