Ảnh hưởng của C trong SVM với kernel tuyến tính là gì?


134

Tôi hiện đang sử dụng một SVM với kernel tuyến tính để phân loại dữ liệu của mình. Không có lỗi trên tập huấn luyện. Tôi đã thử một vài giá trị cho tham số ( 10 - 5 , Mạnh , 10 2 ). Điều này đã không thay đổi lỗi trên bộ thử nghiệm.C105,,102

Bây giờ tôi tự hỏi: đây có phải là một lỗi gây ra bởi các ràng buộc ruby cho libsvmtôi đang sử dụng ( rb-libsvm ) hay đây là lý thuyết có thể giải thích được ?

Tham số có nên luôn thay đổi hiệu suất của trình phân loại không?C


|w|2+Cξi,

Câu trả lời:


136

Tham số C cho biết tối ưu hóa SVM bao nhiêu bạn muốn tránh phân loại sai mỗi ví dụ đào tạo. Đối với các giá trị lớn của C, việc tối ưu hóa sẽ chọn một siêu phẳng có biên độ nhỏ hơn nếu siêu phẳng đó thực hiện công việc tốt hơn là lấy tất cả các điểm đào tạo được phân loại chính xác. Ngược lại, một giá trị rất nhỏ của C sẽ khiến trình tối ưu hóa tìm kiếm một siêu phẳng tách biệt có biên lớn hơn, ngay cả khi siêu phẳng đó phân loại sai nhiều điểm hơn. Đối với các giá trị rất nhỏ của C, bạn nên lấy các ví dụ phân loại sai, thường là ngay cả khi dữ liệu đào tạo của bạn có thể phân tách tuyến tính.


1
OK, tôi hiểu rằng C xác định ảnh hưởng của việc phân loại sai đến hàm mục tiêu. Hàm mục tiêu là tổng của một thuật ngữ chính quy và tỷ lệ phân loại sai (xem en.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Khi tôi thay đổi C, điều này không có bất kỳ ảnh hưởng nào đến mức tối thiểu của hàm mục tiêu của tôi. Điều đó có nghĩa là thuật ngữ chính quy luôn rất nhỏ?
alfa

3
Tôi sẽ khuyên bạn nên thử phạm vi giá trị C rộng hơn, có thể là 10 ^ [- 5, ..., 5] hoặc nhiều hơn nếu tối ưu hóa nhanh trên tập dữ liệu của bạn, để xem bạn có nhận được thứ gì đó hợp lý hơn không. Cả lỗi đào tạo và giá trị của chi phí tối thiểu sẽ thay đổi khi C thay đổi. Ngoài ra, quy mô dữ liệu của bạn là cực đoan? Nói chung, tham số C tối ưu phải lớn hơn khi bạn thu nhỏ dữ liệu của mình và ngược lại, vì vậy nếu bạn có các giá trị rất nhỏ cho các tính năng, hãy đảm bảo bao gồm các giá trị rất lớn cho các giá trị C có thể. Nếu không có điều nào ở trên giúp được, tôi đoán vấn đề nằm ở các ràng buộc của ruby
Marc Shivers

3
thay đổi độ chính xác cân bằng từ 0,5 (chỉ đoán) thành 0,86 không có vẻ như là một ảnh hưởng cận biên đối với tôi. Sẽ là một ý tưởng tốt khi điều tra một lưới các giá trị tốt hơn cho C như Marc gợi ý, nhưng kết quả bạn đưa ra dường như là hành vi khá bình thường. Người ta có thể mong đợi lỗi sẽ quay trở lại một lần nữa vì C có xu hướng vô cùng do quá khớp, nhưng điều đó dường như không có vấn đề gì trong trường hợp này. Lưu ý rằng nếu bạn thực sự quan tâm đến lỗi cân bằng và tập huấn luyện của bạn không có tỷ lệ phân chia 50:50, thì bạn có thể có kết quả tốt hơn ...
Dikran Marsupial

2
... bằng cách sử dụng các giá trị khác nhau của C cho các mẫu thuộc về các lớp dương và âm (tương đương với việc lấy mẫu lại dữ liệu để thay đổi tỷ lệ các mẫu thuộc về mỗi lớp).
Dikran Marsupial

2
Tôi nghĩ rằng có thể một khi bạn đạt được C = 10 ^ 0 thì SVM đã phân loại chính xác tất cả dữ liệu huấn luyện và không có vectơ hỗ trợ nào bị ràng buộc (alpha bằng C) trong trường hợp đó làm cho C lớn hơn không ảnh hưởng đến giải pháp.
Dikran Marsupial

152

Trong một SVM, bạn đang tìm kiếm hai thứ: một siêu phẳng có lề tối thiểu lớn nhất và một siêu phẳng phân tách chính xác càng nhiều trường hợp càng tốt. Vấn đề là bạn sẽ không thể có được cả hai thứ. Tham số c xác định mức độ mong muốn của bạn là tuyệt vời như thế nào. Tôi đã rút ra một ví dụ nhỏ dưới đây để minh họa điều này. Ở bên trái, bạn có một c thấp cung cấp cho bạn một lề tối thiểu khá lớn (màu tím). Tuy nhiên, điều này đòi hỏi chúng ta bỏ qua vòng tròn màu xanh ngoại lệ mà chúng ta đã không phân loại đúng. Bên phải bạn có một c cao. Bây giờ bạn sẽ không bỏ qua ngoại lệ và do đó kết thúc với một lề nhỏ hơn nhiều.

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

Vì vậy, trong số các phân loại là tốt nhất? Điều đó phụ thuộc vào dữ liệu trong tương lai mà bạn dự đoán sẽ trông như thế nào và thường thì bạn không biết điều đó. Nếu dữ liệu trong tương lai trông như thế này:

c lớn là tốt nhất sau đó phân loại đã học bằng cách sử dụng giá trị c lớn là tốt nhất.

Mặt khác, nếu dữ liệu trong tương lai trông như thế này:

thấp c là tốt nhất sau đó phân loại đã học bằng cách sử dụng giá trị c thấp là tốt nhất.

Tùy thuộc vào tập dữ liệu của bạn, việc thay đổi c có thể hoặc không thể tạo ra một siêu phẳng khác nhau. Nếu nó không tạo ra một siêu phẳng khác nhau, điều đó không có nghĩa là phân loại của bạn sẽ đưa ra các lớp học khác nhau cho các dữ liệu cụ thể bạn đã sử dụng nó để phân loại. Weka là một công cụ tốt để trực quan hóa dữ liệu và chơi xung quanh với các cài đặt khác nhau cho một SVM. Nó có thể giúp bạn có được ý tưởng tốt hơn về cách dữ liệu của bạn trông như thế nào và tại sao thay đổi giá trị c không thay đổi lỗi phân loại. Nói chung, có ít trường hợp đào tạo và nhiều thuộc tính giúp cho việc phân tách dữ liệu tuyến tính dễ dàng hơn. Ngoài ra, thực tế là bạn đang đánh giá dữ liệu đào tạo của mình và không phải dữ liệu mới chưa thấy giúp việc phân tách dễ dàng hơn.

Những loại dữ liệu bạn đang cố gắng học một mô hình từ? Bao nhiêu dữ liệu? Chúng ta có thể nhìn thấy nó?


4
Tôi đã không chạm vào dữ liệu trong hơn 3 năm nay. Nó rất cao và ồn ào và tôi không được phép xuất bản nó. Câu hỏi đã được trả lời nhưng tôi nghĩ rằng hình dung của bạn rất tốt và trực quan.
alfa

tuyệt vời. Bạn có giải thích như vậy cho giá trị gama không?
MonsterMMORPG

2
Tham số gamma được sử dụng cho hàm nhân Gaussian. Các chức năng hạt nhân có thể được coi là một cách hiệu quả để chuyển đổi các tính năng ban đầu của bạn sang một không gian khác, trong đó một siêu phẳng tách biệt trong không gian tính năng mới không phải là tuyến tính trong không gian tính năng ban đầu. Chẳng hạn, vị trí hai chiều của một điểm dữ liệu trong không gian tính năng ban đầu có thể được sử dụng để tính toán một tính năng mới biểu thị khoảng cách đến một số điểm đánh dấu trên bản đồ. Với tính năng mới này, một bộ phân loại phi tuyến tính (trong không gian ban đầu) có thể được tạo ra mà ranh giới quyết định tạo thành một vòng tròn xung quanh điểm đánh dấu
Kent Munthe Caspersen

@KentMuntheCaspersen không phải là lời giải thích của bạn về C không đúng? Nó trái ngược với những gì nó nói trong cuốn sách "Giới thiệu về học tập thống kê".
dirifde

2
@dirifde bạn có thể trích dẫn từ cuốn sách những gì chính xác khác với lời giải thích của tôi? Tôi luôn nghĩ về c là chi phí phân loại sai (dễ nhớ bởi c trong phân loại). Theo cách đó, c cao hơn có nghĩa là chi phí phân loại sai cao, dẫn đến thuật toán cố gắng tách hoàn toàn tất cả các điểm dữ liệu. Với các ngoại lệ, điều này không phải lúc nào cũng có thể hoặc sẽ không luôn dẫn đến một kết quả chung tốt, đó là một lý do tốt để hạ / giới thiệu c.
Kent Munthe Caspersen

26

C về cơ bản là một tham số chính quy, điều khiển sự đánh đổi giữa việc đạt được một lỗi thấp trên dữ liệu huấn luyện và giảm thiểu định mức của các trọng số. Nó không phù hợp với tham số sườn trong hồi quy sườn (trên thực tế trong thực tế có rất ít sự khác biệt về hiệu suất hoặc lý thuyết giữa các SVM tuyến tính và hồi quy sườn, vì vậy tôi thường sử dụng hồi quy sườn sau - hoặc nhân nếu có nhiều thuộc tính hơn quan sát).

Điều chỉnh C chính xác là một bước quan trọng trong thực tiễn tốt nhất trong việc sử dụng các SVM, vì giảm thiểu rủi ro cấu trúc (nguyên tắc chính đằng sau cách tiếp cận cơ bản) là bên được thực hiện thông qua điều chỉnh C. Tham số C thực thi giới hạn trên của định mức trọng số, có nghĩa là có một tập hợp các lớp giả thuyết được lồng vào nhau bởi C. Khi chúng ta tăng C, chúng ta tăng độ phức tạp của lớp giả thuyết (nếu chúng ta tăng nhẹ C, chúng ta vẫn có thể tạo thành tất cả các mô hình tuyến tính mà chúng ta có thể trước đây và cũng có một số điều mà chúng tôi không thể trước khi chúng tôi tăng giới hạn trên về định mức cho phép của các trọng số). Vì vậy, cũng như thực hiện SRM thông qua phân loại lề tối đa, nó cũng được thực hiện bằng cách giới hạn độ phức tạp của lớp giả thuyết thông qua việc kiểm soát C.

Đáng buồn là lý thuyết để xác định cách thiết lập C hiện tại không được phát triển tốt, vì vậy hầu hết mọi người có xu hướng sử dụng xác nhận chéo (nếu họ làm bất cứ điều gì).


OK, tôi nghĩ rằng tôi hiểu ý nghĩa của C bây giờ. :)
alfa

2
Nhưng nếu C là một tham số chính quy, tại sao mức C cao lại tăng quá mức, khi nói chung việc chính quy hóa được thực hiện để giảm thiểu quá mức, tức là bằng cách tạo ra một mô hình tổng quát hơn?
user1603472

2
C là một tham số chính quy, nhưng về cơ bản nó được gắn với thuật ngữ misfit dữ liệu (tổng của các biến chùng) chứ không phải là thuật ngữ chính quy (bit lề), do đó, giá trị C lớn hơn có nghĩa là ít chính quy hơn, hơn là nhiều hơn. Ngoài ra, bạn có thể xem biểu diễn thông thường của tham số rgularisation là 1 / C.
Dikran Marsupial

8

C là một tham số chính quy kiểm soát sự đánh đổi giữa việc đạt được một lỗi đào tạo thấp và một lỗi kiểm tra thấp đó là khả năng khái quát hóa trình phân loại của bạn để không nhìn thấy dữ liệu.

Xét hàm mục tiêu của một SVM tuyến tính: min | w | ^ 2 + C∑ξ. Nếu C của bạn quá lớn, thuật toán tối ưu hóa sẽ cố gắng giảm | w | càng nhiều càng tốt dẫn đến một siêu phẳng cố gắng phân loại chính xác từng ví dụ đào tạo. Làm điều này sẽ dẫn đến mất các thuộc tính tổng quát của phân loại. Mặt khác, nếu C của bạn quá nhỏ thì bạn cung cấp cho hàm mục tiêu của mình một sự tự do nhất định để tăng | w | rất nhiều, sẽ dẫn đến lỗi đào tạo lớn.

Những hình ảnh dưới đây có thể giúp bạn hình dung điều này. Phân loại SVM tuyến tính với C = 10000000Phân loại SVM tuyến tính với C = 0,001


Tôi không thực sự hiểu âm mưu của bạn. Bạn có thể giải thích nó được không?
alfa

1
@alfa: Ý định của tôi để hiển thị các ô là: 1) Nếu C quá lớn (lô 1), thì trình phân loại của bạn sẽ quá phù hợp, tức là nó sẽ cố gắng phân loại chính xác từng điểm dữ liệu đào tạo. Lô 1 cho thấy hầu hết các điểm đào tạo được phân loại chính xác. 2) Mặt khác, nếu C quá ít (lô 2), thì bộ phân loại của bạn sẽ phù hợp. Lô 2 cho thấy phân loại phù hợp dưới. Nó không phân tách các điểm vào các lớp tương ứng của chúng. Hi vọng điêu nay co ich.
Deerishi

Điều đó có nghĩa là trục x và y của bạn hiển thị hai tính năng khác nhau. Các nhãn "độ dài của tập dữ liệu" và "Tổng phương tiện" hơi khó hiểu?
alfa

Sẽ rất thú vị khi xem sự lựa chọn đúng đắn cho C giúp ích như thế nào trong cả hai trường hợp.
alfa

2
Tôi nghĩ không rõ ràng khi thấy rằng C = 10000000 là một lựa chọn tồi và tôi nghĩ rằng bộ dữ liệu không phải là một lựa chọn đúng để chứng minh điều đó. Có lẽ một tập dữ liệu chỉ có một vài ngoại lệ ở phía bên trái của siêu phẳng tách biệt sẽ tốt hơn?
alfa

4

Các câu trả lời ở trên là tuyệt vời. Sau khi đọc kỹ câu hỏi của bạn, tôi thấy có 2 sự thật quan trọng chúng ta có thể bỏ qua.

  1. Bạn đang sử dụng kernel tuyến tính
  2. Dữ liệu đào tạo của bạn có thể phân tách tuyến tính, vì "Không có lỗi trên tập huấn luyện".

Với 2 sự thật, nếu giá trị C thay đổi trong phạm vi hợp lý, siêu phẳng tối ưu sẽ chỉ thay đổi ngẫu nhiên một lượng nhỏ trong lề (khoảng cách được hình thành bởi các vectơ hỗ trợ).

Theo trực giác, giả sử lề trên dữ liệu huấn luyện là nhỏ và / hoặc không có điểm dữ liệu kiểm tra nào trong lề, việc dịch chuyển siêu phẳng tối ưu trong lề sẽ không ảnh hưởng đến lỗi phân loại của bộ kiểm tra.

Tuy nhiên, nếu bạn đặt C = 0, thì SVM sẽ bỏ qua các lỗi và chỉ cần cố gắng giảm thiểu tổng bình phương của các trọng số (w), có lẽ bạn có thể nhận được các kết quả khác nhau trên tập kiểm tra.


2

C Tham số được sử dụng để kiểm soát các ngoại lệ - C thấp ngụ ý chúng tôi đang cho phép nhiều ngoại lệ hơn, C cao ngụ ý chúng tôi đang cho phép ít ngoại lệ hơn.


1

C cao (chi phí) có nghĩa là chi phí phân loại sai được tăng lên. Điều này có nghĩa là một hạt nhân linh hoạt sẽ trở nên nguệch ngoạc hơn để tránh các quan sát phân loại sai trong tập huấn luyện.

Nếu hạt nhân là để nguệch ngoạc , mô hình sẽ không khái quát tốt khi dự đoán về dữ liệu mới.

Nếu hạt nhân là thẳng , mô hình sẽ không khái quát tốt khi dự đoán dữ liệu mới.

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.