Làm thế nào để bạn sử dụng bộ dữ liệu 'kiểm tra' sau khi xác thực chéo?


25

Trong một số bài giảnghướng dẫn tôi đã thấy, họ đề nghị chia dữ liệu của bạn thành ba phần: đào tạo, xác nhận và kiểm tra. Nhưng không rõ làm thế nào để sử dụng tập dữ liệu thử nghiệm, cũng như cách tiếp cận này tốt hơn so với xác thực chéo trên toàn bộ tập dữ liệu.

Giả sử chúng tôi đã lưu 20% dữ liệu của mình dưới dạng thử nghiệm. Sau đó, chúng tôi lấy phần còn lại, chia nó thành k nếp gấp và bằng cách sử dụng xác thực chéo, chúng tôi tìm thấy mô hình đưa ra dự đoán tốt nhất về dữ liệu chưa biết từ bộ dữ liệu này. Giả sử mô hình tốt nhất mà chúng tôi đã tìm thấy mang lại cho chúng tôi độ chính xác 75% .

Nhiều hướng dẫn và rất nhiều câu hỏi trên các trang web Hỏi & Đáp khác nhau nói rằng bây giờ chúng tôi có thể xác minh mô hình của mình trên bộ dữ liệu đã được lưu (kiểm tra). Nhưng tôi vẫn không thể hiểu chính xác nó được thực hiện như thế nào, cũng không phải là điểm của nó.

Giả sử chúng tôi có độ chính xác 70% trên tập dữ liệu thử nghiệm. Vậy chúng ta phải làm gì tiếp theo? Chúng ta có thử một mô hình khác, và sau đó là một mô hình khác, cho đến khi chúng ta sẽ đạt được điểm cao trong bộ dữ liệu thử nghiệm của mình không? Nhưng trong trường hợp này, có vẻ như chúng ta sẽ tìm thấy mô hình phù hợp với bộ thử nghiệm giới hạn (chỉ 20%) của chúng ta . Điều đó không có nghĩa là chúng ta sẽ tìm thấy mô hình tốt nhất nói chung.

Hơn nữa, làm thế nào chúng ta có thể coi điểm này là một đánh giá chung của mô hình, nếu nó chỉ được tính trên một tập dữ liệu hạn chế? Nếu điểm này thấp, có thể chúng tôi đã không may mắn và chọn dữ liệu kiểm tra "xấu".

Mặt khác, nếu chúng ta sử dụng tất cả dữ liệu chúng ta có và sau đó chọn mô hình sử dụng xác thực chéo k-Fold, chúng ta sẽ tìm thấy mô hình đưa ra dự đoán tốt nhất về dữ liệu chưa biết từ toàn bộ tập dữ liệu chúng ta có.


1
Bạn đánh giá mô hình tốt nhất của bạn trên bộ kiểm tra đó và báo cáo hiệu suất trên nó. Đó là ước tính tốt nhất của bạn về hiệu suất của mô hình của bạn. Tôi đề nghị bạn nên đọc hai chương đầu tiên của cuốn sách xuất sắc "Học từ dữ liệu" của Yaser Abu-Mostafa. Rất cô đọng và rất dễ tiếp cận. work.caltech.edu/telecference.html
Vladislavs Dovgalecs

1
Cảm ơn về cuốn sách bạn đã đề xuất! Nhưng liên quan đến câu trả lời của bạn cho câu hỏi - bạn nói đó là "ước tính tốt nhất về hiệu suất của mô hình của bạn", nhưng thực ra đó là ước tính về hiệu suất của một mô hình trong một thử nghiệm nhỏ (20%) , nó không có nghĩa là mô hình hiệu suất nói chung.
Serhiy

2
Trên thực tế, đó là ước tính tốt nhất của bạn về hiệu suất của mô hình nói chung. Mô hình của bạn có thể bị sai lệch và / hoặc bị sai lệch cao, nhưng hiệu suất của mô hình trên bộ thử nghiệm của bạn là chỉ số tốt nhất về cách thức hoạt động của nó trên bất kỳ dữ liệu không nhìn thấy nào.
Vladislavs Dovgalecs

Cảm ơn xeon! Điều duy nhất vẫn chưa rõ ràng với tôi, là chúng ta sẽ làm gì sau khi đánh giá mô hình bằng cách sử dụng bộ dữ liệu thử nghiệm ?
Serhiy

Bạn có thể gửi mô hình nếu bạn hài lòng với kết quả hoặc tìm các tính năng / thuật toán tốt hơn / nhiều dữ liệu hơn để cải thiện mô hình.
Vladislavs Dovgalecs

Câu trả lời:


20

Điều này tương tự với một câu hỏi khác mà tôi đã trả lời liên quan đến xác thực chéo và các bộ kiểm tra . Khái niệm chính để hiểu ở đây là bộ dữ liệu độc lập . Hãy xem xét chỉ hai kịch bản:

  1. Nếu bạn có nhiều tài nguyên, bạn sẽ lý tưởng thu thập một tập dữ liệu và huấn luyện mô hình của mình thông qua xác thực chéo. Sau đó, bạn sẽ thu thập một bộ dữ liệu hoàn toàn độc lập kháckiểm tra mô hình của bạn. Tuy nhiên, như tôi đã nói trước đây, điều này thường là không thể đối với nhiều nhà nghiên cứu.

Bây giờ, nếu tôi là một nhà nghiên cứu không may mắn thì tôi phải làm gì? Chà, bạn có thể thử bắt chước kịch bản chính xác đó:

  1. Trước khi bạn thực hiện bất kỳ khóa đào tạo mô hình nào, bạn sẽ tách một phần dữ liệu của mình và để nó sang một bên ( không bao giờ bị chạm trong khi xác thực chéo ). Điều này là để mô phỏng bộ dữ liệu độc lập rất giống nhau được đề cập trong kịch bản lý tưởng ở trên. Mặc dù xuất phát từ cùng một tập dữ liệu, đào tạo mô hình sẽ không lấy bất kỳ thông tin nào từ các mẫu đó (trong đó với việc xác thực chéo tất cả dữ liệu được sử dụng). Khi bạn đã đào tạo mô hình của mình, sau đó bạn sẽ áp dụng nó cho bộ thử nghiệm của mình , một lần nữa chưa từng thấy trong quá trình đào tạo và nhận được kết quả của bạn. Điều này được thực hiện để đảm bảo mô hình của bạn có tính khái quát cao hơn và chưa học được dữ liệu của bạn .

Để giải quyết các mối quan tâm khác của bạn:

Giả sử chúng ta có độ chính xác 70% trên tập dữ liệu thử nghiệm, vậy chúng ta sẽ làm gì tiếp theo? Chúng ta có thử một mô hình khác, và sau đó là một mô hình khác, cho đến khi chúng ta sẽ đạt được điểm cao trên tập dữ liệu thử nghiệm của mình không?

Sắp xếp, ý tưởng là bạn đang tạo ra mô hình tốt nhất bạn có thể từ dữ liệu của mình và sau đó đánh giá nó trên một số dữ liệu khác mà nó chưa từng thấy trước đây. Bạn có thể đánh giá lại sơ đồ xác thực chéo của mình nhưng khi bạn có một mô hình được điều chỉnh (tức là các tham số siêu tốc), bạn sẽ tiến lên phía trước với mô hình đó bởi vì đó là cách tốt nhất bạn có thể thực hiện. Điều quan trọng là KHÔNG BAO GIỜ SỬ DỤNG DỮ LIỆU KIỂM TRA CỦA BẠN ĐỂ KIẾM . Kết quả của bạn từ dữ liệu thử nghiệm là hiệu suất của mô hình của bạn trên dữ liệu 'chung'. Sao chép quá trình này sẽ loại bỏ tính độc lập của các bộ dữ liệu (đó là toàn bộ điểm). Đây cũng là địa chỉ trong một câu hỏi khác về dữ liệu kiểm tra / xác nhận .

Ngoài ra, làm thế nào chúng ta có thể coi điểm số này là đánh giá chung của mô hình, nếu nó được tính trên một tập dữ liệu hạn chế? Nếu điểm này thấp, có lẽ chúng tôi đã không may mắn khi chọn dữ liệu kiểm tra "xấu".

Điều này là không thể nếu bạn đã phân chia dữ liệu của bạn một cách chính xác. Bạn nên phân chia dữ liệu của mình một cách ngẫu nhiên (mặc dù có khả năng phân tầng để cân bằng lớp). Nếu tập dữ liệu của bạn đủ lớn để bạn chia dữ liệu thành ba phần, tập hợp kiểm tra của bạn phải đủ lớn để cơ hội rất thấp mà bạn vừa chọn dữ liệu xấu. Có nhiều khả năng là mô hình của bạn đã được phù hợp.


3
Cảm ơn bạn đã giải thích chi tiết như vậy! Điều duy nhất vẫn chưa rõ ràng với tôi, là chúng ta sẽ làm gì sau khi đánh giá mô hình bằng cách sử dụng bộ dữ liệu thử nghiệm ? Nếu kết quả thực sự thấp thì sao? Chúng ta có thử một mô hình khác không?
Serhiy

Như tôi đã nói ở trên, bạn có thể đánh giá lại xác thực chéo của mình và xem liệu phương pháp của bạn có thể được cải thiện miễn là bạn không sử dụng dữ liệu 'kiểm tra' của mình để đào tạo mô hình. Nếu kết quả của bạn thấp, bạn có khả năng phù hợp với mô hình của bạn. Tập dữ liệu của bạn có thể chỉ có rất nhiều sức mạnh dự đoán.
cdeterman

Không phải xác thực chéo đơn giản là liên tục phân chia thành tập huấn luyện và kiểm tra (ví dụ: tập kiểm tra là 20% đầu tiên sau đó là 20% thứ hai và sau đó, hoặc tất cả chọn ngẫu nhiên 20% cho lần kiểm tra n và tính chính xác trung bình) và làm chính xác điều tương tự, mà bạn mô tả làm với bộ kiểm tra? Không hiển thị nó cho thuật toán ở tất cả cho đến khi thử nghiệm?
Zelphir Kaltstahl

2
@Zelphir không, mỗi lần được đánh giá nhiều lần với mỗi kết hợp siêu tham số. Chỉ cần chọn kết quả tốt nhất có khả năng báo cáo kết quả cao hơn trên bộ thử nghiệm 'độc lập'. Ý tưởng là để xem các tham số nào khái quát hóa qua các nếp gấp này và sử dụng kiến ​​trúc đó trên một tập kiểm tra mà nó chưa từng thấy để xác định mức độ "khái quát hóa" của mô hình.
cdeterman

1
Tôi muốn thêm rằng thực sự hành động xem hiệu suất trên bộ kiểm tra độc lập của bạn và quyết định quay lại và đào tạo lại mô hình của bạn làm cho bộ kiểm tra của bạn không còn hoàn toàn độc lập . Trong thực tế, bạn có thể làm điều này vô cùng nhiều lần cho đến khi bạn có được độ chính xác hoàn hảo. Liên quan đến tài liệu tham khảo học thuật, tôi giới thiệu cuốn sách "Học từ dữ liệu", cũng có khóa học trực tuyến miễn phí của tác giả ( work.caltech.edu/telecference.html ).
Michael

4

Nếu tất cả những gì bạn sẽ làm là đào tạo một mô hình với các cài đặt mặc định trên tập dữ liệu thô hoặc được xử lý trước tối thiểu (ví dụ: mã hóa một lần nóng và / hoặc loại bỏ NA), bạn không cần phải có một bộ kiểm tra riêng, bạn chỉ cần tập luyện trên đào tạo tập hợp và kiểm tra trên bộ xác nhận của bạn, hoặc thậm chí tốt hơn, đào tạo trên toàn bộ tập hợp bằng cách sử dụng xác thực chéo để ước tính hiệu suất của bạn.

Tuy nhiên, ngay khi kiến ​​thức về dữ liệu của bạn khiến bạn thực hiện bất kỳ thay đổi nào từ chiến lược ban đầu của mình, bạn đã "làm mờ" kết quả của mình. Một số ví dụ bao gồm:

  • Lựa chọn mô hình: Bạn đã thử nghiệm logistic, lasso, rừng ngẫu nhiên, XGBoost và các máy vectơ hỗ trợ và chọn mô hình tốt nhất

  • Điều chỉnh tham số: Bạn đã điều chỉnh XGBoost để tìm siêu âm tối ưu

  • Lựa chọn tính năng: Bạn đã sử dụng lựa chọn ngược, thuật toán di truyền, boruta, v.v. để chọn một tập hợp con các tính năng tối ưu để đưa vào mô hình của bạn

  • Thiếu thông tin: Bạn bỏ qua các biến bị thiếu với giá trị trung bình hoặc với một mô hình đơn giản dựa trên các biến khác

  • Chuyển đổi tính năng: Bạn đã căn giữa và chia tỷ lệ các biến số của mình để thay thế chúng bằng điểm z (số độ lệch chuẩn so với giá trị trung bình)

Trong tất cả các trường hợp trên, sử dụng một tập hợp duy nhất, hoặc thậm chí xác thực chéo, sẽ không cung cấp cho bạn ước tính thực tế về hiệu suất trong thế giới thực vì bạn đang sử dụng thông tin bạn sẽ không có trong dữ liệu trong tương lai. Thay vào đó, bạn đang chọn mô hình tốt nhất, siêu âm tốt nhất, bộ tính năng tốt nhất, v.v. cho dữ liệu của mình và có khả năng bạn sẽ hơi "làm quá" chiến lược cho dữ liệu của mình. Để có được ước tính trung thực về hiệu suất trong thế giới thực, bạn cần chấm điểm cho dữ liệu không tham gia vào quá trình quyết định, do đó, thông thường sử dụng một bài kiểm tra độc lập tách biệt với đào tạo (mô hình hóa) và xác nhận ( chọn một mô hình, tính năng, siêu đường kính, v.v.) được đặt.

Thay thế cho việc đưa ra một bộ kiểm tra, thay vào đó bạn có thể sử dụng một kỹ thuật gọi là xác thực chéo lồng nhau. Điều này đòi hỏi bạn phải mã hóa toàn bộ chiến lược mô hình hóa của mình (chuyển đổi, cắt bỏ, chọn tính năng, chọn mô hình, điều chỉnh siêu tham số) dưới dạng hàm không tham số và sau đó thực hiện xác thực chéo trên toàn bộ chức năng đó như thể nó chỉ là một chức năng phù hợp với mô hình. Điều này khó thực hiện trong hầu hết các gói ML, nhưng có thể được thực hiện khá dễ dàng trong R với gói mlr bằng cách sử dụng các hàm bao để xác định chiến lược đào tạo của bạn và sau đó lấy lại mẫu cho người học được bọc của bạn:

https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html


1

Tôi giả sử rằng bạn đang phân loại.

Lấy dữ liệu của bạn và chia 70/30 thành các tập con trainingData / testData. Lấy tập hợp con trainingData và chia lại 70/30 thành tập con trainingData / validateData. Bây giờ bạn có 3 tập hợp con của dữ liệu gốc của bạn - trainingData (.7 * .7), validateData (.7 * .3) và testData (.3).

Bạn đào tạo mô hình của bạn với trainingData. Sau đó, bạn kiểm tra hiệu năng của mô hình đó bằng cách sử dụng validateData, mà chúng ta có thể nghĩ là độc lập với trainingData và do đó đánh giá tốt về mức độ tổng quát của mô hình. Hãy giả vờ rằng bạn đạt được độ chính xác 75%.

Bây giờ bạn đào tạo lại mô hình của bạn một số lần tùy ý. Mỗi lần đào tạo lại, bạn đang đánh giá một bộ siêu đường kính khác nhau (các tham số được cung cấp cho mô hình của bạn ở vị trí đầu tiên so với các mô hình mà bạn đang tối ưu hóa) nhưng vẫn sử dụng tập hợp con trainingData. Mỗi lần đào tạo lại, bạn cũng một lần nữa kiểm tra xem mô hình mới tổng quát hóa tốt như thế nào bằng cách kiểm tra hiệu suất trên validateData.

Khi bạn đã kiểm tra mọi kết hợp của siêu đường kính mà bạn muốn đánh giá, bạn chọn tập hợp các siêu đường kính mang lại cho bạn hiệu suất tốt nhất trên validateData - hãy giả vờ hiệu suất tốt nhất của bạn trên validateData có độ chính xác 80%. Đây là các siêu đường kính cuối cùng của bạn và mô hình được xác định bởi các siêu đường kính đó là mô hình bạn sẽ sử dụng cho bước tiếp theo này.

Bây giờ bạn lấy mô hình sử dụng siêu âm cuối cùng của bạn và đánh giá testData. Đây là lần đầu tiên testData được chạm vào kể từ khi toàn bộ quá trình này bắt đầu! Nếu bạn nhận được hiệu suất testData tương đương với hiệu suất của bạn trên validateData (mặc dù thông thường nó sẽ thấp hơn một chút), thì bạn có thể cảm thấy tự tin rằng mô hình của bạn hoạt động như mong đợi và khái quát tốt! Nếu điều đó xảy ra, đây là mô hình cuối cùng của bạn!

Tại sao làm tất cả những điều này? Bạn đang cố gắng tránh quá nhiều. Luôn có nguy cơ bạn quá lạm dụng dữ liệu bạn sử dụng khi bạn đào tạo và điều chỉnh (còn gọi là xác thực) mô hình của mình. Nếu bạn đào tạo, điều chỉnh (xác thực) và kiểm tra chỉ bằng một bộ dữ liệu, rất có thể bạn sẽ phù hợp với dữ liệu đó và nó sẽ không khái quát tốt. Bằng cách tách rời các tập dữ liệu kiểm tra và kiểm tra (và giả sử bạn điều chỉnh bằng cách sử dụng dữ liệu kiểm tra), bạn có cơ hội tự kiểm tra nội bộ, nhưng vẫn có khả năng bạn hiện đang vượt quá dữ liệu kiểm tra. Đó là lý do tại sao chúng tôi chia ra một bộ dữ liệu thứ ba, xác thực, vì vậy chúng tôi có thêm một lớp giữ cho bản thân mình trung thực. Điều chỉnh với validateData giữ cho chúng ta không bị quá tải đến trainingData. Thử nghiệm cuối cùng với testData giúp chúng ta không bị quá tải để xác thựcData.


Câu trả lời này khác với câu trả lời được chấp nhận như thế nào?
Jan Kukacka

Câu hỏi ban đầu là hỏi rõ ràng về một quy trình công việc không bao gồm xác nhận chéo. Tôi đọc câu hỏi của anh ấy để hỏi nó hoạt động như thế nào và tại sao nó đáng tin cậy. Câu trả lời được chấp nhận thảo luận về một quy trình công việc vẫn bao gồm xác nhận chéo. Tôi muốn giải thích cách mọi người làm điều đó mà không nhất thiết phải sử dụng xác nhận chéo trong trường hợp ai đó là người mới bắt đầu và có thể chưa đến lúc đó. Xin lỗi nếu đăng bài này là sai - Tôi là người dùng mới và không có nghĩa là đã vi phạm quy tắc.
John D

0

Chúng ta hãy nhìn nó theo cách sau

  1. Thực tế phổ biến

    a) Dữ liệu đào tạo - được sử dụng để chọn tham số mô hình.

     i) E.g., finding intercept and slope parameters for an ordinary linear 
        regression model. 
    
     ii) The noise in the training data-set is used in some extent 
         in over-fitting model parameters. 
    

    b) Dữ liệu xác nhận - được sử dụng để chọn siêu tham số.

     i)  E.g., we may want to test three different models at step 1.a, say 
         linear model with one, two or three variables.   
    
     ii) The validation data-set is independent from training data, and thus, they provide 
         'unbiased' evaluation to the models, which help to decide which 
         hyper-parameter to use. 
    
     iii) We note that, a model trained in 1.a, say y = b_0+b_1*x_1, does 
         not learn anything from this data-set. So, the noise in this data- 
         set is not used to over-fit the parameters (b_0, b_1), but, over- 
         fit exists in choosing which linear model to use (in terms of 
         number of variables). 
    

    c) Dữ liệu thử nghiệm - được sử dụng để có được sự tin cậy của đầu ra từ hai bước trên

    i) Used once a model is completely trained
    
  2. Một cách khác để xem phần 1

    a) Nhóm ứng cử viên mô hình của chúng tôi là một bộ 5 dimenson, nghĩa là,

    i) Dimension 1: number of variables to keep in the regression model, 
       e.g., [1, 2, 3].
    
    ii) Dimension 2-5: (b_0, b_1, b_2, b_3). 
    

    b) Bước 1a giảm các ứng cử viên mô hình từ 5 chiều xuống 1 chiều.

    c) Bước 1b giảm các ứng cử viên mô hình từ 1 chiều xuống 0 chiều, một mô hình duy nhất.

    d) Tuy nhiên, OP có thể nghĩ rằng đầu ra 'cuối cùng' ở trên không hoạt động đủ tốt trên tập dữ liệu thử nghiệm và do đó làm lại toàn bộ quá trình một lần nữa, giả sử sử dụng hồi quy tuyến tính thay vì hồi quy tuyến tính thông thường. Sau đó, tập dữ liệu thử nghiệm được sử dụng nhiều lần và do đó nhiễu trong dữ liệu này có thể tạo ra một số dư thừa trong việc quyết định nên sử dụng hồi quy tuyến tính hay hồi quy sườn.

    e) Để đối phó với nhóm mô hình chiều cao với các tham số, siêu đường kính, loại mô hình và phương pháp tiền xử lý, bất kỳ sự phân chia nào đối với dữ liệu có sẵn cho chúng ta về cơ bản là xác định quy trình ra quyết định

    i)  Sequentially reducing the model pool to zero-dimension.
    
    ii) Allocating data noise overfitting to different steps of dimension 
        reductions (overfitting the noise in the data is not avoidable but 
        could be allocated smartly). 
    
  3. Kết luận và câu trả lời cho câu hỏi của OP

    a) Chia hai (đào tạo và kiểm tra), chia ba (đào tạo, xác nhận và kiểm tra) hoặc số lượng phân chia cao hơn về cơ bản là về việc giảm kích thước và phân bổ dữ liệu (đặc biệt là tiếng ồn và rủi ro của sự phù hợp quá mức).

    b) Ở giai đoạn nào đó, bạn có thể đưa ra nhóm ứng cử viên mô hình 'cuối cùng', và sau đó, bạn có thể nghĩ cách thiết kế quy trình giảm kích thước tuần tự sao cho

    i) At each step of reducing the dimensions, the output is satisfactory, 
      e.g., not using just 10 data points with large noise to estimate a 
      six-parameter liner model. 
    
    ii) There are enough data for you to reduce the dimension to zero 
       finally. 
    

    c) Nếu bạn không thể đạt được b

    i) Use model and data insight to reduce the overall dimensionality of 
      your model pool. E.g., liner regression is sensitive to outliers thus 
      not good for data with many large outliers. 
    
    ii) Choose robust non-parametric models or models with less number of 
       parameter if possible. 
    
    iii) Smartly allocating the data available at each step of reducing the 
        dimensionality. There is some goodness of fit tests to help us decide 
        whether the data we use to train the model is enough or not. 
    
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.