Tại sao svm không tốt như cây quyết định trên cùng một dữ liệu?


8

Tôi chưa quen với học máy và cố gắng sử dụng scikit-learn (sklearn) để giải quyết vấn đề phân loại. Cả Quyết địnhSVM đều có thể đào tạo một trình phân loại cho vấn đề này.

Tôi sử dụng sklearn.ensemble.RandomForestClassifiersklearn.svm.SVCđể phù hợp với cùng một dữ liệu đào tạo (khoảng 500.000 mục với 50 tính năng cho mỗi mục). Các RandomForestClassifier đi ra với một phân loại trong khoảng một phút. Các SVC sử dụng nhiều hơn 24 giờ mà vẫn giữ chạy.

Tại sao SVC thực hiện không hiệu quả? Là dữ liệu được đặt quá lớn cho SVC ? Là SVC không phù hợp cho vấn đề như vậy?

Câu trả lời:


12

Các khả năng bao gồm việc sử dụng một hạt nhân không phù hợp (ví dụ như một hạt nhân tuyến tính cho một vấn đề phi tuyến tính), sự lựa chọn kém về nhân và các tham số siêu chuẩn hóa. Lựa chọn mô hình tốt (lựa chọn điều chỉnh nhân và siêu tham số là chìa khóa để có được hiệu suất tốt từ các SVM, chúng chỉ có thể được mong đợi sẽ cho kết quả tốt khi được sử dụng đúng cách).

Các SVM thường mất nhiều thời gian để đào tạo, điều này đặc biệt đúng khi lựa chọn kernel và tham số chính quy đặc biệt có nghĩa là hầu hết tất cả các dữ liệu kết thúc dưới dạng các vectơ hỗ trợ (độ thưa của SVM là một sản phẩm phụ tiện dụng, không có gì hơn).

Cuối cùng, các định lý bữa trưa miễn phí nói rằng không có ưu thế a-prori cho bất kỳ hệ thống phân loại nào so với các hệ thống phân loại khác, do đó, phân loại tốt nhất cho một nhiệm vụ cụ thể là phụ thuộc vào nhiệm vụ. Tuy nhiên, có nhiều lý thuyết hấp dẫn hơn cho SVM cho thấy nó có khả năng là sự lựa chọn tốt hơn so với nhiều cách tiếp cận khác cho nhiều vấn đề.


2
1. Làm thế nào để tôi biết liệu một vấn đề là tuyến tính hay không? Theo dữ liệu đào tạo? 2. Bạn có thể giới thiệu một số tài liệu về "làm thế nào để đưa ra lựa chọn tốt về kernel và điều chỉnh siêu tham số" không?
Java Xu

Nói chung, không thể biết chắc chắn rằng một vấn đề là tuyến tính, nhưng các phân loại phi tuyến tính luôn hoạt động không ổn định là một dấu hiệu rõ ràng rằng đó là một nhiệm vụ phi tuyến tính.
Dikran Marsupial

Để điều chỉnh các tham số kernel và chính quy, xác thực chéo là một cách tiếp cận hợp lý, sử dụng phương pháp tìm kiếm dạng lưới hoặc một số phương pháp tối ưu hóa số (tôi sử dụng Nelder Mead Simplex). Đối với các SVM, "giới hạn nhịp" cung cấp một xấp xỉ hữu ích cho lỗi xác thực chéo rời khỏi. Lưu ý bạn cần sử dụng một cái gì đó như xác thực chéo lồng nhau là bạn cũng muốn ước tính hiệu suất không thiên vị (xem câu trả lời cho các câu hỏi khác tôi đã đưa ra).
Dikran Marsupial

1
Điểm dữ liệu 500k là một vấn đề đủ lớn mà các SVM kernel có thể mất một thời gian để đào tạo. Thật đáng để thử tuyến tính, chỉ hỗ trợ trình phân loại tuyến tính nhưng chạy nhanh hơn nhiều hoặc trình phân loại SGD , có thể vẫn nhanh hơn. Nếu điều đó không hoạt động tốt, bạn có thể thử sử dụng xấp xỉ kernel , cho phép bạn sử dụng trình phân loại tuyến tính để xấp xỉ một phi tuyến. Điều đó nói rằng, rừng ngẫu nhiên cũng là một thuật toán tốt và có thể là tốt nhất cho dữ liệu của bạn.
Dougal

17

Cây quyết định và Rừng ngẫu nhiên thực sự là những phân loại cực kỳ tốt. Mặc dù SVM (Support Vector Machines) được coi là phức tạp hơn nhưng thực tế không có nghĩa là chúng sẽ hoạt động tốt hơn.

Bài viết "So sánh dựa trên kinh nghiệm các thuật toán học được giám sát" của Rich Caruana đã so sánh 10 phân loại nhị phân khác nhau, SVM, Mạng nơ-ron, KNN, Hồi quy logistic, Naive Bay, Rừng ngẫu nhiên, Cây quyết định, Cây quyết định được đóng gói, Cây quyết định được tăng cường Cây trên mười một bộ dữ liệu khác nhau và so sánh kết quả trên 8 số liệu hiệu suất khác nhau.

Họ phát hiện ra rằng cây quyết định Boosted xuất hiện đầu tiên với Rừng ngẫu nhiên thứ hai và sau đó là Cây quyết định đóng gói và sau đó là SVM

Kết quả cũng sẽ phụ thuộc vào số lượng lớp bạn thực sự phân loại.


5

"cho dù một vấn đề là tuyến tính hay không" Trong một vấn đề phân loại nhị phân, nếu tập dữ liệu có thể được phân tách bằng một siêu phẳng, thì đó là một vấn đề tuyến tính.

Nếu tập dữ liệu không thể phân tách tuyến tính, trong khi bạn thử phân loại tuyến tính để tìm siêu phẳng như vậy hoàn toàn không tồn tại, thuật toán có thể chạy mãi mãi.

Một đề xuất: Bạn có thể lấy mẫu một phần nhỏ dữ liệu của mình và thử các thuật toán này để xem liệu nó có hoạt động trong một tập dữ liệu nhỏ hay không. Sau đó tăng dữ liệu để kiểm tra khi nào những vấn đề này xảy ra.

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.