Triển khai SVM nhanh nhất


16

Thêm một câu hỏi chung. Tôi đang chạy một SVM rbf cho mô hình dự đoán. Tôi nghĩ rằng chương trình hiện tại của tôi chắc chắn cần một chút tăng tốc. Tôi sử dụng scikit learn với tìm kiếm từ lưới thô đến mịn + xác thực chéo.

Mỗi lần chạy SVM mất khoảng một phút, nhưng với tất cả các lần lặp lại, tôi vẫn thấy nó quá chậm. Giả sử cuối cùng tôi đa luồng phần xác thực chéo trên nhiều lõi, có khuyến nghị nào về việc tăng tốc chương trình của tôi không? Bất kỳ triển khai nhanh hơn của SVM? Tôi đã nghe nói về một số GPU SVM, nhưng chưa tìm hiểu sâu về nó. Bất kỳ người dùng và nó nhanh hơn?


1
SGDClassifier trong scikit-learn rất nhanh, nhưng đối với các SVM tuyến tính. Bạn có thể hỏi những người học scikit, đồng thời thêm thẻ scikit-learn.
denis

SVM hạt nhân phi tuyến tính sẽ bị chậm lại. Có lẽ bạn nên bắt đầu chơi với các mô hình tuyến tính (kiểm tra Vowpal Wợi) và sau đó chuyển sang phi tuyến tính. Bạn thậm chí có thể có được một số phi tuyến tính bằng cách tạo các tính năng phức tạp hơn với các mô hình tuyến tính. Các mô hình phi tuyến tính thường dẫn đến một số tăng hiệu suất gia tăng với chi phí tính toán lớn. Không có gì chống lại SVM hạt nhân phi tuyến tính mà chỉ cần ghi nhớ, từ quan điểm thực tế.
Vladislavs Dovgalecs

1
Bạn có thể tăng tốc bằng cách sử dụng các thư viện điều chỉnh chuyên dụng cho tìm kiếm siêu tham số, cách này hiệu quả hơn so với tìm kiếm dạng lưới (nghĩa là yêu cầu thử nghiệm các bộ siêu đường kính ít hơn nhiều). Ví dụ về các thư viện điều chỉnh bao gồm Optunity và Hyperopt.
Marc Claesen

Câu trả lời:


16

Thuật toán Sofia của Google chứa một triển khai SVM tuyến tính cực kỳ nhanh. Đây là một trong những SVM nhanh nhất hiện có, nhưng tôi nghĩ nó chỉ hỗ trợ phân loại và chỉ hỗ trợ các SVM tuyến tính.

Thậm chí còn có một gói R !


Liên kết của bạn hiện cho biết "gói 'RSofia' đã bị xóa khỏi kho CRAN." Bất cứ ý tưởng tại sao?
James Hirschorn 2/11/2016

@JamesHirschorn Nhà phát triển có thể đã ngừng duy trì nó. Bạn có thể cài đặt nó từ kho lưu trữ CRAN.
Zach

10

Tốc độ nhanh nhất bạn sẽ nhận được là chạy song song xác thực chéo. Cá nhân, tôi thích gói caret trong R , sử dụng foreach làm phụ trợ. Nó giúp dễ dàng xác thực việc xác thực chéo và tìm kiếm lưới ra nhiều lõi hoặc nhiều máy.

Caret có thể xử lý nhiều mô hình khác nhau, bao gồm các SVM rbf:

library(caret)
library(doMC)
registerDoMC()
model <-  train(Species ~ ., data = iris, method="svmRadial", 
    trControl=trainControl(method='cv', number=10))
> confusionMatrix(model)
Cross-Validated (10 fold) Confusion Matrix 

(entries are percentages of table totals)

            Reference
Prediction   setosa versicolor virginica
  setosa       32.4        0.0       0.0
  versicolor    0.0       30.9       2.0
  virginica     0.9        2.4      31.3

Lưu ý rằng thư viện doMC () chỉ có sẵn trên mac và linux, nó nên được chạy từ dòng lệnh, không phải từ GUI và nó phá vỡ bất kỳ mô hình nào từ Rweka. Cũng dễ dàng sử dụng các cụm MPI hoặc SNOW làm phụ trợ song song, không có những vấn đề này.


Cảm ơn Zach. Tôi tin rằng scikits cũng có cách chạy xác thực chéo song song đó là những gì tôi dự định làm. Không bao gồm điều đó, bất kỳ đề nghị khác về tăng tốc? Cảm ơn.
tomas

@danjeharry: xác nhận chéo song song thực sự là trái cây treo thấp ở đây, và tôi thực sự khuyên bạn nên khám phá điều đó trước tiên. Ngoài ra, tôi không biết nhiều về việc tăng tốc các SVM một cách cụ thể. Nếu bạn có thể tìm thấy một thuật toán SVM song song, đó cũng có thể là một ý tưởng tốt. Tập dữ liệu bạn đang sử dụng để đào tạo có bao nhiêu hàng / cột?
Zach

Cảm ơn Zach tôi sẽ xem xét cv song song. Tôi đang làm khoảng 650 thuộc tính và 5000 ví dụ.
tomas

4

Tôi nhận ra đây là một câu hỏi khá cũ, nhưng cũng có thể (tùy thuộc vào kích thước tập dữ liệu của bạn, nó có thể ít nhiều hiệu quả) để sử dụng các xấp xỉ chiều thấp của bản đồ tính năng hạt nhân và sau đó sử dụng nó trong một SVM tuyến tính. Xem http://scikit-learn.org/urdy/modules/kernel_approimumation.html


2

Hãy xem mô-đun đa xử lý của Python . Nó làm cho mọi thứ song song thực sự dễ dàng và hoàn hảo để xác nhận chéo.


2

R có gói rpusvm tăng tốc GPU tuyệt vời , phải mất ~ 20 giây để đào tạo trên 20K mẫu * 100 kích thước và tôi thấy rằng CPU không bao giờ bị quá tải bởi nó, vì vậy nó sử dụng GPU hiệu quả. Tuy nhiên, nó đòi hỏi GPU NVIDIA.


1

Thông báo: Đây là một phích cắm không biết xấu hổ.

Hãy xem xét DynaML một thư viện ML dựa trên Scala mà tôi đang làm việc. Tôi đã triển khai LS-SVM dựa trên Kernel (Least Squares Support Vector Machines) cùng với điều chỉnh Kernel tự động, sử dụng tìm kiếm dạng lưới hoặc Ghép mô phỏng ghép.

http://mandar2812.github.io/DynaML/

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.