Lựa chọn & mô hình tính năng với glmnet trên dữ liệu Methyl hóa (p >> N)


29

Tôi muốn sử dụng GLM và Elastic Net để chọn các tính năng có liên quan đó + xây dựng mô hình hồi quy tuyến tính (nghĩa là cả dự đoán và hiểu biết, vì vậy sẽ tốt hơn nếu chỉ còn lại một vài tham số). Đầu ra liên tục. Đó là gen trên trường hợp. Tôi đã đọc về gói, nhưng tôi không chắc chắn 100% về các bước để làm theo:2000050glmnet

  1. Thực hiện CV để chọn lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) được cung cấp dữ liệu đầu vào, bạn có chọn giá trị alpha khác không?
    (Q2) tôi có cần phải làm gì khác trước khi xây dựng mô hình không?

  2. Phù hợp với mô hình:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) có gì tốt hơn "hiệp phương sai"?
    (Q4) Nếu lambda được chọn bởi CV, tại sao bước này cần nlambda=?
    (Câu 5) là tốt hơn để sử dụng lambda.minhay lambda.1se?

  3. Lấy các hệ số, để xem tham số nào đã rơi ra ("."):
    predict(model, type="coefficients")

    Trong trang trợ giúp có rất nhiều predictphương pháp (ví dụ predict.fishnet, predict.glmnet, predict.lognet, vv). Nhưng bất kỳ dự đoán "đơn giản" như tôi thấy trên một ví dụ.
    (Q6) Tôi có nên sử dụng predicthay predict.glmnethay khác?

Bất chấp những gì tôi đã đọc về các phương thức chính quy, tôi khá mới trong R và trong các gói thống kê này, vì vậy thật khó để chắc chắn liệu tôi có thích ứng được vấn đề của mình với mã không. Bất kỳ đề xuất sẽ được hoan nghênh.

CẬP NHẬT
Dựa trên "Như đã lưu ý trước đó, một đối tượng của lớp tàu chứa một phần tử được gọi finalModellà mô hình được trang bị với các giá trị tham số điều chỉnh được chọn bằng cách lấy mẫu lại. Đối tượng này có thể được sử dụng theo cách truyền thống để tạo dự đoán cho các mẫu mới, sử dụng điều đó chức năng dự đoán của mô hình. "

Sử dụng caretđể điều chỉnh cả alpha và lambda:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

fitMthay thế bước 2 trước không? Nếu vậy, làm thế nào để xác định các tùy chọn glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se) bây giờ?
Và sau predictbước, tôi có thể thay thế modelcho fitM?

Nếu tôi làm

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

nó có ý nghĩa gì không hoặc tôi trộn không chính xác cả hai từ vựng gói?

Câu trả lời:


42

Phần 1

Trong mạng đàn hồi, hai loại ràng buộc về các tham số được sử dụng

  1. Các ràng buộc của Lasso (tức là về kích thước của các giá trị tuyệt đối của )βj
  2. Các ràng buộc (tức là về kích thước của các giá trị bình phương của )βj

α kiểm soát trọng số tương đối của hai loại. Các ràng buộc Lasso cho phép lựa chọn / loại bỏ các biến trong mô hình. Các ràng buộc sườn núi có thể đối phó với các biến cộng tuyến. Mà bạn đặt nhiều trọng lượng hơn sẽ phụ thuộc vào các thuộc tính dữ liệu; rất nhiều biến tương quan có thể cần cả hai ràng buộc, một vài biến tương quan có thể gợi ý nhiều hơn về các ràng buộc sườn núi.

Một cách để giải quyết vấn đề này là coi là một tham số điều chỉnh cùng với và sử dụng các giá trị gây ra lỗi CV thấp nhất, giống như cách bạn đang điều chỉnh tại thời điểm này .αλλcv.glmnet

Các gói phần mềm R caret có thể xây dựng mô hình sử dụng glmnet gói và cần được thiết lập để điều chỉnh trên cả hai tham số và .αλ

Phần 2

Quý 3

Có, trong trường hợp này trong đó (số lượng biến số lượng quan sát), trang trợ giúp để đề xuất sử dụngmn?glmnet

type.gaussian = "naive"

Thay vì lưu trữ tất cả các sản phẩm bên trong được tính toán trên đường đi, có thể không hiệu quả với số lượng biến lớn hoặc khi , tùy chọn sẽ lặp lại mỗi lần nó được yêu cầu cho các sản phẩm bên trong máy tính.mn"naive"n

Nếu bạn chưa chỉ định đối số này, dù sao glmnetcũng sẽ chọn "naive"là , nhưng tốt hơn là chỉ định rõ ràng điều này trong trường hợp mặc định và các tùy chọn thay đổi sau này trong gói và bạn đang chạy mã vào một ngày trong tương lai.m>500

Quý 4

Câu trả lời ngắn gọn, bạn không cần chỉ định một giá trị cao vì nlambdabây giờ bạn đã chọn một giá trị tối ưu, với điều kiện . Tuy nhiên, nếu bạn muốn vẽ các đường dẫn hệ số, v.v. thì việc có một bộ giá trị khiêm tốn của trong khoảng thời gian sẽ dẫn đến một bộ đường dẫn đẹp hơn nhiều. Gánh nặng tính toán của việc thực hiện toàn bộ đường dẫn liên quan đến một cụ thể là không lớn, kết quả của rất nhiều nỗ lực để phát triển các thuật toán để thực hiện công việc này một cách chính xác. Tôi sẽ chỉ để mặc định, trừ khi nó tạo ra sự khác biệt đáng kể về thời gian tính toán.α=0.5λλnlambda

Câu 5

Đây là một câu hỏi về Parsimony. Các lambda.mintùy chọn liên quan đến giá trị của tại lỗi CV thấp nhất. Lỗi tại giá trị này của là trung bình của các lỗi trong lần và do đó, ước tính lỗi này là không chắc chắn. Các đại diện cho giá trị của trong việc tìm kiếm đó là đơn giản hơn so với các mô hình tốt nhất ( ), nhưng trong đó có lỗi trong vòng 1 sai số chuẩn của mô hình tốt nhất. Nói cách khác, sử dụng giá trị là giá trị được chọn choλλklambda.1seλlambda.minlambda.1seλkết quả trong một mô hình đó là hơi đơn giản hơn so với các mô hình tốt nhất nhưng mà không thể được phân biệt với các mô hình tốt nhất về mặt lỗi cho sự không chắc chắn trong -fold ước tính CV của lỗi của mô hình tốt nhất.k

Sự lựa chọn là của bạn:

  1. Mô hình tốt nhất có thể quá phức tạp của hơi quá mức: lambda.min
  2. Mô hình đơn giản nhất có lỗi tương đương với mô hình tốt nhất có sự không chắc chắn: lambda.1se

Phần 3

Đây là một điều đơn giản và là thứ bạn sẽ bắt gặp rất nhiều với R. Bạn sử dụng predict()chức năng 99,9% thời gian. R sẽ sắp xếp cho việc sử dụng hàm đúng cho đối tượng được cung cấp làm đối số đầu tiên.

Về mặt kỹ thuật, predictlà một hàm chung, có các phương thức (phiên bản của hàm) cho các đối tượng thuộc các loại khác nhau (về mặt kỹ thuật được gọi là các lớp ). Đối tượng được tạo bởi glmnetcó một lớp cụ thể (hoặc các lớp) tùy thuộc vào loại mô hình nào thực sự được trang bị. glmnet (gói) cung cấp các phương thức cho predicthàm cho các loại đối tượng khác nhau này. R biết về các phương thức này và sẽ chọn phương thức thích hợp dựa trên lớp của đối tượng được cung cấp.


2
Anwser TUYỆT VỜI! Tôi đã đọc về caret. Không chắc chắn 100% về mối quan hệ giữa gói caret và gói glmnet, vì vậy tôi đã cập nhật câu hỏi của mình để làm rõ 'hợp nhất' các gói này với các gói hoặc chuyển từ glmnet sang caret.
PGreen

1
@PGreen: caretlà gói bao bọc R bao bọc các giao diện chức năng từ hơn 100 gói ML để phù hợp hơn và thêm CV, tìm kiếm, sửa đổi mặc định tham số điên rồ, v.v. Nó không phải là không có quirks nhưng nó khá tốt và được sử dụng rộng rãi.
smci

Tôi chỉ muốn thêm rằng để điều chỉnh alpha, bạn có thể sử dụng cva.glmnet(..)thay vì chỉ cv.glmnet(...)và điều chỉnh alpha và lambda cùng một lúc. Sau đó, bạn có thể chạy minlossplot(cva.fit)để xem alpha nào cho kết quả tốt nhất. Đây là cả một phần của glmnetUtils
Espen Riskedal
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.