Tôi có nên sử dụng Kernel Trick bất cứ khi nào có thể cho dữ liệu phi tuyến tính không?


13

Gần đây tôi đã biết về việc sử dụng thủ thuật Kernel, ánh xạ dữ liệu vào các không gian có chiều cao hơn trong nỗ lực tuyến tính hóa dữ liệu theo các chiều đó. Có trường hợp nào tôi nên tránh sử dụng kỹ thuật này? Có phải chỉ là vấn đề tìm đúng chức năng kernel?

Đối với dữ liệu tuyến tính, điều này tất nhiên là không hữu ích, nhưng đối với dữ liệu phi tuyến tính, điều này dường như luôn hữu ích. Sử dụng phân loại tuyến tính dễ dàng hơn nhiều so với phi tuyến tính về thời gian đào tạo và khả năng mở rộng.

Câu trả lời:


8

Đối với dữ liệu tuyến tính, điều này tất nhiên là không hữu ích, nhưng đối với dữ liệu phi tuyến tính, điều này dường như luôn hữu ích. Sử dụng phân loại tuyến tính dễ dàng hơn nhiều so với phi tuyến tính về thời gian đào tạo và khả năng mở rộng.

@BartoszKP đã giải thích lý do tại sao kernel trick hữu ích. Để giải quyết đầy đủ câu hỏi của bạn tuy nhiên tôi muốn chỉ ra rằng, kernel đó không phải là lựa chọn duy nhất để xử lý dữ liệu không phân tách tuyến tính.

Có ít nhất ba lựa chọn thay thế tốt, phổ biến để phân định mô hình:

  • Các phương thức dựa trên mạng trung tính, trong đó bạn thêm một (hoặc nhiều) đơn vị xử lý, có thể chuyển đổi dữ liệu của bạn thành trường hợp phân tách tuyến tính. Trong trường hợp đơn giản nhất, nó là một lớp dựa trên sigmoid, thêm phi tuyến tính vào quá trình. Sau khi được khởi tạo ngẫu nhiên, họ sẽ nhận được các bản cập nhật trong quá trình tối ưu hóa dựa trên độ dốc của lớp trên (thực tế giải quyết vấn đề tuyến tính).
  • Đặc biệt - các kỹ thuật học sâu có thể được sử dụng ở đây để chuẩn bị dữ liệu để phân loại tuyến tính hơn nữa. Nó rất giống với ý tưởng trước đó, nhưng ở đây trước tiên bạn huấn luyện các lớp xử lý của mình để tìm một điểm khởi đầu tốt để tinh chỉnh hơn nữa dựa trên việc đào tạo một số mô hình tuyến tính.
  • Các phép chiếu ngẫu nhiên - bạn có thể lấy mẫu các phép chiếu (phi tuyến tính) từ một số không gian được xác định trước và huấn luyện phân loại tuyến tính trên đầu chúng. Ý tưởng này được khai thác rất nhiều trong cái gọi là học máy cực đoan , trong đó các bộ giải tuyến tính rất hiệu quả được sử dụng để huấn luyện một bộ phân loại đơn giản trên các phép chiếu ngẫu nhiên và đạt được hiệu suất rất tốt (về các vấn đề phi tuyến tính trong cả phân loại và hồi quy, ví dụ như học cực đoan máy móc ).

Tóm lại - kernelization là một kỹ thuật phân định tuyệt vời và bạn có thể sử dụng nó, khi vấn đề không phải là tuyến tính, nhưng điều này không nên mù "nếu sau đó" thẩm định. Đây chỉ là một trong ít nhất một vài phương pháp thú vị, có thể dẫn đến kết quả khác nhau, tùy thuộc vào vấn đề và yêu cầu. Cụ thể, ELM có xu hướng tìm các giải pháp rất giống với các giải pháp được đưa ra bởi SVM đã được nhân hóa trong khi đồng thời có thể được đào tạo các hàng có cường độ nhanh hơn (vì vậy nó có quy mô tốt hơn nhiều so với các SVM được nhân)


10

Giá mà bạn phải trả cho Kernel Trick nói chung, đối với các phương thức tuyến tính, đang có giới hạn khái quát hóa tồi tệ hơn. Đối với mô hình tuyến tính, kích thước VC của nó cũng là tuyến tính theo số lượng kích thước (ví dụ: kích thước VC cho Perceptron là d + 1).

Bây giờ, nếu bạn sẽ thực hiện một phép biến đổi phi tuyến tính phức tạp thành không gian chiều cao, kích thước VC của bộ giả thuyết của bạn sẽ lớn hơn đáng kể, vì giờ đây nó tuyến tính về số lượng kích thước trong không gian chiều cao mới. Và với nó, sự khái quát hóa đi lên.

Support Vector Machines khai thác Kernel Trick theo cách hiệu quả nhất, bằng cách thực hiện hai điều:


1
"Cũng tuyến tính về số lượng trọng lượng" về kích thước không gian, không phải số lượng trọng lượng. Bạn có thể có phân loại tuyến tính được tham số hóa với bao nhiêu trọng lượng như bạn muốn, nhưng kích thước VC của nó vẫn là d + 1 (trong đó d là chiều không gian). "Kích thước VC cho các mô hình SVM có liên quan đến số lượng vectơ hỗ trợ" Làm thế nào chính xác kích thước VC được thực hiện với số lượng SV? Tôi biết về biên độ cứng bị ràng buộc, nhưng afaik trong trường hợp lề mềm không có mối quan hệ như vậy. Ngay cả trong giới hạn phức tạp của Radamacher, bạn sẽ không tìm thấy số lượng SV như một biến.
lejlot

Ngoài ra, "không liên quan đến không gian mục tiêu hạt nhân" lớn "như thế nào, bạn không mất bất cứ điều gì về mặt khái quát hóa" theo như tôi biết hoàn toàn sai. Không gian chiều cao sẽ dẫn đến mất khả năng khái quát hóa, ngay cả với mô hình được chính quy hóa mạnh mẽ như SVM.
lejlot

1
@lejlot Cảm ơn, đã sửa hai lỗi đầu tiên. Tôi cần một chút thời gian để liên quan đến hai nhận xét cuối cùng của bạn - Tôi sẽ cố gắng cải thiện câu trả lời và cung cấp một số nguồn, sau khi tôi kiểm tra lại thông tin của mình :)
BartoszKP

1
Bây giờ nó gần như đúng, nhưng lý do cho giả định, kích thước của không gian hạt nhân không liên quan là gì? Lấy bất kỳ tập dữ liệu nào, chạy một SVM với hạt nhân RBF và C-> inf và bạn sẽ điều chỉnh quá mức. Nó không đơn giản như vậy. Số lượng kích thước trong không gian tính năng có liên quan , nhưng nó có thể được điều khiển bằng C (như giới hạn trên của số nhân độ trễ). Cụ thể - kích thước VC cho SVM với RBF là vô cùng và ràng buộc khái quát hóa (của LinkedInnik) là vô ích (Radamacher có thể hoạt động nhưng đây là câu chuyện hoàn toàn khác).
lejlot

1
@lejlot Tôi đã đưa ra một tài liệu tham khảo khác - họ cung cấp một ràng buộc cho trường hợp lề mềm một cách rõ ràng và nó không phụ thuộc vào số lượng kích thước.
BartoszKP

6

Tôi sẽ cố gắng cung cấp một câu trả lời phi kỹ thuật cho câu hỏi của bạn.

Thật vậy, tuyến tính nên được ưu tiên và nên là lựa chọn đầu tiên vì những lý do bạn đề cập, thời gian đào tạo, khả năng mở rộng, cộng với việc dễ dàng giải thích mô hình cuối cùng, lựa chọn làm việc trên nguyên tắc hoặc kép, khả năng chịu đựng quá mức, v.v.

Nếu mô hình tuyến tính không mang lại hiệu suất thỏa đáng, thì bạn có thể thử các giải pháp phi tuyến tính. Một số đánh đổi để xem xét bao gồm:

  • sự lựa chọn của hạt nhân. Điều này không rõ ràng, thông thường bạn cần kiểm tra các tùy chọn khác nhau
  • có nguy cơ quá mức tập huấn luyện. Trên thực tế nó là khá dễ dàng để overfit nếu bạn muốn. Để tránh bị quá mức, bạn cần có khung đánh giá mạnh hơn (bạn cần đo lường phương sai / độ ổn định của hiệu suất trên dữ liệu chưa xem) và bạn cần có đủ dữ liệu để có thể thực hiện lựa chọn mô hình phù hợp
  • bạn làm việc trên kép và do đó bạn không thể diễn giải mô hình cuối cùng, nghĩa là bạn không thể cho rằng tính năng X quan trọng hơn tính năng Y, v.v.
  • thời gian đào tạo được tăng lên với khối lượng dữ liệu (ít hơn với số lượng tính năng kể từ khi nó ở dạng kép)

Đó là một cái nhìn sâu sắc xen kẽ về "làm việc với kép" dẫn đến việc không thể yêu cầu các tính năng quan trọng. Bạn sẽ có một số tài liệu tham khảo để giải thích thêm?
javadba
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.