Làm thế nào để giải thích trọng lượng tính năng SVM?


42

Tôi đang cố gắng diễn giải các trọng số thay đổi được đưa ra bằng cách lắp một SVM tuyến tính.

(Tôi đang sử dụng scikit-learn ):

from sklearn import svm

svm = svm.SVC(kernel='linear')

svm.fit(features, labels)
svm.coef_

Tôi không thể tìm thấy bất cứ điều gì trong tài liệu nêu cụ thể cách tính các trọng số này.

Liệu dấu hiệu của trọng lượng có liên quan gì đến lớp học?

Câu trả lời:


55

Đối với một hạt nhân chung, rất khó để diễn giải các trọng số SVM, tuy nhiên đối với SVM tuyến tính thực sự có một cách giải thích hữu ích:

1) Hãy nhớ lại rằng trong SVM tuyến tính, kết quả là một siêu phẳng phân tách các lớp tốt nhất có thể. Các trọng số đại diện cho siêu phẳng này, bằng cách cung cấp cho bạn tọa độ của một vectơ trực giao với siêu phẳng - đây là các hệ số được đưa ra bởi svm.coef_. Hãy gọi vector này là w.

2) Chúng ta có thể làm gì với vector này? Hướng của nó mang lại cho chúng ta lớp dự đoán, vì vậy nếu bạn lấy sản phẩm chấm của bất kỳ điểm nào có vectơ, bạn có thể cho biết đó là mặt nào: nếu sản phẩm chấm là dương, thì nó thuộc về lớp dương, nếu nó âm thuộc về lớp phủ định.

3) Cuối cùng, bạn thậm chí có thể tìm hiểu điều gì đó về tầm quan trọng của từng tính năng. Đây là cách giải thích của riêng tôi để thuyết phục bản thân trước. Giả sử, Svm sẽ chỉ tìm thấy một tính năng hữu ích để phân tách dữ liệu, thì siêu phẳng sẽ trực giao với trục đó. Vì vậy, bạn có thể nói rằng kích thước tuyệt đối của hệ số so với các hệ số khác cho biết mức độ quan trọng của tính năng đối với sự phân tách. Ví dụ: nếu chỉ tọa độ đầu tiên được sử dụng để phân tách, w sẽ có dạng (x, 0) trong đó x là một số khác không và sau đó | x |> 0.


3
Điểm 3 là cơ sở cho thuật toán RFE sử dụng vectơ trọng số của lựa chọn SVM tuyến tính cho tính năng (gen): Xem Guyon axon.cs.byu.edu/Dan/778/ con / Feature% 20Selection / guyon2.pdf
B_Miner

1
@B_Miner cảm ơn! Tôi đã lo lắng rằng vì tôi tự nghĩ về điều này nên nó có thể sai (tôi không đến từ CS "thuần túy") - nhưng tôi đoán nó là chính xác.
Bitwise

1
Ý nghĩa của hướng của vectơ trực giao nếu nó tách cả hai lớp là gì? Liệu nó có liên quan gì đến sự đóng góp của siêu phẳng tách biệt với xác suất dự đoán chung của lớp không?
Austin Richardson

Để giải thích xem dấu hiệu của trọng số có liên quan đến lớp hay không (trong trường hợp tuyến tính) - nó phụ thuộc vào các tính năng. Ví dụ: nếu các tính năng dự đoán chỉ lấy các giá trị không âm ( ), thì các trọng số âm sẽ góp phần phân loại các điểm dữ liệu âm. 0
Kdawg

@B_Miner, tôi nghĩ bạn có ý định liên kết đến bài báo này chứ không phải bài khác của Guyon.
ijoseph

11

Các tài liệu là khá hoàn chỉnh: đối với trường hợp nhiều lớp, SVC mà là dựa trên các thư viện libsvm sử dụng các thiết lập one-vs-one. Trong trường hợp hạt nhân tuyến tính, n_classes * (n_classes - 1) / 2các mô hình nhị phân tuyến tính riêng lẻ được trang bị cho từng cặp lớp có thể. Do đó hình dạng tổng hợp của tất cả các tham số nguyên thủy được nối với nhau là [n_classes * (n_classes - 1) / 2, n_features](+ [n_classes * (n_classes - 1) / 2chặn trong intercept_thuộc tính).

Đối với bài toán tuyến tính nhị phân, việc vẽ siêu phẳng tách khỏi coef_thuộc tính được thực hiện trong ví dụ này .

Nếu bạn muốn biết chi tiết về ý nghĩa của các tham số được trang bị, đặc biệt đối với trường hợp nhân phi tuyến tính, hãy xem công thức toán học và các tham chiếu được đề cập trong tài liệu.


1
Trong tài liệu của Sklearn, thuộc tính coef_ có hình dạng = [n_group-1, n_features]. Tôi tin rằng đó là một sai lầm.
Naomi

6

Tôi đang cố gắng diễn giải các trọng số thay đổi được đưa ra bằng cách lắp một SVM tuyến tính.

Một cách tốt để hiểu cách tính trọng số và cách diễn giải chúng trong trường hợp SVM tuyến tính là thực hiện các phép tính bằng tay trên một ví dụ rất đơn giản.

Thí dụ

Hãy xem xét các tập dữ liệu sau đây có thể phân tách tuyến tính

import numpy as np
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])

SVM đơn giản

Giải quyết vấn đề SVM bằng cách kiểm tra

Bằng cách kiểm tra, chúng ta có thể thấy rằng đường biên phân tách các điểm có "lề" lớn nhất là đường . Vì các trọng số của SVM tỷ lệ thuận với phương trình của dòng quyết định này (siêu phẳng ở kích thước cao hơn) sử dụng nên lần đầu tiên đoán các tham số sẽ làx2=x13wTx+b=0

w=[1,1]  b=3

Lý thuyết SVM cho chúng ta biết rằng "chiều rộng" của lề được đưa ra bởi . Sử dụng đoán ở trên chúng ta sẽ có được một chiều rộng của . trong đó, bằng cách kiểm tra là không chính xác. Chiều rộng là2||w||22=242

Hãy nhớ rằng việc chia tỷ lệ ranh giới theo hệ số không làm thay đổi đường biên, do đó chúng ta có thể khái quát phương trình nhưc

cx1cx23c=0
w=[c,c]  b=3c

Cắm lại vào phương trình cho chiều rộng chúng ta nhận được

2||w||=4222c=42c=14

Do đó, các tham số (hoặc hệ số) trên thực tế là

w=[14,14]  b=34


(Tôi đang sử dụng scikit-learn)

Tôi cũng vậy, đây là một số mã để kiểm tra tính toán thủ công của chúng tôi

from sklearn.svm import SVC
clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y) 
print('w = ',clf.coef_)
print('b = ',clf.intercept_)
print('Indices of support vectors = ', clf.support_)
print('Support vectors = ', clf.support_vectors_)
print('Number of support vectors for each class = ', clf.n_support_)
print('Coefficients of the support vector in the decision function = ', np.abs(clf.dual_coef_))
  • w = [[0,25 -0,25]] b = [-0,75]
  • Chỉ số của vectơ hỗ trợ = [2 3]
  • Các vectơ hỗ trợ = [[2. 3.] [6. -1.]]
  • Số lượng vectơ hỗ trợ cho mỗi lớp = [1 1]
  • Các hệ số của vectơ hỗ trợ trong hàm quyết định = [[0,0625 0,0625]]

Liệu dấu hiệu của trọng lượng có liên quan gì đến lớp học?

Không thực sự, dấu của các trọng số có liên quan đến phương trình của mặt phẳng biên.

 

Nguồn

https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf


5

Kiểm tra giấy này về lựa chọn tính năng . Các tác giả sử dụng bình phương trọng số (của các thuộc tính) được gán bởi một hạt nhân tuyến tính SVM làm chỉ số xếp hạng để quyết định mức độ liên quan của một thuộc tính cụ thể. Đây là một trong những cách được trích dẫn cao để chọn gen từ dữ liệu microarray.


3

Một bài báo tuyệt vời của Guyon và Elisseeff (2003). Giới thiệu về lựa chọn biến và tính năng. Tạp chí nghiên cứu máy học, 1157-1182 nói: "Xây dựng và lựa chọn tập hợp các tính năng hữu ích để xây dựng một công cụ dự đoán tốt tương phản với vấn đề tìm hoặc xếp hạng tất cả các biến có liên quan. Việc chọn các biến có liên quan nhất thường là tối ưu để xây dựng dự đoán, đặc biệt nếu các biến là dự phòng. Ngược lại, một tập hợp con của các biến hữu ích có thể loại trừ nhiều biến dự phòng, nhưng có liên quan. "

Do đó, tôi khuyên bạn nên thận trọng khi diễn giải các trọng số của các mô hình tuyến tính nói chung (bao gồm hồi quy logistic, hồi quy tuyến tính và SVM hạt nhân tuyến tính). Các trọng số SVM có thể bù nếu dữ liệu đầu vào không được chuẩn hóa. Trọng lượng SVM cho một tính năng cụ thể cũng phụ thuộc vào các tính năng khác, đặc biệt nếu các tính năng này có tương quan. Để xác định tầm quan trọng của các tính năng riêng lẻ, các phương pháp xếp hạng tính năng là lựa chọn tốt 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.