Phương pháp nhanh để tìm siêu dữ liệu tốt nhất của SVM (nhanh hơn tìm kiếm lưới)


17

Tôi đang sử dụng các mô hình SVM để dự báo ngắn hạn các chất gây ô nhiễm không khí. Để đào tạo một mô hình mới, tôi cần tìm các siêu dữ liệu phù hợp cho một mô hình SVM (ý tôi là C, gamma, v.v.).

Tài liệu Libsvm (và nhiều cuốn sách khác tôi đã đọc) đề nghị sử dụng tìm kiếm dạng lưới để tìm các tham số này - vì vậy về cơ bản tôi huấn luyện mô hình cho từng kết hợp của các tham số này từ một bộ nhất định và chọn mô hình tốt nhất.

Có cách nào tốt hơn để tìm siêu dữ liệu tối ưu (hoặc gần tối ưu) không? Đối với tôi chủ yếu là vấn đề thời gian tính toán - một lần tìm kiếm lưới của vấn đề này mất khoảng hai giờ (sau khi tôi thực hiện một số tối ưu hóa).

Ưu điểm của tìm kiếm lưới:

  • Nó có thể dễ dàng song song - nếu bạn có 20 CPU, nó sẽ chạy nhanh hơn 20 lần, song song với các phương thức khác thì khó hơn
  • Bạn kiểm tra các phần lớn của không gian siêu dữ liệu, vì vậy nếu có một giải pháp tốt, bạn sẽ tìm thấy nó.

Câu trả lời:


10

Nhược điểm của tìm kiếm lưới là thời gian chạy phát triển nhanh như sản phẩm của số lượng tùy chọn cho mỗi tham số.

Đây là một mục trong blog của Alex Smola liên quan đến câu hỏi của bạn

Đây là một trích dẫn:

[...] Chọn, giả sử 1000 cặp (x, x ') một cách ngẫu nhiên từ tập dữ liệu của bạn, tính khoảng cách của tất cả các cặp như vậy và lấy số trung vị, số lượng 0,1 và 0,9. Bây giờ chọn λ là nghịch đảo của bất kỳ số nào trong ba số này. Với một chút giá trị chéo, bạn sẽ tìm ra một trong ba cách tốt nhất. Trong hầu hết các trường hợp, bạn sẽ không cần phải tìm kiếm thêm nữa.

Tôi đã không thử điều này bản thân mình, nhưng nó có vẻ như đầy hứa hẹn.


Làm thế nào điều này có liên quan đến câu hỏi? Câu hỏi là về việc tìm các tham số tốt nhất cho mô hình SVM (một cách nhanh chóng).
Roronoa Zoro

2
@Roronoa Zoro: và đó là câu trả lời. Đó là giải thích cách tìm các tham số cho các hàm dựa trên cơ sở radial (C và \ lambda trong bài đăng trên blog của Smola) trong 3 | Cs | thời gian trái ngược với | \ gammas | | Cs | Giống như nó được thực hiện trong trường hợp tìm kiếm lưới.
carlosdc

Chỉ cần làm rõ để đảm bảo rằng tôi hiểu về heuristic, về cơ bản, bạn chỉ cần rút ngẫu nhiên 1000 điểm dữ liệu từ bộ dữ liệu để đào tạo SVM, sau đó lấy nghịch đảo của các lượng tử và trung bình .1, .9 và những điểm đó có khả năng là tốt ứng cử viên cho một gamma phù hợp?
tomas

6

Nếu bạn đưa ra giả định rằng có một hàm tương đối trơn tru bên dưới lưới các tham số, thì có một số điều bạn có thể làm. Ví dụ, một heuristic đơn giản là bắt đầu với một lưới các tham số rất thô, và sau đó sử dụng một lưới tốt hơn xung quanh các cài đặt tham số tốt nhất từ ​​lưới thô.

Điều này có xu hướng hoạt động khá tốt trong thực tế, với sự cẩn thận tất nhiên. Đầu tiên là không gian không nhất thiết phải bằng phẳng và có thể có tối ưu cục bộ . Lưới thô có thể hoàn toàn bỏ lỡ những điều này và bạn có thể kết thúc với một giải pháp tối ưu phụ. Cũng lưu ý rằng nếu bạn có tương đối ít mẫu trong tập hợp giữ, thì bạn có thể có nhiều cài đặt tham số cho cùng số điểm (lỗi hoặc bất kỳ số liệu nào bạn đang sử dụng). Điều này có thể đặc biệt có vấn đề nếu bạn đang học nhiều lớp (ví dụ: sử dụng phương pháp một so với tất cả ) và bạn chỉ có một vài ví dụ từ mỗi lớp trong tập hợp giữ của bạn. Tuy nhiên, không dùng đến các kỹ thuật tối ưu phi tuyến khó chịu, điều này có thể đóng vai trò là điểm khởi đầu tốt.

Có một bộ tài liệu tham khảo tốt đẹp ở đây . Trước đây, tôi đã thực hiện phương pháp mà bạn có thể ước tính một cách hợp lý một phạm vi siêu đường kính hạt nhân tốt bằng cách kiểm tra hạt nhân (ví dụ trong trường hợp hạt nhân RBF, đảm bảo rằng biểu đồ của các giá trị hạt nhân cho giá trị lan truyền tốt, thay vì bị lệch về 0 hoặc 1 - và bạn cũng có thể thực hiện việc này một cách tự động mà không cần quá nhiều công việc), có nghĩa là bạn có thể thu hẹp phạm vi trước khi bắt đầu. Sau đó, bạn có thể tập trung tìm kiếm vào bất kỳ tham số nào khác, chẳng hạn như tham số chính quy / dung lượng. Tuy nhiên, tất nhiên điều này chỉ hoạt động với các hạt nhân được tính toán trước, mặc dù bạn có thể ước tính điều này trên một tập hợp con các điểm ngẫu nhiên nếu bạn không muốn sử dụng các hạt nhân được tính toán trước và tôi nghĩ cách tiếp cận đó cũng sẽ ổn.


5

Tôi sử dụng mô phỏng ủ cho các tham số tìm kiếm.

Hành vi được điều chỉnh bởi một vài tham số:

  • k là hằng số của Boltzmann.
  • T_max là nhiệt độ bắt đầu của bạn.
  • T_min là ngưỡng kết thúc của bạn.
  • mu_T( μ) là mức độ bạn hạ thấp nhiệt độ ( T->T/μ)
  • i là số lần lặp ở mỗi nhiệt độ
  • zlà một kích thước bước - bạn xác định chính xác điều đó có nghĩa là gì. Tôi ngẫu nhiên di chuyển trong old*(1±z).
  1. Lấy điểm bắt đầu (tập hợp các giá trị tham số).
  2. Lấy năng lượng cho nó (mức độ phù hợp với dữ liệu của bạn; tôi sử dụng các giá trị bình phương).
  3. Nhìn theo hướng ngẫu nhiên ("thực hiện một bước").
    • Nếu năng lượng thấp hơn điểm hiện tại của bạn, hãy di chuyển đến đó.
    • Nếu nó cao hơn, di chuyển đến đó với một xác suất p = e^{-(E_{i+1} - E_i)/(kT)}.
  4. Lặp lại, thỉnh thoảng hạ xuống T->T/μmỗi ilần lặp cho đến khi bạn nhấn T_min.

Chơi xung quanh với các tham số một chút và bạn sẽ có thể tìm thấy một bộ hoạt động tốt và nhanh chóng.

Thư viện Khoa học GNU bao gồm mô phỏng ủ.


4

Nếu bất cứ ai quan tâm ở đây là một số suy nghĩ của tôi về chủ đề này:

  • Như @tdc đề nghị tôi đang thực hiện tìm kiếm lưới thô / tốt. Điều này giới thiệu hai vấn đề:
    • Trong hầu hết các trường hợp, tôi sẽ nhận được tập hợp các tập hợp siêu tham số tốt có các tham số cực kỳ khác nhau --- tôi diễn giải theo cách này là các tham số này là giải pháp tối ưu, nhưng để chắc chắn tôi nên kiểm tra tất cả các lưới tốt gần tất cả các tham số tốt này ( điều đó sẽ mất rất nhiều thời gian), vì vậy bây giờ tôi chỉ kiểm tra vùng lân cận đặt cược siêu tham số.
    • Trong hầu hết các trường hợp, tìm kiếm tốt không làm tăng hiệu suất SVM (điều đó có thể là do thực tế là tôi chỉ kiểm tra hàng xóm điểm tốt nhất từ ​​lưới thô.
  • Tôi đã quan sát hành vi rằng hầu hết thời gian tính toán được dành cho các bộ siêu dữ liệu sẽ không mang lại kết quả tốt, ví dụ: hầu hết các bộ siêu tham số sẽ tính toán dưới 15 giây (và tốt nhất là chúng có tỷ lệ lỗi 15%) và một số mất 15 phút ( và hầu hết trong số này có tỷ lệ lỗi lớn hơn 100%). Vì vậy, khi thực hiện tìm kiếm lưới, tôi giết các điểm mất hơn 30 giây để tính toán và cho rằng chúng có lỗi vô hạn.
  • Tôi sử dụng đa xử lý (đủ đơn giản)

1

σ


Liên kết đã chết. Các heuristic bạn đã tham khảo là gì?
Aalawlx
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.