Làm cách nào để phân loại với dữ liệu phân loại không cố định?


10

Tôi có một vấn đề phân loại với cả dữ liệu phân loại và số. Vấn đề tôi gặp phải là dữ liệu phân loại của tôi không cố định, điều đó có nghĩa là ứng cử viên mới có nhãn mà tôi muốn dự đoán có thể có một danh mục mới không được quan sát trước.

Ví dụ: nếu dữ liệu phân loại của tôi là sex, các nhãn duy nhất có thể sẽ là female, maleother, không có vấn đề gì. Tuy nhiên, biến phân loại của tôi là citynhư vậy có thể xảy ra rằng người mà tôi đang cố gắng dự đoán có một thành phố mới mà phân loại của tôi chưa bao giờ nhìn thấy.

Tôi tự hỏi liệu có cách nào để thực hiện phân loại theo các thuật ngữ này hay tôi nên thực hiện việc đào tạo lại khi xem xét dữ liệu phân loại mới này.


1
bạn có thể chuyển đổi citythà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
Mohammad Athar

@MohammadAthar ở đây đã đưa ra giải pháp hoàn hảo, hy vọng rằng OP nhìn thấy nó!
Francesco Pegoraro

Câu trả lời:


11

Đó 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.


1
Điều gì về việc tạo cụm của các thành phố tương tự? Giống như ngay cả khi chúng ta có một thành phố mới, nó không khác gì tất cả những gì chúng ta đã có, chúng ta có thể kiểm tra chéo với thành phố phù hợp gần nhất không?
Aditya

Niềm vui Aditya. Đó cũng là một ý tưởng tuyệt vời khác. Tôi không biết về "Mã hóa Tương tự" mới, có thể là trường hợp họ đang làm chính xác điều tương tự. Kiểm tra hướng dẫn của họ. Ngoài ra, một lưu ý phụ là người ta phải cẩn thận sử dụng phân cụm nào cho dữ liệu phân loại như chế độ k, sau khi tất cả các khoảng cách của chúng không có ý nghĩa tương tự như các giá trị số.
TwinPenguins

Cảm ơn bạn đã trả lời tuyệt vời của bạn. Làm thế nào tôi có thể làm lại Ý tôi là, hãy tưởng tượng tôi có một ứng cử viên mới và tôi muốn dự đoán anh ấy / cô ấy tốt hay xấu, làm thế nào tôi có thể giữ lại mô hình của mình nếu tôi không có nhãn hiệu thực sự của anh ấy / cô ấy cho biết liệu nó có tốt hay không? Tôi không thấy cách đưa dữ liệu mới này vào việc đào tạo lại và tôi sẽ thiếu điểm dự đoán. Tôi có lầm không?
Marisa

Không có gì. Về đào tạo lại: nghĩa đen là bắt đầu lại, trộn tất cả dữ liệu của bạn để đảm bảo bạn có dữ liệu mới và bắt đầu học lại. Điểm khác mà bạn đề cập rằng bạn không có nhãn thực sự cho điểm dữ liệu mới cụ thể đó: đây là câu chuyện rất khác biệt. Những gì bạn có thể làm để gắn nhãn điểm dữ liệu này là tìm kiếm dữ liệu tương tự nhất và lấy nhãn từ đó giống như thuật toán KNN rất đơn giản.
TwinPenguins

4

Điều đơn giản nhất để làm (thường là một nơi tốt để bắt đầu) chỉ là một - mã hóa nóng các thành phố của bạn nơi mỗi thành phố trở thành một tính năng duy nhất và có các giá trị là 1 (người đến từ thành phố đó) hoặc 0 (không phải từ thành phố đó). Nếu một thành phố mới xuất hiện trong tập kiểm tra không có trong tập huấn luyện thì người đó sẽ chỉ có 0 cho tất cả các thành phố trong tập huấn luyện. Điều này có vẻ kỳ lạ nhưng, nếu thành phố đó không nằm trong tập huấn luyện, thì sẽ không có trọng lượng nào đặt một người đến từ thành phố đó.

Bước tiếp theo sẽ là một cái gì đó dọc theo những gì Mohammad Athar đề xuất và có được một số ý tưởng về sự gần gũi về địa lý với các thành phố khác trong tập huấn luyện của bạn. Điều đó sẽ phức tạp hơn nhiều vì vậy tôi sẽ để người khác bình luận về nó.


Bắt đầu đơn giản và phát triển từ đó là một lời khuyên tuyệt vời!
Người đi bộ

0

Bạn nên kiểm tra Vowpal Wợi , xử lý các tính năng mới rất độc đáo bằng cách sử dụng thủ thuật băm và tỷ lệ học thích ứng.

Nó không chỉ không bị sập khi các tính năng mới xuất hiện (lúc tàu hoặc thời gian thử nghiệm), nó cũng sẽ bắt đầu cập nhật trọng lượng của nó trên nó. Trên đó là xấu xa nhanh chóng. Nó chỉ thực hiện các biến thể của mô hình tuyến tính, do đó bạn bị hạn chế ở bên đó. Một công cụ rất mạnh để biết về

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.