Pohon apel menghasilkan beberapa campuran buah yang besar dan cacing kucing. Namun apel di toko bahan makanan kelas atas menghasilkan buah yang 100% sempurna. Antara kebun dan toko bahan makanan, seseorang menghabiskan banyak waktu untuk membersihkan apel yang busuk atau melempar sedikit lilin pada apel yang masih bisa diselamatkan. Sebagai engineer ML, Anda akan menghabiskan banyak waktu untuk membuang contoh yang buruk dan membersihkan contoh yang masih bisa diselamatkan. Bahkan hanya beberapa "apel busuk" saja dapat merusak kumpulan data yang besar.
Menskalakan nilai fitur
Penskalaan berarti mengonversi nilai fitur floating point dari rentang alaminya (misalnya, 100 hingga 900) menjadi rentang standar (misalnya, 0 hingga 1 atau -1 hingga +1). Jika set fitur hanya terdiri dari satu fitur, penskalaan akan memberikan manfaat praktis yang sedikit atau tidak ada sama sekali. Namun, jika set fitur terdiri dari beberapa fitur, penskalaan fitur akan memberikan manfaat berikut:
- Membantu agar penurunan gradien dikonvergensi lebih cepat.
- Membantu menghindari "perangkap NaN", yaitu satu angka dalam model menjadi NaN (misalnya saat nilai melebihi batas presisi floating point selama pelatihan), dan—karena operasi matematika—setiap angka dalam model pada akhirnya juga akan menjadi NaN.
- Membantu model mempelajari bobot yang sesuai untuk setiap fitur. Tanpa penskalaan fitur, model akan terlalu memperhatikan fitur yang memiliki rentang lebih luas.
Anda tidak harus memberi setiap fitur floating point dengan skala yang sama persis. Tidak ada hal buruk yang akan terjadi jika Fitur A diskalakan dari -1 hingga +1 sedangkan Fitur B diskalakan dari -3 hingga +3. Namun, model Anda akan bereaksi buruk jika Fitur B diskalakan dari 5.000 hingga 100.000.
Menangani pencilan yang ekstrem
Plot berikut mewakili fitur yang disebut roomsPerPerson
dari kumpulan data Perumahan di California.
Nilai roomsPerPerson
dihitung dengan membagi jumlah total ruangan untuk suatu wilayah dengan populasi untuk wilayah tersebut. Plot menunjukkan bahwa sebagian besar area di California memiliki satu atau dua ruangan per orang. Tapi lihatlah
sepanjang sumbu x.
Gambar 4. Ekor yang sangat lincah.
Bagaimana kita bisa meminimalkan pengaruh pencilan yang ekstrem tersebut? Salah satu caranya adalah dengan mengambil log setiap nilai:
Gambar 5. Penskalaan logaritmik masih menyisakan satu ekor.
Penskalaan log melakukan tugas yang sedikit lebih baik, tetapi masih ada ekor yang signifikan dari nilai pencilan. Mari kita pilih pendekatan lainnya. Bagaimana jika kita hanya "membatasi"
atau "memotong" nilai maksimum roomsPerPerson
pada nilai arbitrer, misalnya 4,0?
Gambar 6. Memotong nilai fitur pada 4,0
Memotong nilai fitur pada 4,0 tidak berarti bahwa kita mengabaikan semua nilai yang lebih besar dari 4,0. Sebaliknya, hal ini berarti semua nilai yang lebih besar dari 4,0 sekarang menjadi 4,0. Ini menjelaskan bukit yang lucu pada nilai 4.0. Terlepas dari bukit tersebut, set fitur yang diskalakan sekarang lebih berguna daripada data asli.
Pengelompokan
Plot berikut menunjukkan prevalensi relatif rumah pada garis lintang yang berbeda di California. Perhatikan pengelompokannya—Los Angeles berada di sekitar garis lintang 34 dan San Francisco kira-kira pada garis lintang 38.
Gambar 7. Rumah per lintang.
Dalam set data, latitude
adalah nilai floating point. Namun, merepresentasikan latitude
sebagai fitur floating point dalam model kita sangatlah tidak masuk akal.
Hal ini dikarenakan tidak ada hubungan linier antara garis lintang dan nilai perumahan. Misalnya, rumah di lintang 35 tidak \(\frac{35}{34}\) lebih mahal (atau
lebih murah) daripada rumah di lintang 34. Namun, garis lintang individual mungkin merupakan prediktor yang cukup baik untuk nilai rumah.
Agar garis lintang menjadi prediktor yang berguna, bagi garis lintang menjadi beberapa "kelompok" seperti yang disarankan oleh gambar berikut:
Gambar 8. Pengelompokan nilai.
Alih-alih memiliki satu fitur floating point, sekarang kita memiliki 11 fitur boolean yang berbeda (LatitudeBin1
, LatitudeBin2
, ..., LatitudeBin11
).
Memiliki 11 fitur terpisah agak tidak elegan, jadi mari satukan
mereka menjadi satu vektor 11 elemen. Dengan melakukan hal tersebut, kita dapat merepresentasikan garis lintang 37,4 sebagai berikut:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
Berkat adanya pengelompokan, model kita sekarang dapat mempelajari bobot yang sangat berbeda untuk setiap garis lintang.
Scrub
Sampai sekarang, kita telah berasumsi bahwa semua data yang digunakan untuk pelatihan dan pengujian dapat dipercaya. Pada kenyataannya, banyak contoh dalam set data yang tidak dapat diandalkan karena satu atau beberapa hal berikut:
- Nilai yang dihilangkan. Misalnya, seseorang lupa memasukkan nilai untuk usia rumah.
- Contoh duplikat. Misalnya, server tidak sengaja mengupload log yang sama dua kali.
- Label yang buruk. Misalnya, seseorang salah melabeli gambar pohon ek sebagai maple.
- Nilai fitur yang buruk. Misalnya, seseorang mengetik digit tambahan, atau termometer tertinggal di bawah sinar matahari.
Setelah terdeteksi, Anda biasanya "memperbaiki" contoh yang buruk dengan menghapusnya dari set data. Untuk mendeteksi nilai yang dihilangkan atau contoh duplikat, Anda dapat menulis program sederhana. Mendeteksi nilai atau label fitur yang buruk bisa jauh lebih rumit.
Selain mendeteksi masing-masing contoh yang buruk, Anda juga harus mendeteksi data yang buruk dalam agregat. Histogram adalah mekanisme yang bagus untuk memvisualisasikan data Anda secara agregat. Selain itu, mendapatkan statistik seperti berikut dapat membantu:
- Maksimum dan minimum
- Rata-rata dan median
- Simpangan baku
Pertimbangkan untuk membuat daftar nilai yang paling umum untuk fitur diskret.
Misalnya, apakah jumlah contoh dengan country:uk
sesuai dengan jumlah yang Anda harapkan. Haruskah language:jp
benar-benar menjadi bahasa yang paling umum di
set data Anda?
Ketahui data Anda
Ikuti aturan berikut:
- Perhatikan seperti apa tampilan data yang Anda pikirkan.
- Pastikan data tersebut memenuhi ekspektasi tersebut (atau Anda dapat menjelaskan alasannya).
- Periksa kembali apakah data pelatihan sesuai dengan sumber lain (misalnya, dasbor).
Perlakukan data Anda dengan sebaik-baiknya seperti kode yang sangat penting. ML yang baik bergantung pada data yang baik.
Informasi Tambahan
Aturan Machine Learning, ML Tahap II: Rekayasa Fitur