Phân phối tập kiểm tra và tập huấn khác nhau


13

Tôi đang làm việc trong một cuộc thi khoa học dữ liệu mà việc phân phối tập kiểm tra của tôi khác với tập huấn luyện. Tôi muốn lấy mẫu quan sát từ tập huấn luyện gần giống với tập kiểm tra.

Tôi có thể làm cái này như thế nào?


Lấy mẫu ngẫu nhiên, Lấy mẫu quá mức ngẫu nhiên, Lấy mẫu dựa trên cụm, Lấy mẫu qua thông tin: Kỹ thuật lấy mẫu quá mức tổng hợp, Kỹ thuật lấy mẫu tổng hợp thiểu số đã sửa đổi (MSMOTE), v.v.
Aditya

Bạn nên đánh dấu một trong những câu trả lời là "Câu trả lời được chấp nhận" nếu bạn hài lòng với bất kỳ câu trả lời nào.
TwinPenguins

Câu trả lời:


15

Câu hỏi tuyệt vời, đây là những gì được biết đến trong mô hình Machine Learning là "Chuyển dịch đồng biến" hoặc "Mô hình trôi dạt" hoặc "Không cố định", v.v.

Một trong những giả định quan trọng mà người ta sẽ đưa ra để xây dựng một mô hình học máy cho dự đoán trong tương lai là dữ liệu chưa xem (kiểm tra) đến từ phân phối giống như dữ liệu đào tạo! Tuy nhiên, trong thực tế, giả định khá đơn giản này dễ dàng phá vỡ và dữ liệu sắp tới (phân phối của nó) thay đổi theo thời gian vì nhiều lý do. Đối với những người có thể không quen thuộc với vấn đề rất quan trọng này, tôi khuyến khích tìm kiếm ở đây hoặc đăng bài !

Đối với tôi, câu hỏi của bạn rơi vào cùng một loại. Mặc dù tôi không có giải pháp hoàn hảo (triển khai để cung cấp), nhưng tôi nghĩ bạn có thể xem:

  • Bài đăng trên blog này cung cấp cho bạn một cách đơn giản để xử lý việc lấy mẫu dữ liệu đào tạo với mã được cung cấp trong Python!
  • Kiểm tra tài liệu nghiên cứu này . Họ đề xuất giải quyết vấn đề bằng cách xem lại dữ liệu huấn luyện để phân phối đào tạo gần với phân phối kiểm tra hơn bằng cách sử dụng cơ sở Quy trình ước tính quan trọng của Kullback-Leibler dựa trên định lý " phân kỳ Kullback-Leibler ". Tôi không biết liệu họ có cung cấp một triển khai hay nó có thể được thực hiện dễ dàng hay không, nhưng tôi nghĩ rằng nó có thể đáng để đào bới vì nó có vẻ là một cách chuyên nghiệp để giải quyết sự không phù hợp phân phối.

Cập nhật NHANH (một giải pháp tốt) : Tôi đã tìm thấy một triển khai Python của thuật toán KLIEP của bài nghiên cứu đó (điểm cuối cùng) để tìm các trọng số đó. Nó có vẻ dễ sử dụng! Về cơ bản, nó tương thích với việc đào tạo bằng cách đặt các trọng số (thông qua thuật toán KLIEP) để giả định có sự phân phối tương tự của tàu và kiểm tra là đúng nhất có thể.


5

Tôi muốn lấy mẫu quan sát từ tập huấn luyện gần giống với tập kiểm tra.

Tôi không chắc chắn bạn muốn làm điều đó. Toàn bộ mục đích là để đào tạo thuật toán của bạn để nó khái quát tốt cho việc không nhìn thấy dữ liệu.

Thông thường, người ta nên điều chỉnh dữ liệu thử nghiệm của mình với dữ liệu đào tạo của mình (ví dụ: chuẩn hóa dữ liệu thử nghiệm theo dữ liệu đào tạo ) chứ không phải theo cách khác. Trong thực tế, bạn không biết dữ liệu thử nghiệm của mình.


3

Tập hợp mẫu con có thể không phải là giải pháp tốt nhất!

Sự khác biệt giữa tập kiểm tra / thực thi và phân phối / tính năng tập huấn luyện là rất phổ biến trong các nhiệm vụ học tập có giám sát (đây là một trong những lý do mà các cuộc thi như Kaggle là thách thức). Đó là lý do tại sao chúng tôi nói hiệu suất trong quá khứ có thể (chỉ) được sử dụng làm hướng dẫn để ước tính hiệu suất trong tương lai nhưng nó không chỉ ra / đảm bảo nó . Do đó, các mô hình có thể khái quát hóa luôn được ưu tiên hơn các mô hình tinh chỉnh có thể hoạt động rất tốt trên tập (tàu) được thiết lập nhưng hoạt động kém trên dữ liệu không nhìn thấy.

Mặc dù sự khác biệt như vậy là bình thường, khoảng cách quá lớn giữa mẫu quá khứ và tương lai có thể được gọi là ví dụ về sự trôi dạt khái niệm vốn là một lĩnh vực nghiên cứu tích cực. Với câu hỏi của bạn, tôi không thể đánh giá rằng trường hợp của bạn là trường hợp ML bình thường hoặc sự trôi dạt khái niệm đang thực sự xảy ra.

Đây là những gợi ý của tôi:

  1. Đào tạo một số mô hình với khả năng khái quát hóa cao. Sử dụng bootstrap lấy mẫu từ tập dữ liệu đào tạo của bạn, bạn có thể dễ dàng tính toán sai lệchsai thành phần lỗi. Hãy nhớ lại rằng bạn đang tìm kiếm một mô hình phương sai thấp (trong đó những thay đổi trong dữ liệu sẽ có ảnh hưởng cận biên đến hiệu suất của nó) thay vì các mô hình sai lệch thấp nhưng có độ sai lệch cao (có thể phù hợp với tập huấn luyện (phụ) của bạn). Bây giờ, bạn có thể chọn các thuật toán tốt nhất và đánh giá chúng dựa trên bộ thử nghiệm. Lưu ý rằng trong thời gian đào tạo, chúng tôi không nên nhìn vào bộ thử nghiệm!

  2. Thay vì một số đường xuống ngẫu nhiên, hãy tìm tiêu chuẩn hóa / chuẩn hóa và lựa chọn tính năng / kỹ thuật. Những kỹ thuật này có thể là thực tế trong việc học các mô hình tổng quát hơn. Ví dụ: đôi khi phạm vi của miền tính năng có thể thay đổi theo thời gian trong khi hình dạng phân phối (dù đó là gì) vẫn gần như giống nhau (ví dụ: cùng một phân phối được dịch chuyển sang trái hoặc phải). Trong trường hợp như vậy, một tiêu chuẩn hóa đơn giản (tức là ánh xạ các mẫu tàu và thử nghiệm vào một không gian được xác định trước như [0,1] bằng các hàm ánh xạ khác nhau) có thể làm giảm các triệu chứng.

  3. Có hệ thống downsampling chỉ có thể là một giải pháp thích hợp nếu bạn làm điều đó dựa trên một số kiến thức về vấn đề này (không chỉ nhằm mục đích nhận được một độ chính xác tốt hơn trên các tập dữ liệu thử nghiệm). Ví dụ, bạn có thể biết rằng một số bản ghi trong dữ liệu xe lửa đã được lấy mẫu từ lâu, từ trường xa hoặc bị ảnh hưởng bởi các yếu tố cụ thể mà không ai trong số chúng sẽ xảy ra trong tương lai (trong thu thập dữ liệu thử nghiệm). Trong trường hợp như vậy, bạn có thể loại bỏ những mẫu có thể không liên quan vì bạn tự tin rằng bạn sẽ không thấy các mẫu như vậy trong tương lai (ý tôi là bạn nên có một lý do đằng sau việc lựa chọn tập con đào tạo thay vì nhìn vào bộ kiểm tra trong thực tế, bạn không có quyền truy cập vào nó). Trong trường hợp như vậy, tôi gọi nó là loại bỏ ngoại lệ thay vì downsampling.


1
p(y|x)

-1

Có một gói tốt trong python (scikit learn)

http://scikit-learn.org/urdy/modules/generated/sklearn.model_selection.train_test_split.html

Bạn có thể lấy mẫu quan sát của bạn từ tập huấn luyện bằng gói này.


1
Theo như tôi hiểu câu hỏi, các bản phân phối thử nghiệm / đào tạo là khác nhau mà nếu không tính đến sẽ dẫn đến cái được biết là "Covariate Shift". Mẫu phụ đơn giản sử dụng triển khai "train_test_split" trong scikit learn được đề cập ở đây sẽ không tính đến các bản phân phối trong quá trình phân chia! Do đó, câu trả lời là không liên quan.
TwinPenguins
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.