Bạn có thể giải thích sự khác biệt giữa SVC và linearSVC trong scikit-learn không?


19

Gần đây tôi đã bắt đầu học cách làm việc sklearnvà vừa bắt gặp kết quả đặc biệt này.

Tôi đã sử dụng digitsbộ dữ liệu có sẵn sklearnđể thử các mô hình và phương pháp ước tính khác nhau.

Khi tôi đã thử nghiệm một mô hình Support Vector Machine trên các dữ liệu, tôi phát hiện ra có hai lớp khác nhau trong sklearnphân loại SVM: SVCLinearSVC, nơi những ứng dụng cũ một đối-một cách tiếp cận và sử dụng khác một chống-phần còn lại cách tiếp cận.

Tôi không biết ảnh hưởng gì đến kết quả, vì vậy tôi đã thử cả hai. Tôi đã thực hiện ước tính theo kiểu Monte Carlo khi tôi chạy cả hai mô hình 500 lần, mỗi lần chia mẫu ngẫu nhiên thành đào tạo 60% và kiểm tra 40% và tính toán lỗi dự đoán trên bộ kiểm tra.

Công cụ ước tính SVC thông thường tạo ra biểu đồ lỗi sau: Tỷ lệ lỗi SVC Trong khi công cụ ước tính SVC tuyến tính tạo ra biểu đồ sau: Tỷ lệ lỗi tuyến tính SVC

Điều gì có thể giải thích cho một sự khác biệt rõ ràng như vậy? Tại sao mô hình tuyến tính có độ chính xác cao hơn hầu hết thời gian?

Và, có liên quan, điều gì có thể gây ra sự phân cực rõ rệt trong kết quả? Độ chính xác gần bằng 1 hoặc độ chính xác gần bằng 0, không có gì ở giữa.

Để so sánh, phân loại cây quyết định tạo ra tỷ lệ lỗi phân phối bình thường hơn nhiều với độ chính xác khoảng 0,85.


Tôi cho rằng tài liệu tìm hiểu scikit không làm nổi bật sự khác biệt? Bạn đã kiểm tra chưa?
Rohit

1. Hạt nhân nào bạn đã sử dụng trong SVC? cài đặt mặc định = "rbf"? 2. Một đối một và một chống lại tất cả là những cách tiếp cận khác nhau
kpb

các tài liệu là hơi thưa thớt / mơ hồ về chủ đề này. Nó đề cập đến sự khác biệt giữa một đấu một và một đấu với phần còn lại, và rằng SVS tuyến tính làSimilar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
metjush

Đối với SVC thông thường, tôi đã sử dụng kernel mặc định. Tôi biết 1v1 và 1vR là những cách tiếp cận khác nhau, nhưng tôi đoán đó là những gì tôi muốn biết - tại sao chúng tạo ra kết quả khác nhau như vậy? Đây có phải là lựa chọn hạt nhân hoặc cách tiếp cận khác nhau để phân loại nhiều loại?
metjush

Câu trả lời:


23

Một SVM thông thường với các giá trị mặc định sử dụng hàm cơ sở xuyên tâm làm hạt nhân SVM. Về cơ bản, đây là một hạt nhân Gaussian hay còn gọi là đường cong hình chuông. Có nghĩa là vùng đất không có người giữa các lớp khác nhau được tạo bằng hàm Gaussian. Tuyến tính-SVM sử dụng hạt nhân tuyến tính cho hàm cơ sở, vì vậy bạn có thể nghĩ đây là hàm hình ^. Nó ít điều chỉnh hơn và về cơ bản chỉ là một phép nội suy tuyến tính.

Mọi người đang đặt câu hỏi này vì bạn không cung cấp nhiều thông tin, nhưng nhìn sâu vào những gì bạn đã đăng ... điều này đánh vào một số khía cạnh cơ bản của việc thực sự hiểu các chi tiết về sai lệch và sai lệch và sự khác biệt giữa tuyến tính và phi tuyến các hàm cơ bản trong SVM.

Kiểm tra hình ảnh này mô tả bốn khu vực có độ lệch cao và thấp và phương sai cao và thấp. Rõ ràng vị trí tốt nhất là phương sai thấp và độ lệch thấp.

phi tiêu hình ảnh sai lệch

Đầu tiên cho phép đánh giá phương sai -

Bây giờ hãy xem âm mưu của bạn: nhập mô tả hình ảnh ở đây

Hàm cơ sở phi tuyến có phương sai cao hơn. Xem làm thế nào nó ồn hơn hạt nhân tuyến tính! Hạt nhân tuyến tính có phương sai thấp hơn. Xem thế nào là bớt ồn ào!

Bây giờ hãy đánh giá sự thiên vị -

Hạt nhân nào chính xác hơn? Chúng tôi có thể thêm các lỗi mà bạn cung cấp. Hạt nhân phi tuyến có tổng sai số ~ 550 + 325 = ~ 875. Hạt nhân tuyến tính có sai số ~ 690 + ~ 50 = ~ 740. Vì vậy, hạt nhân tuyến tính dường như làm tốt hơn về tổng thể, nhưng chúng khá gần nhau về tổng thể. Đây là những điều có được khó khăn!

Để tất cả chúng cùng nhau

Xem cách nhân tuyến tính thực hiện công việc kém trên 1 và công việc thực sự tuyệt vời trên 0. Điều này là khá mất cân bằng. Khi hạt nhân phi tuyến cân bằng hơn. Có vẻ như điểm ngọt ngào có thể là tạo ra một mô hình cân bằng không có phương sai cao như vậy. Làm thế nào để chúng ta kiểm soát phương sai cao? Bingo - chính quy. Chúng ta có thể thêm chính quy vào mô hình phi tuyến và có thể chúng ta sẽ thấy kết quả tốt hơn nhiều. Đây là tham số C trong scikit learn SVMs, bạn sẽ muốn tăng từ mặc định. Chúng tôi cũng có thể chơi với tham số gamma. Gamma kiểm soát độ rộng của Gaussian. Có thể thử tăng một chút để có kết quả ít ồn hơn, ví dụ như vùng đất không có đàn ông lớn hơn giữa các lớp.

Hi vọng điêu nay co ich!


Tham số C cần được giảm từ mặc định không tăng.
Hamdi

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.