Làm cách nào để xác thực chéo với cv.glmnet (hồi quy LASSO trong R)?


10

Tôi đang tự hỏi làm thế nào để tiếp cận việc đào tạo và thử nghiệm đúng mô hình LASSO bằng glmnet trong R?

  • Cụ thể, tôi tự hỏi làm thế nào để làm như vậy nếu thiếu bộ dữ liệu thử nghiệm bên ngoài bắt buộc tôi phải sử dụng xác thực chéo (hoặc phương pháp tương tự khác) để kiểm tra mô hình LASSO của tôi.

Hãy để tôi phá vỡ kịch bản của tôi:

Tôi chỉ có một bộ dữ liệu để thông báo và huấn luyện mô hình glmnet của mình. Do đó, tôi sẽ phải sử dụng xác thực chéo để phân tách dữ liệu của mình để tạo ra cách kiểm tra mô hình của mình.

Tôi đã sử dụng cv.glmnet, theo chi tiết gói :

Liệu xác thực chéo k-gấp cho glmnet, tạo ra một âm mưu và trả về một giá trị cho lambda.

  • Là xác thực chéo được thực hiện cv.glmnetchỉ đơn giản là để chọn lambda tốt nhất, hay nó cũng phục vụ như một thủ tục xác thực chéo chung hơn?

    • Nói cách khác, tôi vẫn cần thực hiện một bước xác thực chéo khác để "kiểm tra" mô hình của mình chứ?

Tôi đang làm việc với giả định rằng, "vâng tôi làm."

Đó là trường hợp, làm thế nào để tôi tiếp cận xác nhận chéo cv.glmnetmô hình của tôi ?

  • Tôi có phải làm như vậy bằng tay không, hoặc có lẽ là caretchức năng hữu ích cho các mô hình glmnet?

  • Tôi có sử dụng hai "vòng lặp" đồng bộ xác thực chéo không? ... Tôi có sử dụng "vòng lặp bên trong" của CV thông qua cv.glmnetđể xác định giá trị lambda tốt nhất trong mỗi k lần của "vòng lặp bên ngoài" của xử lý xác thực chéo k ?

    • Nếu tôi xác thực chéo cv.glmnetmô hình đã xác thực chéo của mình , làm cách nào để cách ly mô hình "tốt nhất" (từ giá trị lambda "tốt nhất") từ mỗi cv.glmnetmô hình trong mỗi lần lặp lại "vòng lặp bên ngoài" khác của xác thực chéo?

      • Lưu ý: Tôi xác định mô hình "tốt nhất" là mô hình liên kết với một lambda mà tạo ra một MSE trong vòng 1 SE của tối thiểu ... đây là $lambda.1setrong cv.glmnetmô hình.

Bối cảnh:

Tôi đang cố gắng dự đoán tuổi cây ("tuổi") dựa trên đường kính cây ("D"), D ^ 2 và loài ("yếu tố (ĐẶC BIỆT)"). [kết quả phương trình: Age ~ D + factor(SPEC) + D^2]. Tôi có ~ 50K hàng dữ liệu, nhưng dữ liệu theo chiều dọc (theo dõi các cá nhân theo thời gian) và bao gồm ~ 65 loài.


1
Đối với những người đã bỏ phiếu để đóng mà không bình luận: điều đó không hữu ích ... hãy cho tôi biết vấn đề của bạn trong các bình luận và tôi sẽ cố gắng khắc phục nó.
bác sĩ lâm sàng

1
Họ không bỏ phiếu để đóng mà họ đang bỏ phiếu để di chuyển nó sang CrossValidated. Tôi chỉ cần thêm phiếu bầu của tôi vào đó.
Hack-R

@theforestecologist: Bạn sẽ có thể thấy các lý do được trích dẫn cho việc đóng / di chuyển bằng cách nhấp vào nút 'đóng'.
DWin

Cảm ơn đã hỏi, tôi đã có chính xác câu hỏi này. Và tôi không thể sử dụng dấu mũ vì tôi có Y. đa biến. Nhưng bạn đã kiểm tra mã nguồn và xác nhận rằng không cần thêm CV? Mã nguồn có thể khá khó theo dõi.
qoheleth

Câu trả lời:


3

Là xác thực chéo được thực hiện trong cv.glmnet chỉ đơn giản là để chọn lambda tốt nhất, hay nó cũng phục vụ như một thủ tục xác thực chéo chung hơn?

Nó thực hiện hầu hết mọi thứ cần thiết trong một xác nhận chéo. Ví dụ, nó phù hợp với lambdacác giá trị có thể có trên dữ liệu, chọn mô hình tốt nhất và cuối cùng huấn luyện mô hình với các tham số thích hợp.

Ví dụ: trong đối tượng trả về ::

cvmlà lỗi xác nhận chéo trung bình. cvsdlà độ lệch chuẩn ước tính.

Giống như các giá trị được trả về khác, chúng được tính trên tập kiểm tra. cuối cùng

glmnet.fit cung cấp cho mô hình được đào tạo trên tất cả các dữ liệu (đào tạo + kiểm tra) với các tham số tốt nhất.

Tôi có phải làm như vậy bằng tay không, hoặc có lẽ chức năng caret hữu ích cho các mô hình glmnet?

Bạn không cần phải làm điều này bằng tay. 'Caret' sẽ rất hữu ích và là một trong những gói yêu thích của tôi vì nó hoạt động cho tất cả các mô hình khác có cùng cú pháp. Bản thân tôi thường sử dụng carethơn là cv.glmnet. Tuy nhiên, trong kịch bản của bạn về cơ bản là giống nhau.

Tôi có sử dụng hai "vòng" đồng tâm xác thực chéo không? ... Tôi có sử dụng "vòng lặp bên trong" của CV qua cv.glmnet để xác định giá trị lambda tốt nhất trong mỗi k lần của "vòng ngoài" của k-nếp gấp xử lý xác nhận chéo?

Bạn có thể làm điều này và khái niệm này rất giống với ý tưởng về Xác thực chéo Nested Xác thực chéo Nested để lựa chọn mô hình .

Nếu tôi xác thực chéo mô hình cv.glmnet đã xác thực chéo của mình, làm cách nào để cách ly mô hình "tốt nhất" (từ giá trị lambda "tốt nhất") từ mỗi mô hình cv.glmnet trong mỗi lần lặp của vòng lặp bên ngoài của tôi "Xác nhận chéo?

Chỉ cần chạy một vòng lặp trong đó bạn tạo dữ liệu đào tạo và dữ liệu thử nghiệm chạy cv.glmnettrên dữ liệu đào tạo và sử dụng mô hình glmnet.fitđể dự đoán dữ liệu thử nghiệm.


@discupulus: Cảm ơn. Bạn có thể cung cấp một số loại bằng chứng cho điều đó? (tức là hướng dẫn tôi qua nó). Ngoài ra, với câu trả lời của bạn, điều đó có nghĩa là không cần thêm quy trình xác thực chéo để báo cáo số liệu hiệu suất cho dữ liệu? (Tôi chỉ có thể báo cáo MSE của trường hợp lambda.1se là hiệu suất mô hình cuối cùng của mình?)
bác sĩ lâm sàng

Có, không cần xác nhận chéo nữa là cần thiết. Để làm bằng chứng, bạn có thể xem mã nguồn của cv.glmnethàm Rlà nguồn mở. Chỉ cần gõ cv.glmnettrong giao diện điều khiển.
discipulus

3
@discipulus. Tôi đã gửi email cho Trevor Hastie hỏi "cv.glmnet (triển khai R) chỉ làm CV để chọn lambda? Hay nó cũng làm một CV bên ngoài để xác thực lambda đã chọn? Nói cách khác, chúng ta có phải viết mã CV bên ngoài của mình không? muốn xác thực lambda đã chọn? " và anh ấy trả lời (khá nhanh chóng) "Vâng, chỉ để chọn lambda", mà tôi hiểu là nó chỉ thực hiện CV bên trong, và chúng tôi sẽ phải viết mã CV bên ngoài của chúng tôi.
qoheleth

@theforestecologist Tôi đang cố gắng tìm hiểu thêm về xác nhận chéo và tìm bài đăng của bạn. Tôi không hiểu ý của bạn bởi cv.glmnet cũng là một quy trình xác thực chéo tổng quát hơn. Tôi nghĩ rằng tham số duy nhất có sẵn để chọn là lambda - lớp xác thực chéo nào tồn tại? Sẽ biết ơn nếu bạn có thể trả lời. Cảm ơn!
dùng2450223
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.