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
Untuk melihat sekilas dataframe yang telah diimpor, jalankan perintah Data kemudian dibagi menjadi dua jenis: data independen/prediktor ( Contoh format slicing:
Untuk dataset contoh:
Atribut 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
Ketika membuat obyek dari kelas
Selanjutnya obyek imputer
harus di fit berdasarkan kolom yang bersangkutan menggunakan metode Sekarang Mengkodekan data kategoriPada matriks
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
Ketika membuat obyek
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 (
Pada contoh di atas, kita menggunakan 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
Feature ScalingKita perlu menskalakan kolom-kolom yang dibutuhkan. Perbedaan skala dapat menyebabkan kendala dengan estimator. Ingat euclidean distance. (Pada contoh ini, hanya Ada tiga scaler di library scikit-learn yang sering digunakan: 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.
Sebenarnya ada dua parameter boolean yang bisa diatur untuk Terlihat pada potongan kode di atas, fitting untuk menghitung mean dan DS
hanya dilakukan pada training set (lalu dilakukan transformasi ( MinMaxScaler menskalakan nilai data ke dalam suatu range. Tidak masalah pada data non-gaussian. Formulanya $$(x_i - min(x)) / (max(x) - min(x))$$.
Ketika membuat obyek dari kelas ini, ada parameter yang bisa diatur: Dua scaler ini lemah terhadap outlier (data dengan nilai ekstrem). Sedangkan RobustScaler ( $$(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. Referensi
|