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
, male
dan other
, apa pun yang terjadi. Namun, variabel kategorikal saya adalah city
agar 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.
city
ke nomor berdasarkan beberapa fungsi? Seperticity' = f(latitude, longitude)
itu, Anda dapat membuat nilai baru untuk kota mana punJawaban:
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:
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.
sumber
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.
sumber
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
sumber