Representasi: Pembersihan Data

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.

Plot roomPerPerson di mana hampir semua nilai dikelompokkan antara 0 dan 4, tetapi ada ekor panjang yang sangat panjang yang mencapai 55 kamar per orang

Gambar 4. Ekor yang sangat lincah.

Bagaimana kita bisa meminimalkan pengaruh pencilan yang ekstrem tersebut? Salah satu caranya adalah dengan mengambil log setiap nilai:

Plot log(roomsPerPerson) di mana 99% nilai cluster antara sekitar 0,4 dan 1,8, tetapi masih ada ekor longish yang mencapai 4,2 atau lebih.

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?

Plot RoomsPerPerson yang mana semua nilai berada di antara -0,3 dan 4,0. Plot tersebut berbentuk lonceng, tetapi ada bukit yang tidak wajar pada 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.

Plot rumah per garis lintang. Plot ini sangat tidak teratur, berisi penurunan di sekitar garis lintang 36 dan lonjakan besar di sekitar garis lintang 34 dan 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:

Plot rumah per garis lintang. Plot dibagi menjadi

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