Mối quan hệ giữa số lượng Vectơ hỗ trợ và dữ liệu đào tạo và hiệu suất của bộ phân loại là gì? [đóng cửa]


77

Tôi đang sử dụng LibSVM để phân loại một số tài liệu. Các tài liệu có vẻ hơi khó phân loại khi kết quả cuối cùng cho thấy. Tuy nhiên, tôi đã nhận thấy điều gì đó trong khi đào tạo người mẫu của mình. và đó là: Nếu tập huấn luyện của tôi là ví dụ 1000, khoảng 800 trong số chúng được chọn làm vectơ hỗ trợ. Tôi đã xem xét khắp nơi để tìm xem đây là điều tốt hay điều xấu. Ý tôi là có mối quan hệ giữa số lượng vectơ hỗ trợ và hiệu suất của bộ phân loại không? Tôi đã đọc bài trước này nhưng tôi đang thực hiện lựa chọn tham số và tôi cũng chắc chắn rằng các thuộc tính trong các vectơ đặc trưng đều được sắp xếp theo thứ tự. Tôi chỉ cần biết mối quan hệ. Cảm ơn. ps: Tôi sử dụng một nhân tuyến tính.


Fwiw, RBF-SVM trên 50000 chữ số MNIST (784d) cho 14398 vectơ hỗ trợ, 29%.
denis

Câu trả lời:


162

Hỗ trợ Máy Vector là một vấn đề tối ưu hóa. Họ đang cố gắng tìm một siêu phẳng phân chia hai lớp với biên độ lớn nhất. Các vectơ hỗ trợ là các điểm nằm trong biên độ này. Dễ hiểu nhất nếu bạn xây dựng nó từ đơn giản đến phức tạp hơn.

Biên lợi nhuận cứng SVM tuyến tính

Trong tập huấn luyện mà dữ liệu được phân tách theo tuyến tính và bạn đang sử dụng một lề cứng (không được phép chùng), các vectơ hỗ trợ là các điểm nằm dọc theo các siêu phẳng hỗ trợ (các siêu phẳng song song với siêu phẳng phân chia ở các cạnh của lề )

SVM ký quỹ cứng

Tất cả các vectơ hỗ trợ nằm chính xác trên lề. Bất kể số thứ nguyên hoặc kích thước của tập dữ liệu, số lượng vectơ hỗ trợ có thể ít nhất là 2.

SVM tuyến tính lề mềm

Nhưng điều gì sẽ xảy ra nếu tập dữ liệu của chúng ta không thể phân tách tuyến tính? Chúng tôi giới thiệu SVM ký quỹ mềm. Chúng tôi không còn yêu cầu các điểm dữ liệu của chúng tôi nằm ngoài lề nữa, chúng tôi cho phép một số điểm trong số chúng đi lạc qua dòng vào lề. Chúng tôi sử dụng tham số slack C để kiểm soát điều này. (nu trong nu-SVM) Điều này mang lại cho chúng ta biên độ rộng hơn và sai số lớn hơn trên tập dữ liệu huấn luyện, nhưng cải thiện tính tổng quát hóa và / hoặc cho phép chúng ta tìm thấy sự phân tách tuyến tính của dữ liệu không thể phân tách theo tuyến tính.

SVM tuyến tính lề mềm

Bây giờ, số lượng vectơ hỗ trợ phụ thuộc vào mức độ chúng ta cho phép và sự phân phối dữ liệu. Nếu chúng ta cho phép một lượng lớn độ chùng, chúng ta sẽ có một số lượng lớn các vectơ hỗ trợ. Nếu chúng ta cho phép rất ít độ chùng, chúng ta sẽ có rất ít vectơ hỗ trợ. Độ chính xác phụ thuộc vào việc tìm đúng mức độ chùng cho dữ liệu được phân tích. Một số dữ liệu sẽ không thể có được mức độ chính xác cao, chúng ta chỉ đơn giản là phải tìm ra kết quả phù hợp nhất có thể.

SVM phi tuyến tính

Điều này đưa chúng ta đến SVM phi tuyến tính. Chúng tôi vẫn đang cố gắng phân chia dữ liệu một cách tuyến tính, nhưng chúng tôi hiện đang cố gắng làm điều đó trong một không gian chiều cao hơn. Điều này được thực hiện thông qua một hàm nhân, tất nhiên có một bộ tham số riêng. Khi chúng tôi dịch điều này trở lại không gian đối tượng địa lý ban đầu, kết quả là phi tuyến tính:

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

Bây giờ, số lượng vectơ hỗ trợ vẫn phụ thuộc vào mức độ chùng mà chúng tôi cho phép, nhưng nó cũng phụ thuộc vào độ phức tạp của mô hình của chúng tôi. Mỗi lần xoắn và lần lượt trong mô hình cuối cùng trong không gian đầu vào của chúng tôi yêu cầu một hoặc nhiều vectơ hỗ trợ để xác định. Cuối cùng, đầu ra của một SVM là các vectơ hỗ trợ và một alpha, về bản chất là xác định mức độ ảnh hưởng của vectơ hỗ trợ cụ thể đó đến quyết định cuối cùng.

Ở đây, độ chính xác phụ thuộc vào sự đánh đổi giữa một mô hình có độ phức tạp cao có thể quá phù hợp với dữ liệu và một biên độ lớn sẽ phân loại không chính xác một số dữ liệu đào tạo vì lợi ích tổng quát hóa tốt hơn. Số lượng vectơ hỗ trợ có thể từ rất ít đến từng điểm dữ liệu nếu bạn hoàn toàn phù hợp với dữ liệu của mình. Sự cân bằng này được kiểm soát thông qua C và thông qua việc lựa chọn hạt nhân và các tham số hạt nhân.

Tôi cho rằng khi bạn nói hiệu suất là bạn đang đề cập đến độ chính xác, nhưng tôi nghĩ tôi cũng sẽ nói đến hiệu suất về độ phức tạp tính toán. Để kiểm tra một điểm dữ liệu bằng mô hình SVM, bạn cần tính tích số chấm của mỗi vectơ hỗ trợ với điểm kiểm tra. Do đó, độ phức tạp tính toán của mô hình là tuyến tính trong số các vectơ hỗ trợ. Ít vectơ hỗ trợ hơn đồng nghĩa với việc phân loại điểm kiểm tra nhanh hơn.

Một tài nguyên tốt: Hướng dẫn về Máy vectơ hỗ trợ để nhận dạng mẫu


câu trả lời chính xác! nhưng liên kết không hoạt động nữa ... bạn vui lòng cập nhật nó được không?
Matteo


"Số lượng vectơ hỗ trợ có thể từ rất ít đến từng điểm dữ liệu đơn lẻ nếu bạn hoàn toàn phù hợp với dữ liệu của mình." Tóm lại, số lượng lớn các vectơ hỗ trợ là không tốt. Vậy câu hỏi đặt ra là 800 SV trong số 1000 mẫu đào tạo có “lớn” không?
Kanmani

Cảm ơn! ... Sau các liên kết và liên kết tôi đã tìm thấy lời giải thích hay này! :)
leandr0garcia,

29

800 trên 1000 về cơ bản cho bạn biết rằng SVM cần sử dụng hầu hết mọi mẫu đào tạo để mã hóa nhóm đào tạo. Về cơ bản, điều đó cho bạn biết rằng không có nhiều sự đều đặn trong dữ liệu của bạn.

Có vẻ như bạn gặp vấn đề lớn với không đủ dữ liệu đào tạo. Ngoài ra, có thể nghĩ về một số tính năng cụ thể giúp tách biệt dữ liệu này tốt hơn.


9
Tôi đã chọn đây là câu trả lời. Những câu trả lời rất lâu trước khi chỉ là không thích hợp giải thích C & P SVM
Valentin Heinitz

7
Tôi đồng ý. Mặc dù các câu trả lời khác đã cố gắng đưa ra một bản tóm tắt tốt, nhưng đây là câu trả lời phù hợp nhất với op Nếu phần SV lớn, nó chỉ ra khả năng ghi nhớ, không học và điều này có nghĩa là tổng quát hóa không tốt => lỗi ngoài mẫu (lỗi bộ kiểm tra) sẽ lớn.
Kai

12

Cả số lượng mẫusố lượng thuộc tính có thể ảnh hưởng đến số lượng vectơ hỗ trợ, làm cho mô hình phức tạp hơn. Tôi tin rằng bạn sử dụng các từ hoặc thậm chí ngram làm thuộc tính, vì vậy có khá nhiều thuộc tính trong số đó và các mô hình ngôn ngữ tự nhiên cũng rất phức tạp. Vì vậy, 800 vectơ hỗ trợ của 1000 mẫu dường như là ổn. (Cũng chú ý đến nhận xét của @ karenu về các thông số C / nu cũng có ảnh hưởng lớn đến số lượng SV).

Để có được trực giác về ý tưởng chính SVM thu hồi này. SVM hoạt động trong không gian tính năng đa chiều và cố gắng tìm siêu mặt phẳng phân tách tất cả các mẫu đã cho. Nếu bạn có nhiều mẫu và chỉ có 2 tính năng (2 thứ nguyên), dữ liệu và siêu phẳng có thể giống như sau:

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

Ở đây chỉ có 3 vectơ hỗ trợ, tất cả những vectơ khác đều đứng sau chúng và do đó không đóng bất kỳ vai trò nào. Lưu ý rằng các vectơ hỗ trợ này chỉ được xác định bởi 2 tọa độ.

Bây giờ hãy tưởng tượng rằng bạn có không gian 3 chiều và do đó các vectơ hỗ trợ được xác định bởi 3 tọa độ.

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

Điều này có nghĩa là có thêm một tham số (tọa độ) cần được điều chỉnh và việc điều chỉnh này có thể cần nhiều mẫu hơn để tìm siêu phẳng tối ưu. Nói cách khác, trong trường hợp xấu nhất, SVM chỉ tìm thấy 1 tọa độ siêu phẳng trên mỗi mẫu.

Khi dữ liệu có cấu trúc tốt (tức là giữ các mẫu khá tốt) thì chỉ cần một số vectơ hỗ trợ - tất cả các vectơ khác sẽ ở sau chúng. Nhưng văn bản là dữ liệu có cấu trúc rất, rất tệ. SVM làm hết sức mình, cố gắng lấy mẫu phù hợp nhất có thể, và do đó lấy vectơ hỗ trợ thậm chí nhiều mẫu hơn là giọt. Với số lượng mẫu ngày càng tăng, sự "bất thường" này giảm đi (nhiều mẫu không đáng kể xuất hiện hơn), nhưng số lượng vectơ hỗ trợ tuyệt đối vẫn rất cao.


Cảm ơn câu trả lời của bạn! bạn có bất kỳ tài liệu tham khảo cho những gì bạn đã đề cập trong đoạn cuối cùng? "Khi dữ liệu có cấu trúc tốt (tức là giữ các mẫu khá tốt) thì chỉ cần một số vectơ hỗ trợ - tất cả các vectơ khác sẽ ở sau chúng. Nhưng văn bản là dữ liệu có cấu trúc rất tệ. SVM làm hết sức mình, cố gắng phù hợp cũng như có thể, và do đó lấy vectơ hỗ trợ thậm chí nhiều mẫu hơn là giọt. thx
Hossein

Điều này không đúng - bạn có thể có tập dữ liệu 3 chiều chỉ có 2 vectơ hỗ trợ, nếu tập dữ liệu có thể phân tách tuyến tính và có phân phối phù hợp. Bạn cũng có thể có cùng một tập dữ liệu chính xác và kết thúc với 80% vectơ hỗ trợ. Tất cả phụ thuộc vào cách bạn thiết C. Trong thực tế, trong nu-svm bạn có thể kiểm soát số lượng vectơ hỗ trợ bằng cách thiết lập nu rất thấp (0,1)
karenu

@karenu: Tôi không nói rằng sự phát triển của số lượng thuộc tính luôn dẫn đến sự tăng trưởng của số lượng vectơ hỗ trợ, tôi chỉ nói rằng ngay cả với thông số C / nu cố định, số lượng vectơ hỗ trợ phụ thuộc vào số thứ nguyên đối tượng và số lượng mẫu . Và đối với dữ liệu văn bản, vốn có cấu trúc rất tệ về bản chất, số lượng vectơ hỗ trợ bên trong lề (SVM lề cứng không thể áp dụng cho phân loại văn bản ngay cả với các hạt nhân bậc cao) sẽ luôn cao.
ffriend 28/02/12

@Hossein: Ý tôi là khả năng phân tách tuyến tính. Hãy tưởng tượng nhiệm vụ phân loại thư rác. Nếu các tin nhắn rác của bạn hầu như luôn chứa các từ như "Viagra", "mua", "tiền" và các tin nhắn ham muốn của bạn chỉ chứa "nhà", "xin chào", "kính trọng", thì dữ liệu của bạn có cấu trúc tốt và có thể dễ dàng tách biệt trên các vectơ từ này. Tuy nhiên, trên thực tế, bạn có nhiều từ tốt và xấu và do đó dữ liệu của bạn không có bất kỳ mẫu rõ ràng nào. Nếu bạn có 3 từ spam dict và 3 từ ham, bạn nên phân loại thư như thế nào? Bạn cần nhiều tính năng hơn và đó là một trong những lý do tại sao SVM sử dụng nhiều vectơ hỗ trợ hơn.
ffriend

@ bạn bè Tôi thấy điều đó gây hiểu lầm. Nói tùy theo tôi, có vẻ như nếu tập dữ liệu của bạn tăng thì số sv của bạn sẽ tăng lên, bằng cách nào đó có mối quan hệ giữa # mẫu (hoặc # thứ nguyên) và # vectơ hỗ trợ. Có một mối quan hệ giữa độ phức tạp của mô hình và SVs và các tập dữ liệu lớn hơn với kích thước cao hơn có xu hướng có nhiều mô hình phức tạp hơn, nhưng kích thước của tập dữ liệu hoặc kích thước không trực tiếp quyết định số lượng SV.
karenu

7

Phân loại SVM là tuyến tính về số lượng vectơ hỗ trợ (SV). Số SV trong trường hợp xấu nhất bằng với số lượng mẫu đào tạo, nên 800/1000 chưa phải là trường hợp xấu nhất, nhưng nó vẫn khá tệ.

Sau đó, một lần nữa, 1000 tài liệu đào tạo là một tập hợp đào tạo nhỏ. Bạn nên kiểm tra những gì sẽ xảy ra khi bạn mở rộng quy mô tài liệu lên đến 10000 giây trở lên. Nếu mọi thứ không cải thiện, hãy xem xét sử dụng SVM tuyến tính, được đào tạo với LibLinear , để phân loại tài liệu; những quy mô đó tốt hơn nhiều (kích thước mô hình và thời gian phân loại là tuyến tính về số lượng tính năng và không phụ thuộc vào số lượng mẫu đào tạo).


Chỉ tò mò, điều gì khiến bạn cho rằng OP chưa sử dụng SVM tuyến tính? Tôi hẳn đã bỏ lỡ nó nếu đang sử dụng một số hạt nhân phi tuyến tính.
Chris A.

1
@ChrisA: vâng, tôi chỉ nói về tốc độ. Độ chính xác phải gần giống nhau khi sử dụng cùng một cài đặt (mặc dù cả LibSVM và LibLinear đều sử dụng một số ngẫu nhiên, vì vậy nó thậm chí không được đảm bảo là giống nhau trên nhiều lần chạy của cùng một thuật toán đào tạo).
Fred Foo

1
Chờ đã, sự ngẫu nhiên này có đưa nó đến bộ phân loại cuối cùng không? Tôi chưa xem mã cho cả hai thư viện, nhưng điều này vi phạm toàn bộ hiểu biết của tôi về việc đây là một vấn đề tối ưu hóa lồi với mức tối thiểu duy nhất.
Chris A.

1
Sự ngẫu nhiên này chỉ được thực hiện trong giai đoạn đào tạo như một sự tăng tốc. Vấn đề tối ưu hóa thực sự là lồi.
Fred Foo

1
Việc ngẫu nhiên hóa chỉ giúp nó hội tụ về giải pháp tối ưu nhanh hơn.
karenu

-1

Có một số nhầm lẫn giữa các nguồn. Ví dụ, trong sách giáo khoa ISLR 6th Ed, C được mô tả là "ngân sách vi phạm ranh giới", theo đó C cao hơn sẽ cho phép nhiều vi phạm biên hơn và nhiều vectơ hỗ trợ hơn. Nhưng trong triển khai svm trong R và python, tham số C được thực hiện là "hình phạt vi phạm", điều này ngược lại và sau đó bạn sẽ thấy rằng đối với các giá trị cao hơn của C thì có ít vectơ hỗ trợ hơn.

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.