Kiểm tra khả năng phân tách tuyến tính


20

Có cách nào để kiểm tra khả năng phân tách tuyến tính của bộ dữ liệu hai lớp ở kích thước cao không? Các vectơ đặc trưng của tôi dài 40.

Tôi biết tôi luôn có thể chạy thử nghiệm hồi quy logistic và xác định tỷ lệ cảnh báo so với tỷ lệ cảnh báo sai để kết luận liệu hai lớp có thể phân tách tuyến tính hay không nhưng sẽ tốt nếu biết liệu đã tồn tại một quy trình chuẩn để làm điều đó.


2
có một cái nhìn ở đây:
user603

Nó rất hữu ích để âm mưu separabiity: x = điểm phân loại sai bình thường-to-tách-máy bay, y = lỗ lũy kế (x). (Đối với một âm mưu mẫu, hãy thử một câu hỏi mới với các thẻ svm và trực quan hóa dữ liệu.)
denis

Còn vấn đề 3 lớp thì sao? Có phải tất cả các vấn đề của 3+ lớp là phi tuyến tính?
Rosy

Câu trả lời:


3

Vâng, máy vectơ hỗ trợ (SVM) có lẽ là những gì bạn đang tìm kiếm. Ví dụ, SVM với hạt nhân RBF tuyến tính, ánh xạ tính năng đến một không gian tối thiểu cao hơn và cố gắng phân tách các lớp bằng một siêu phẳng tuyến tính. Đây là một video SVM ngắn đẹp minh họa ý tưởng.

Bạn có thể bọc SVM bằng một phương thức tìm kiếm để lựa chọn tính năng (mô hình trình bao bọc) và thử xem liệu bất kỳ tính năng nào của bạn có thể tạo ra tuyến tính các lớp bạn có.

Có nhiều công cụ thú vị để sử dụng SVM bao gồm LIBSVM , MSVMPackScikit-learn SVM .


1
+1. Nó gần như thể Nik đang mô tả SVM, không nghe nói về họ. Trong R, bạn có thể sử dụng (một cách bí ẩn tên) e1071gói là svmvới kernel="linear"và xem xét các dự báo so với thực tế.
Wayne

1
Tôi biết về SVM. Chỉ là tôi không biết rằng tôi có thể sử dụng chúng để kiểm tra khả năng phân tách tuyến tính mà không thực sự phân loại từng mẫu.
Nik

4
@Wayne: Nik thực sự không yêu cầu SVM. Tôi giải thích trong câu trả lời của mình tại sao đây không phải là giải pháp cho vấn đề của anh ấy.
Raffael

2
Một " hạt nhân RBF tuyến tính " không tồn tại.
Marc Claesen

Tất nhiên ! Điều gì có nghĩa là một hạt nhân RBF ánh xạ dữ liệu vào một không gian có thể phân tách tuyến tính.
soufanom

17

Tính toán cách hiệu quả nhất để quyết định xem hai tập hợp điểm có thể phân tách tuyến tính hay không bằng cách áp dụng lập trình tuyến tính . GLTK hoàn hảo cho mục đích đó và khá nhiều ngôn ngữ highlevel cung cấp giao diện cho nó - R , Python, Octave, Julia, v.v.

Đối với câu trả lời gợi ý việc sử dụng SVM :

Sử dụng SVM là một giải pháp tối ưu phụ để xác minh khả năng phân tách tuyến tính vì hai lý do:

  1. Các SVM là các phân loại lề mềm. Điều đó có nghĩa là một hạt nhân tuyến tính SVM có thể giải quyết cho một mặt phẳng phân tách không tách biệt hoàn hảo mặc dù nó có thể thực sự có thể. Nếu sau đó bạn kiểm tra tỷ lệ lỗi thì nó sẽ không phải là 0 và bạn sẽ kết luận sai rằng hai bộ không tách rời tuyến tính. Vấn đề này có thể được giảm bớt bằng cách chọn một hệ số chi phí C rất cao - nhưng điều này xuất hiện với chi phí tính toán rất cao.

  2. Các SVM là các phân loại lề tối đa. Điều đó có nghĩa là thuật toán sẽ cố gắng tìm một mặt phẳng phân tách đang tách hai lớp trong khi cố gắng tránh xa cả hai càng xa càng tốt. Một lần nữa, đây là một tính năng làm tăng nỗ lực tính toán một cách không cần thiết vì nó tính toán một cái gì đó không liên quan để trả lời câu hỏi về phân tách tuyến tính.


Giả sử bạn có một tập hợp các điểm A và B:

nhập mô tả hình ảnh ở đây

Sau đó, bạn phải giảm thiểu 0 cho các điều kiện sau:

(A bên dưới là ma trận, không phải tập hợp các điểm từ phía trên)

nhập mô tả hình ảnh ở đây

"Tối thiểu hóa 0" một cách hiệu quả có nghĩa là bạn không cần thực sự tối ưu hóa một hàm mục tiêu bởi vì điều này là không cần thiết để tìm hiểu xem các bộ có thể phân tách tuyến tính hay không.

Cuối cùng ( nhập mô tả hình ảnh ở đây) là xác định mặt phẳng phân tách.


nhập mô tả hình ảnh ở đây

Trong trường hợp bạn quan tâm đến một ví dụ làm việc trong R hoặc các chi tiết toán học, thì hãy kiểm tra điều này .


3
Các SVM là các phân loại lề mềm ... ngoại trừ khi bạn sử dụng SVM lề cứng. Điều đó nói rằng, sử dụng SVM sẽ giống như bắn một con ruồi bằng đại bác.
Marc Claesen

điều đó đúng - mặc dù rất nhiều (hoặc có thể là phần lớn) của các thư viện SVM không cung cấp lựa chọn này
Raffael

2
C

0

Tuyến tính Perceptron được đảm bảo để tìm một giải pháp nếu có. Cách tiếp cận này không hiệu quả cho kích thước lớn. Tính toán cách hiệu quả nhất để quyết định xem hai tập hợp điểm có thể phân tách tuyến tính hay không bằng cách áp dụng lập trình tuyến tính như được đề cập bởi @Raffael.

Một giải pháp nhanh chóng sẽ là giải quyết một tri giác. Một mã với một ví dụ để giải quyết bằng Perceptron trong Matlab có ở đây

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.