Khi nào tôi nên * không * sử dụng hàm nlm của R cho MLE?


25

Tôi đã chạy qua một vài hướng dẫn gợi ý rằng tôi sử dụng nlm của R để ước tính khả năng tối đa. Nhưng không ai trong số họ (bao gồm cả tài liệu của R ) đưa ra nhiều hướng dẫn lý thuyết về thời điểm sử dụng hay không sử dụng chức năng.

Theo như tôi có thể nói, nlm chỉ đang thực hiện giảm độ dốc dọc theo các phương pháp của Newton. Có nguyên tắc nào khi sử dụng phương pháp này hợp lý không? Những lựa chọn thay thế có sẵn? Ngoài ra, có giới hạn về kích thước của các mảng, vv người ta có thể vượt qua nlm không?

Câu trả lời:


39

Có một số thói quen tối ưu hóa mục đích chung trong cơ sở R mà tôi biết: optim, nlminb, nlmconstrOptim(trong đó xử lý những hạn chế bất bình đẳng tuyến tính, và các cuộc gọi optimdưới mui xe). Dưới đây là một số điều mà bạn có thể muốn xem xét trong việc lựa chọn sử dụng cái nào.

  • optimcó thể sử dụng một số thuật toán khác nhau bao gồm gradient liên hợp, Newton, quasi-Newton, Nelder-Mead và mô phỏng ủ. Hai cái cuối cùng không cần thông tin về độ dốc và do đó có thể hữu ích nếu độ dốc không khả dụng hoặc không khả thi để tính toán (nhưng có khả năng chậm hơn và yêu cầu tinh chỉnh nhiều tham số hơn, tương ứng). Nó cũng có một tùy chọn để trả về Hessian được tính toán tại giải pháp, mà bạn sẽ cần nếu bạn muốn các lỗi tiêu chuẩn cùng với chính giải pháp đó.

  • nlminbsử dụng thuật toán quasi-Newton lấp đầy cùng một ngách như "L-BFGS-B"phương pháp trong optim. Theo kinh nghiệm của tôi, có vẻ như mạnh mẽ hơn một chút so với optimviệc nó có nhiều khả năng trả về một giải pháp trong các trường hợp cận biên, nơi optimsẽ không hội tụ, mặc dù điều đó có thể phụ thuộc vào vấn đề. Nó có một tính năng hay, nếu bạn cung cấp một hàm gradient rõ ràng, thực hiện kiểm tra số lượng các giá trị của nó tại giải pháp. Nếu các giá trị này không khớp với các giá trị thu được từ sự khác biệt về số, nlminbsẽ đưa ra cảnh báo; điều này giúp đảm bảo bạn không mắc lỗi trong việc chỉ định độ dốc (dễ thực hiện với khả năng phức tạp).

  • nlmchỉ sử dụng thuật toán Newton. Điều này có thể nhanh hơn các thuật toán khác theo nghĩa là cần ít lần lặp hơn để đạt được sự hội tụ, nhưng có nhược điểm riêng. Nó nhạy cảm hơn với hình dạng của khả năng, vì vậy nếu nó mạnh mẽ không theo phương pháp bậc hai, nó có thể chậm hơn hoặc bạn có thể hội tụ một giải pháp sai. Thuật toán Newton cũng sử dụng Hessian và tính toán có thể đủ chậm trong thực tế đến mức nó hủy bỏ mọi tốc độ lý thuyết.


17

Khi nào nên sử dụng và không sử dụng bất kỳ phương pháp tối đa hóa cụ thể nào phụ thuộc rất nhiều vào loại dữ liệu bạn có. nlmsẽ hoạt động tốt nếu bề mặt không đặc biệt "thô" và ở mọi nơi đều khác biệt. nlminbcung cấp một cách để hạn chế các giá trị tham số cho các hộp giới hạn cụ thể. optim, có lẽ là trình tối ưu hóa được sử dụng nhiều nhất, cung cấp một vài thói quen tối ưu hóa khác nhau; ví dụ, BFGS, L-BFGS-B và ủ mô phỏng (thông qua tùy chọn SANN), cái sau có thể hữu ích nếu bạn gặp vấn đề tối ưu hóa khó khăn. Ngoài ra còn có một số tối ưu hóa có sẵn trên CRAN. rgenoud, ví dụ, cung cấp một thuật toán di truyền để tối ưu hóa.DEoptimsử dụng một thói quen tối ưu hóa di truyền khác nhau. Các thuật toán di truyền có thể chậm hội tụ, nhưng thường được đảm bảo để hội tụ (kịp thời) ngay cả khi có sự không liên tục trong khả năng. Tôi không biết DEoptim, nhưng rgenoudđược thiết lập để sử dụng snowđể xử lý song song, điều này giúp ích phần nào.

Vì vậy, một câu trả lời có thể không thỏa đáng là bạn nên sử dụng nlmhoặc bất kỳ trình tối ưu hóa nào khác nếu nó hoạt động cho dữ liệu bạn có. Nếu bạn có khả năng cư xử đúng mực, bất kỳ thói quen nào được cung cấp bởi optimhoặc nlmsẽ cho bạn kết quả tương tự. Một số có thể nhanh hơn các số khác, có thể có hoặc không quan trọng, tùy thuộc vào kích thước của tập dữ liệu, v.v ... Về số lượng tham số mà các thói quen này có thể xử lý, tôi không biết, mặc dù có lẽ khá ít. Tất nhiên, bạn càng có nhiều tham số, bạn càng có nhiều khả năng gặp vấn đề với sự hội tụ.

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.