Đó là một câu hỏi rất hay; thực tế vấn đề này đã xuất hiện được một thời gian và tôi vẫn chưa tìm được giải pháp hoàn hảo. Nhưng hạnh phúc hơn khi chia sẻ kinh nghiệm của tôi:
- Tránh mã hóa một nóng càng nhiều càng tốt (trái với những gì được đề xuất ở trên). Lý do là nó sẽ không hoạt động. Một mô hình với các tính năng mã hóa một nóng chỉ hoạt động khi tất cả các cấp dưới đó đã tồn tại trong dữ liệu đào tạo. Mô hình sẽ không thể thực hiện dự đoán, trừ khi bằng cách nào đó nó được điều chỉnh thủ công. Nếu bạn tìm kiếm, bạn sẽ thấy nhiều người gặp phải vấn đề này khi chia dữ liệu của họ thành đào tạo / kiểm tra và phải đối mặt với vấn đề một số cấp dưới của một tính năng cụ thể không có trong phần phân tách đào tạo và sau đó không thể dự đoán trong bài kiểm tra. Nói sang một bên, nếu bạn có các tính năng chính rất cao (có thể giống như thành phố của bạn với giả sử 200 tên thành phố), điều này sẽ làm tăng tính chiều của dữ liệu của bạn một cách không cần thiết! Nếu vì một số lý do bạn có thể cần thực hiện mã hóa một lần nóng, chỉ cần ghi nhớ những điều này.
Sử dụng các phương pháp mã hóa khác . Có thể thử tìm hiểu thêm về các phương pháp khác mạnh mẽ cho vấn đề này, ít nhất là trong thời gian này giống như mã hóa dựa trên mục tiêu, băm (xem một số tài liệu tham khảo bên dưới). Nếu bạn ở với Python, có một gói tốt cung cấp các tùy chọn mã hóa mant. Bạn có thể ngạc nhiên khi thấy rằng các phương pháp đơn giản khác thường hoạt động tốt.
Đào tạo lại mô hình của bạn . Về mặt lý thuyết khi học tập / bộ của bạn nên có cùng một phân phối (chủ yếu điều này được coi là phân phối mục tiêu, nhưng cũng có thể đúng về các biến). Bây giờ với các mục mới đi vào hoạt động, phân phối dữ liệu thử nghiệm (chưa thấy) của bạn đã thay đổi. Sau đó, tốt nhất là đào tạo lại mô hình một lần nữa để những thành phố mới đó sẽ được tính đến.
Đặt các danh mục con mới được thêm vào (và những loại ít gặp nhất) cho người khác . Mặc dù điểm trước đó là đúng về mặt lý thuyết, rất có khả năng phân phối thử nghiệm (thuộc loại cụ thể đó) sẽ không thay đổi mạnh mẽ trong hầu hết các trường hợp, ví dụ như rất ít mặt hàng đứng đầu các danh mục trong tập huấn luyện. Có lẽ giống như trong trường hợp của bạn, bạn có thể có 100 thành phố trong tính năng của thành phố và chỉ có rất ít thành phố mới xuất hiện theo thời gian. Những gì tôi sẽ xem xét sẽ xem xét hãy để X-quantile của danh mục cụ thể đó và đưa những thứ ít thường xuyên nhất vào danh mục con khác . Giả sử điểm dữ liệu mới được thêm của bạn chỉ là ít, nó sẽ đi sâu vào các điểm khácnhóm. Bạn chắc chắn sẽ mất một mức độ chi tiết khi thực hiện điều này, nhưng một lần nữa quan điểm học tập là không chỉ mô hình của bạn học dữ liệu đào tạo, mà quan trọng nhất là có thể khái quát rất tốt về dữ liệu chưa xem và nếu các danh mục mới được thêm vào đó là những điểm rất dữ liệu, việc nhóm chúng hoàn toàn vào nhóm Những người khác sẽ không bị tổn thương.
Các giải pháp chưa trưởng thành gần đây khác như Cat2Vec (mượn từ Word2Vec từ NLP) hoặc Mã hóa Tương tự . Đây là những điều rất gần đây, hãy kiểm tra bài viết trước và github của nó và một ví dụ (dựa trên Word2Vec) trong Kaggle, và bài viết này để biết sau này và cách thực hiện . Ý tưởng trước đây là chuyển đổi các loại thành vectơ. Nhiều như tôi phải nói nó thực sự có ý nghĩa để làm việc, nhưng tôi không có kinh nghiệm sử dụng nó. Loại thứ hai, được gọi là Dirt_cat , trông khá hứa hẹn và dễ sử dụng. Cho dù nó là mạnh mẽ để có thể loại hồng y vô hình trong dữ liệu thử nghiệm của tôi không rõ ràng đối với tôi!
Tái bút: Tôi muốn thêm rằng ý tưởng về thành phố đến một vị trí địa lý được đưa ra trong bình luận đầu tiên thực sự rất hay và thực sự không phức tạp vì chúng có nhiều API Python, ví dụ như Google hoặc TẠI ĐÂY cho phép bạn làm điều đó. Nhưng cần lưu ý rằng đây chỉ là một cách để thiết kế các tính năng mới và chắc chắn không bị thay thế bởi chính tính năng thành phố.
Tài liệu tham khảo thú vị để kiểm tra thứ nhất , thứ hai , thứ ba , thứ tư (không có thứ tự cụ thể!)
Tất cả các điểm nêu trên là các giải pháp thực tế khá chính xác về mặt lý thuyết và chắc chắn sẽ được thảo luận thêm. Và tôi hạnh phúc hơn khi tìm hiểu thêm.
city
thành một số dựa trên một số chức năng? Giống nhưcity' = f(latitude, longitude)
vậy, bạn có thể tạo một giá trị mới cho bất kỳ thành phố nào