Làm thế nào để tôi biết phương pháp xác nhận chéo nào là tốt nhất?


36

Tôi đang cố gắng tìm ra phương pháp xác nhận chéo nào là tốt nhất cho tình huống của tôi.

Các dữ liệu sau đây chỉ là một ví dụ để xử lý vấn đề (trong R), nhưng Xdữ liệu thực của tôi ( xmat) có tương quan với nhau và tương quan với các mức độ khác nhau với ybiến ( ymat). Tôi đã cung cấp mã R, nhưng câu hỏi của tôi không phải là về R mà là về các phương thức. Xmatbao gồm các biến X từ V1 đến V100 trong khi ymatbao gồm một biến y.

set.seed(1233)
xmat           <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
  # the real y data are correlated with xmat
ymat           <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")

Tôi muốn xây dựng một mô hình để dự đoán ydựa trên tất cả các biến trong xmat. Vì vậy, nó sẽ là một mô hình hồi quy tuyến tính y ~ V1 + V2 + V3+ ... + V100. Từ đánh giá, tôi có thể thấy ba phương thức xác thực chéo sau đây:

  1. Chia dữ liệu trong khoảng một nửa và sử dụng một để đào tạo và một nửa khác để kiểm tra (xác thực chéo):

    prop       <- 0.5 # proportion of subset data
    set.seed(1234)
      # training data set 
    training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0))
    xmat.train <- xmat[training.s,]
    ymat.train <- ymat[training.s,]
    
      # testing data set 
    testing.s <- setdiff(1:nrow(xmat), training)
    xmat.test <- xmat[testing.s,]
    ymat.test <- ymat[testing.s,]
    
  2. Xác thực chéo K-Fold - sử dụng xác thực chéo 10 lần:

    mydata <- data.frame(ymat, xmat)
    fit    <- lm(ymat ~ ., data=mydata)
    library(DAAG)
    cv.lm(df=mydata, fit, m=10) # ten-fold cross validation 
    
  3. Che dấu một giá trị hoặc một vài giá trị tại một thời điểm : Trong phương pháp này, chúng tôi che dấu ngẫu nhiên một giá trị trong tập dữ liệu (y) bằng cách thay thế nó bằng NA và dự đoán nó. Quá trình được lặp lại n lần.

    n = 500 
    predicted.v <- rep(NA, n)
    real.v      <- rep(NA, n)
    
    for (i in 1:n){
      masked.id <- sample (1:nrow(xmat), 1)
      ymat1     <- ymat 
      real.v[i] <- ymat[masked.id,]
      ymat1[masked.id,] <- NA
      mydata            <- data.frame(ymat1, xmat)
      fit               <- lm(ymat1 ~ ., data=mydata)
      predicted.v[i]    <- fit$fitted.values[masked.id]
    }
    

Làm thế nào để tôi biết cái nào là tốt nhất cho mọi tình huống? Có phương pháp nào khác không? Bootstrap validationvs CV? Ví dụ làm việc sẽ được đánh giá cao.


Bạn có muốn kiểm tra tính hợp lệ của dữ liệu hoặc xác minh các ước tính hoặc giá trị dự đoán của các hệ số b.
Subhash C. Davar

Tôi quan tâm đến việc xác minh các ước tính hoặc giá trị dự đoán của các hệ số b
ndorlearn

Vấn đề tôi gặp phải với phương pháp # 1 là kích thước mẫu nhỏ hơn nhiều so với những gì bạn có trong thực tế. Do đó, các dải tin cậy / độ biến thiên ước tính có thể lớn hơn nhiều. Ngoài ra, tôi đoán phương pháp số 2 và phương pháp số 3 sẽ có hiệu suất tương tự nhau. Nếu tôi là bạn, hãy bắt đầu với xác thực chéo K-gấp cho K = 5,6, ..., 14,15 và chỉ xem kết quả của bạn có tương đối giống nhau không.
Kian

Ngoài ra, bạn có định làm lựa chọn mô hình để giảm số lượng đồng biến không? 100 có vẻ như khá nhiều.
Kian

@ user2432701 Không, tôi muốn sử dụng tất cả 100.
ndorlearn

Câu trả lời:


34

Vì OP đã đặt tiền thưởng cho câu hỏi này, nên nó sẽ thu hút một số sự chú ý và do đó đây là nơi thích hợp để thảo luận về một số ý tưởng chung, ngay cả khi nó không trả lời trực tiếp cho OP.

Đầu tiên, tên:

a) xác thực chéo là tên chung cho tất cả các kỹ thuật ước lượng / đo lường sử dụng một bộ thử nghiệm khác với bộ tàu. Từ đồng nghĩa: ước lượng ngoài mẫu hoặc ngoài mẫu. Từ trái nghĩa: ước lượng trong mẫu.

Ước lượng trong mẫu là các kỹ thuật sử dụng một số thông tin trên tập huấn luyện để ước tính chất lượng mô hình (không nhất thiết là lỗi). Điều này rất phổ biến nếu mô hình có độ lệch cao - nghĩa là - nó đưa ra các giả định mạnh mẽ về dữ liệu. Trong các mô hình tuyến tính (một mô hình thiên vị cao), như trong ví dụ của câu hỏi, người ta sử dụng R bình phương, AIC, BIC, độ lệch, làm thước đo chất lượng mô hình - tất cả đều là các công cụ ước tính trong mẫu. Ví dụ, trong SVM, dữ liệu tỷ lệ trong vectơ hỗ trợ cho số lượng dữ liệu là ước tính lỗi trong mẫu của mô hình.

Có nhiều kỹ thuật xác nhận chéo:

b) giữ lại là phương pháp số 1 ở trên. Chia bộ thành một đào tạo và một bài kiểm tra. Có một lịch sử lâu dài của các cuộc thảo luận và thực hành về quy mô tương đối của tập huấn luyện và kiểm tra.

c) k- Fold - phương pháp # 2 ở trên. Khá chuẩn.

d) Rời khỏi một lần - phương pháp # 3 ở trên.

e) bootstrap : nếu bộ của bạn có N dữ liệu, hãy chọn ngẫu nhiên N mẫu CÓ THAY THẾ từ bộ đó và sử dụng nó làm huấn luyện. Dữ liệu từ bộ ban đầu chưa được lấy mẫu bất kỳ lúc nào được sử dụng làm bộ kiểm tra. Có nhiều cách khác nhau để tính toán ước tính cuối cùng về lỗi của mô hình sử dụng cả lỗi cho tập kiểm tra (ngoài mẫu) và lỗi cho tập huấn luyện (trong mẫu). Xem ví dụ, bootstrap .632. Tôi nghĩ đó cũng là một công thức .632+ - chúng là các công thức ước tính lỗi thực sự của mô hình bằng cách sử dụng cả lỗi ngoài mẫu và lỗi trong mẫu.

f) Trực giao với việc lựa chọn phương pháp trên là vấn đề lặp lại. Ngoại trừ bỏ qua một lần, tất cả các phương pháp trên có thể được lặp lại bất kỳ số lần nào. Trong thực tế, người ta có thể nói về việc giữ lại REPEATED, hoặc REPEATED k- Fold. Công bằng mà nói, hầu như luôn luôn phương thức bootstrap được sử dụng theo kiểu lặp đi lặp lại.


Câu hỏi tiếp theo là, phương pháp nào "tốt hơn". Vấn đề là "tốt hơn" nghĩa là gì.

1) Câu trả lời đầu tiên là liệu mỗi phương thức này có bị sai lệch cho việc ước tính lỗi mô hình hay không (đối với một lượng dữ liệu vô hạn trong tương lai).

2) Cách thay thế thứ hai là mức độ nhanh hay mức độ của mỗi phương thức này hội tụ đến lỗi mô hình thực sự (nếu chúng không bị sai lệch). Tôi tin rằng đây vẫn là một chủ đề nghiên cứu. Hãy để tôi chỉ vào hai bài báo này (đằng sau bức tường trả tiền) nhưng bản tóm tắt cho chúng ta một số hiểu biết về những gì chúng đang cố gắng thực hiện. Cũng lưu ý rằng việc gọi k- Fold là "xác thực chéo" là rất phổ biến .

Có lẽ có nhiều bài viết khác về các chủ đề này. Đó chỉ là một số ví dụ.

3) Một khía cạnh khác của "tốt hơn" là: đưa ra một thước đo cụ thể về lỗi mô hình bằng cách sử dụng một trong các kỹ thuật ở trên, bạn có thể chắc chắn rằng lỗi mô hình chính xác đã đóng.

Nói chung, trong trường hợp này, bạn muốn thực hiện nhiều biện pháp về lỗi và tính khoảng tin cậy (hoặc khoảng tin cậy nếu bạn làm theo phương pháp Bayes). Trong trường hợp này, vấn đề là bạn có thể tin tưởng bao nhiêu vào phương sai của tập hợp các biện pháp lỗi. Lưu ý rằng ngoại trừ loại bỏ một lần, tất cả các kỹ thuật ở trên sẽ cung cấp cho bạn nhiều biện pháp khác nhau ( k biện pháp cho k- Fold, n biện pháp cho n giữ không lặp lại) và do đó bạn có thể đo phương sai (hoặc độ lệch chuẩn ) của tập hợp này và tính khoảng tin cậy cho phép đo lỗi.

Ở đây mọi thứ trở nên hơi phức tạp. Từ những gì tôi hiểu được từ bài báo Không có công cụ ước tính không thiên vị về phương sai của xác thực chéo k (không phải sau paywall), người ta không thể tin vào phương sai bạn nhận được từ k- Fold - vì vậy người ta không thể xây dựng khoảng tin cậy tốt từ k - nếp gấp. Cũng từ những gì tôi hiểu được từ bài kiểm tra thống kê gần đúng để so sánh các thuật toán học phân loại được giám sát (không đứng sau paywall), các kỹ thuật sử dụng các biện pháp lặp đi lặp lại (lặp đi lặp lại k- gấp đôi, lặp đi lặp lại - không chắc chắn về bootstrap) sẽ ước tính phụ phương sai thực sự của thước đo lỗi (có thể dễ dàng nhận thấy điều đó - vì bạn đang lấy mẫu từ một tập hữu hạn nếu bạn lặp lại số đo rất lớn lần, các giá trị giống nhau sẽ tiếp tục lặp lại, giữ giá trị trung bình như nhau, nhưng làm giảm phương sai). Do đó, các kỹ thuật đo lặp đi lặp lại sẽ quá lạc quan về khoảng tin cậy.

Bài viết cuối cùng này đề nghị thực hiện 5 lần lặp lại 2 lần - mà ông gọi là 5 × 2 CV - như một sự cân bằng tốt của nhiều biện pháp (10) nhưng không lặp lại quá nhiều.

CHỈNH SỬA:

Tất nhiên, có những câu trả lời tuyệt vời trong Cross xác thực cho một số trong những câu hỏi này (mặc dù đôi khi chúng không đồng ý với nhau). Đây là một số:

Xác nhận chéo hoặc bootstrapping để đánh giá hiệu suất phân loại?

Sự khác nhau giữa xác thực chéo và bootstrapping để ước tính lỗi dự đoán

Xác nhận chéo hoặc bootstrapping để đánh giá hiệu suất phân loại?

Hiểu bootstrapping để xác nhận và lựa chọn mô hình

Nói chung, thẻ là bạn của bạn ở đây.


Vậy đâu là giải pháp tốt nhất? Tôi không biết. Tôi đã sử dụng CV 5 × 2 khi tôi cần rất nghiêm ngặt, khi tôi cần chắc chắn rằng một kỹ thuật tốt hơn một kỹ thuật khác, đặc biệt là trong các ấn phẩm. Và tôi sử dụng một khoản giữ nếu tôi không có kế hoạch thực hiện bất kỳ thước đo phương sai hoặc độ lệch chuẩn nào, hoặc nếu tôi có những hạn chế về thời gian - chỉ có một mô hình học tập trong trạng thái chờ đợi .


Đối với các thuộc tính phương sai phức tạp của xác nhận chéo, tôi nghĩ rằng người ta cần phải cẩn thận về phương sai cần đo. IIRC, Bengio et al. tập trung vào phương sai cho một tập dữ liệu có kích thước n cho vấn đề hiện tại. Khác biệt (và lớn hơn) với sự không chắc chắn ngẫu nhiên đối với các dự đoán của một mô hình được đào tạo trên tập dữ liệu tôi có trong tay. Xem thêm phân loại vấn đề trong bài báo Dietterich được liên kết ở trên.
cbeleites hỗ trợ Monica

7

Vui lòng tham khảo trang wikipedia để biết định nghĩa phương thức (chúng thực hiện công việc tốt hơn nhiều so với tôi có thể làm ở đây).

Sau khi bạn đã xem trang đó, những điều sau đây có thể giúp ích cho bạn. Hãy để tôi tập trung vào phần câu hỏi mà người ta muốn chọn một trong những phương pháp này cho quy trình mô hình hóa của họ. Vì đây là lựa chọn khá thường xuyên mà một người đưa ra và họ có thể hưởng lợi từ kiến ​​thức bổ sung, đây là câu trả lời của tôi cho hai tình huống:

  1. Bất kỳ tình huống nào : Sử dụng k-fold cross validationvới một số lần lặp lại phù hợp (giả sử 5 hoặc 10).

    • Chia dữ liệu thành 1 nửa, đào tạo nửa đầu và xác thực nửa còn lại là một bước trong xác thực chéo 2 lần (bước còn lại là lặp lại bài tập tương tự với hai nửa thay thế cho nhau). Do đó, loại trừ chiến lược 'chia dữ liệu thành một nửa'.

    • Nhiều tài liệu học máy và khai thác dữ liệu sử dụng xác nhận chéo k-Fold (không có trích dẫn), vì vậy hãy sử dụng nó trừ khi bạn phải rất cẩn thận trong bước này.

    • Bây giờ, bỏ một phương thức ra và các phương thức khác như ' bỏ p ra ' và ' phân tách ngẫu nhiên và lặp lại ' (về cơ bản là bootstrap như quy trình được mô tả ở trên) chắc chắn là những ứng cử viên tốt.

    • Nếu kích thước dữ liệu của bạn là N, thì xác thực chéo N về cơ bản giống như bỏ qua một lần.

    • 'Để lại p' và 'bootstrap' khác một chút so với xác thực chéo k, nhưng sự khác biệt về cơ bản là cách xác định các nếp gấp và số lần lặp lại 'k' xảy ra.

    • Như trang wiki đã nói, cả k-Fold và ' bỏ p ' đều là những công cụ ước tính hợp lý về ' hiệu suất / sự phù hợp mong đợi ' (mặc dù các cược đã bị loại bỏ liên quan đến phương sai của các công cụ ước tính này).

  2. Tình huống của bạn: Bạn chỉ có cỡ mẫu là 200 so với số lượng tính năng (100). Tôi nghĩ rằng có khả năng rất cao là có nhiều mô hình tuyến tính cho cùng một hiệu suất. Tôi sẽ đề nghị sử dụng xác nhận chéo k-Fold với> 10 lần lặp lại . Chọn giá trị ak là 3 hoặc 5.

    • Lý do cho giá trị k: lựa chọn chung.

    • Lý do cho giá trị lặp lại: Giá trị cao cho sự lặp lại có lẽ rất quan trọng ở đây bởi vì đầu ra của một tính toán xác thực chéo k-gấp đơn có thể không thể tách rời biến đổi / ngẫu nhiên mà chúng tôi giới thiệu.

Suy nghĩ thêm:

  • Có lẽ tôi cũng sẽ sử dụng các phương thức ' bỏ p ' và ' bootstrap như lặp lại phân tách ngẫu nhiên ' (ngoài xác thực chéo k-gấp) cho cùng một thước đo hiệu suất / độ phù hợp để kiểm tra xem các đầu ra của phương thức xác thực chéo k của tôi có ổn không.

  • Mặc dù bạn muốn sử dụng tất cả 100 tính năng, như ai đó đã đề xuất, hãy chú ý đến tính đa hình / tương quan và có thể giảm số lượng tính năng.


Ngoài ra hãy xem câu trả lời này: stats.stackexchange.com/questions/69291/ Kẻ
Theja

Tôi sẽ cắt bỏ rất nhiều thứ này và đi thẳng đến bootstrap lạc quan Efron-Gong như được thực hiện trong rmsgói R validatevà các calibratechức năng.
Frank Harrell
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.