Bagaimana saya bisa melakukan klasifikasi dengan data kategorikal yang tidak diperbaiki?

10

Saya memiliki masalah klasifikasi dengan data kategorikal dan numerik. Masalah yang saya hadapi adalah bahwa data kategorikal saya tidak diperbaiki, itu berarti bahwa kandidat baru yang labelnya ingin saya prediksi mungkin memiliki kategori baru yang tidak diamati sebelumnya.

Misalnya, jika data kategorikal saya adalah sex, satu-satunya label yang mungkin adalah female, maledan other, apa pun yang terjadi. Namun, variabel kategorikal saya adalah cityagar bisa terjadi bahwa orang yang saya coba prediksi memiliki kota baru yang belum pernah dilihat oleh pengklasifikasi saya.

Saya bertanya-tanya apakah ada cara untuk melakukan klasifikasi dalam istilah ini atau apakah saya harus melakukan pelatihan lagi mengingat data kategorikal baru ini.

Marisa
sumber
1
dapatkah Anda mengonversi cityke nomor berdasarkan beberapa fungsi? Seperti city' = f(latitude, longitude)itu, Anda dapat membuat nilai baru untuk kota mana pun
Mohammad Athar
@MohammadAthar di sini telah memberikan solusi yang sempurna, semoga OP melihatnya!
Francesco Pegoraro

Jawaban:

11

Itu pertanyaan yang sangat bagus; sebenarnya masalah ini telah ada untuk sementara waktu dan saya belum menemukan solusi yang tepat. Namun lebih dari senang untuk berbagi pengalaman saya:

  • Hindari satu-hot-encode sebanyak mungkin (bertentangan dengan apa yang disarankan di atas). Alasannya adalah itu tidak akan berhasil. Model dengan fitur one-hot-encode hanya berfungsi ketika semua sublevel tersebut telah ada dalam data pelatihan. Model tidak akan dapat melakukan prediksi, kecuali jika entah bagaimana itu secara manual di-tweak. Jika Anda mencari, Anda akan menemukan banyak orang berlari ke masalah ini ketika membagi data mereka ke kereta / tes, dan menghadapi masalah beberapa sublevel fitur tertentu tidak hadir dalam pelatihan split dan kemudian gagal melakukan prediksi pada tes. Di samping itu, jika Anda memiliki fitur kardinal yang sangat tinggi (mungkin seperti kota Anda dengan katakanlah 200 nama kota), ini akan meningkatkan dimensi data Anda secara tidak perlu! Jika karena alasan tertentu Anda perlu melakukan one-hot-encoding, ingatlah ini.
  • Gunakan Metode Pengkodean Lainnya . Mungkin mencoba mempelajari lebih lanjut tentang metode lain yang kuat untuk masalah ini, setidaknya untuk saat ini seperti pengkodean berbasis target, hashing (lihat beberapa referensi di bawah). Jika Anda dengan Python ada paket bagus menawarkan opsi pengkodean mant. Anda mungkin terkejut melihat bahwa metode sederhana lain sering bekerja dengan baik.

  • Latih kembali model Anda . Secara teoritis ketika mempelajari kereta Anda / set harus memiliki distribusi yang sama (sebagian besar ini dianggap sebagai distribusi target, tetapi bisa benar tentang variabel juga). Sekarang dengan item baru ikut bermain, distribusi data pengujian Anda (tidak terlihat) telah berubah. Maka yang terbaik adalah melatih model lagi sehingga kota-kota baru akan diperhitungkan.

  • Masukkan Subkategori Baru Ditambahkan (dan yang paling sering) ke Lainnya . Meskipun poin sebelumnya benar secara teoritis, sangat mungkin bahwa distribusi tes (dari kategori tertentu) tidak akan berubah secara drastis dalam sebagian besar kasus, misalnya sangat sedikit item yang berada di atas kategori dalam set pelatihan. Mungkin seperti dalam kasus Anda, Anda mungkin memiliki 100 kota di fitur kota, dan hanya beberapa kota baru yang datang seiring waktu. Apa yang akan saya pertimbangkan adalah melihat X-quantile dari kategori tertentu itu, dan memasukkan yang paling jarang ke dalam subkategori Lainnya . Dengan asumsi titik data yang baru Anda tambahkan hanya sedikit, itu akan sangat banyak masuk ke Yang Lainkelompok. Anda pasti akan kehilangan tingkat granularitas dengan melakukan yang satu ini, tetapi sekali lagi titik pembelajarannya adalah bahwa tidak hanya model Anda yang mempelajari data pelatihan, tetapi yang paling penting untuk dapat menggeneralisasikan dengan sangat baik pada data yang tidak terlihat dan jika kategori-kategori baru yang ditambahkan sangat poin data, pengelompokan semuanya ke dalam grup Lainnya tidak akan sakit.

  • Solusi Terbaru Belum Matang Lainnya seperti Cat2Vec (dipinjam dari Word2Vec dari NLP) atau Pengkodean Persamaan . Ini sangat baru, periksa kertas untuk yang pertama dan github dan contoh (berdasarkan Word2Vec) di Kaggle, dan makalah ini untuk yang terakhir dan implementasinya . Gagasan yang pertama adalah mengubah kategori menjadi vektor. Sebanyak yang saya katakan itu benar-benar masuk akal untuk bekerja, tetapi saya tidak punya pengalaman menggunakannya. Yang terakhir, yang disebut dirty_cat , terlihat cukup menjanjikan dan mudah digunakan. Apakah kuat untuk memiliki kategori kardinal yang tidak terlihat dalam data pengujian Anda tidak jelas bagi saya!

PS: Saya ingin menambahkan bahwa gagasan kota ke lokasi geografis yang diberikan dalam komentar pertama benar-benar bagus dan sebenarnya tidak rumit karena mereka banyak API Python misalnya oleh Google atau DI SINI yang memungkinkan Anda untuk melakukan itu. Tetapi perlu dicatat bahwa ini hanyalah cara untuk merekayasa fitur baru dan tentu saja tidak untuk digantikan oleh fitur kota itu sendiri.

Referensi menarik untuk memeriksa pertama , kedua , ketiga , keempat (tanpa urutan tertentu!)

Semua poin yang disebutkan di atas adalah solusi praktis yang secara teoretis benar secara konkret, dan pasti akan dibahas lebih lanjut. Dan saya lebih dari senang untuk belajar lebih banyak.

TwinPenguins
sumber
1
Bagaimana dengan membuat pengelompokan kota serupa? Seperti bahkan jika kita memiliki kota baru, itu tidak berbeda dari apa yang sudah kita miliki, kita dapat mengecek kembali dengan kota terdekat yang cocok?
Aditya
Kesenangan Aditya. Itu juga ide bagus lainnya. Saya tidak tahu tentang "Penyamaan Kemiripan" yang baru, mungkin mereka melakukan hal yang persis sama. Lihat tutorial mereka. Juga perlu dicatat bahwa kita harus berhati-hati terhadap pengelompokan apa yang digunakan untuk data kategorikal seperti k-mode, setelah semua jaraknya tidak memiliki makna yang sama dengan nilai numerik.
TwinPenguins
Terima kasih atas jawaban Anda. Bagaimana saya bisa melakukan latihan ulang? Maksud saya, bayangkan saya memiliki kandidat baru dan saya ingin memprediksi apakah dia baik atau buruk, bagaimana saya bisa melatih ulang model saya jika saya tidak memiliki label aslinya yang menunjukkan apakah itu baik atau tidak? Saya tidak melihat cara memasukkan data baru ini untuk melakukan pelatihan ulang dan saya akan kehilangan titik prediksi. Apakah aku salah?
Marisa
Sama sama. Tentang pelatihan ulang: secara harfiah berarti memulai dari awal, mencampur semua data Anda untuk memastikan Anda memiliki data baru dan mulai belajar lagi. Poin lain yang Anda sebutkan adalah Anda tidak memiliki label sebenarnya untuk titik data baru tertentu: ini adalah cerita yang sangat berbeda untuk dirinya sendiri. Apa yang bisa Anda lakukan untuk memberi label titik data ini adalah mencari titik data yang paling mirip dan mengambil label dari sana seperti algoritma KNN yang sangat sederhana.
TwinPenguins
4

Hal paling sederhana untuk dilakukan (yang biasanya merupakan tempat yang baik untuk memulai) adalah hanya menyandi kota-kota Anda di mana setiap kota menjadi fitur tunggal dan memiliki nilai 1 (orang tersebut dari kota itu) atau 0 (bukan dari kota itu). Jika kota baru muncul di set tes yang tidak ada di set pelatihan, orang itu hanya akan memiliki 0 untuk semua kota di set pelatihan. Ini mungkin tampak aneh tetapi, jika kota itu tidak ada dalam set pelatihan, maka seharusnya tidak ada beban yang ditempatkan seseorang dari kota itu.

Langkah selanjutnya akan menjadi sesuatu di sepanjang garis yang disarankan Mohammad Athar dan mendapatkan beberapa gagasan kedekatan geografis dengan kota-kota lain dalam set pelatihan Anda. Itu akan menjadi jauh lebih rumit sehingga saya akan membiarkan orang lain mengomentarinya.

DJBunk
sumber
Mulai yang sederhana dan berkembang dari sana adalah saran yang bagus!
Escachator
0

Anda harus checkout Vowpal Wabbit , yang menangani fitur-fitur baru yang sangat baik menggunakan trik hashing dan tingkat pembelajaran adaptif.

Tidak hanya itu tidak crash ketika fitur baru muncul (di kereta atau waktu tes), itu juga akan mulai memperbarui bobotnya di atasnya. Di atas semua itu jahat cepat. Ini hanya mengimplementasikan varian model linear, jadi Anda dibatasi di sisi itu. Alat yang sangat kuat untuk diketahui

slymore
sumber