SVM 기능 가중치를 어떻게 해석합니까?


42

선형 SVM을 피팅하여 주어진 가변 가중치를 해석하려고합니다.

(나는 scikit-learn 사용하고 있습니다 ) :

from sklearn import svm

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

svm.fit(features, labels)
svm.coef_

설명서에서 이러한 가중치를 계산하거나 해석하는 방법을 구체적으로 나타내는 내용을 찾을 수 없습니다.

체중의 표시는 수업과 관련이 있습니까?

답변:


55

일반적인 커널의 경우 SVM 가중치를 해석하기 어렵지만 선형 SVM의 경우 실제로 유용한 해석이 있습니다.

1) 선형 SVM에서 결과는 클래스를 최대한 분리하는 초평면이라는 것을 기억하십시오. 가중치는 하이퍼 플레인과 직교하는 벡터의 좌표를 제공하여이 하이퍼 플레인을 나타냅니다. 이들은 svm.coef_에 의해 주어진 계수입니다. 이 벡터를 w라고합시다.

2)이 벡터로 무엇을 할 수 있습니까? 방향은 예측 된 클래스를 제공하므로 벡터가있는 점의 내적을 취하면 어느 쪽인지 알 수 있습니다. 내적이 양수이면 양의 클래스에 속하고 음수이면 부정적인 클래스에 속합니다.

3) 마지막으로 각 기능의 중요성에 대해 배울 수도 있습니다. 이것은 내 자신의 해석이므로 먼저 자신을 설득하십시오. svm이 데이터를 분리하는 데 유용한 기능을 하나만 찾은 다음 초평면이 해당 축에 직교한다고 가정 해 봅시다. 따라서 다른 계수에 대한 계수의 절대 크기는 피처가 분리에 얼마나 중요한지 나타냅니다. 예를 들어, 첫 번째 좌표 만 분리에 사용되는 경우 w는 (x, 0) 형식이며 여기서 x는 0이 아닌 숫자이고 | x |> 0입니다.


3
포인트 3은 피처 (유전자) 선택을 위해 선형 SVM의 가중치 벡터를 사용하는 RFE 알고리즘의 기초입니다. Guyon axon.cs.byu.edu/Dan/778/papers/Feature%20Selection/guyon2.pdf
B_Miner

1
@B_Miner 감사합니다! 나는 이것을 스스로 생각했기 때문에 그것이 틀릴지도 모른다고 걱정했다. (나는 "순수한 CS"출신이 아니다)-그러나 나는 그것이 맞다고 생각한다.
Bitwise

1
직교 벡터가 두 클래스를 분리하는 경우 방향의 의미는 무엇입니까? 클래스 예측의 전체 확률에 대한 분리 초평면의 기여와 관련이 있습니까?
Austin Richardson

0

@B_Miner, Guyon의 다른 논문이 아니라이 논문 에 링크하려고했다고 생각합니다 .
ijoseph

11

문서는 꽤 완료된 다음 libsvm 라이브러리를 기반으로하는 멀티 클래스의 경우, SVC의 한 대 - 한 설정을 사용합니다. 선형 커널의 경우 n_classes * (n_classes - 1) / 2개별 선형 이진 모델이 각 가능한 클래스 쌍에 적합합니다. 따라서 함께 연결된 모든 기본 매개 변수의 집계 모양은 [n_classes * (n_classes - 1) / 2, n_features]( 속성 [n_classes * (n_classes - 1) / 2에서 + 차단 intercept_)입니다.

이진 선형 문제의 경우, coef_속성 에서 분리 초평면을 플로팅하는 것은이 예제 에서 수행됩니다 .

적합하지 않은 매개 변수의 의미에 대한 자세한 내용, 특히 비선형 커널 사례의 경우 설명서에 언급 된 수학적 공식 과 참고 자료를 살펴보십시오 .


1
Sklearn의 문서에서 coef_ 속성은 형태 = [n_class-1, n_features]입니다. 나는 그것이 실수라고 믿는다.
나오미

6

선형 SVM을 피팅하여 주어진 가변 가중치를 해석하려고합니다.

선형 SVM의 경우 가중치가 계산되는 방식과이를 해석하는 방법을 이해하는 좋은 방법은 매우 간단한 예에서 직접 계산을 수행하는 것입니다.

선형으로 분리 가능한 다음 데이터 세트를 고려하십시오.

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 단순

검사로 SVM 문제 해결

x2=x13wTx+b=0

w=[1,1]  b=3

SVM 이론에 따르면 여백의 "폭"은 로 주어집니다2||w||22=242

c

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

우리가 얻는 너비에 대한 방정식에 다시 연결

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

w=[14,14]  b=34


(나는 scikit-learn을 사용하고 있습니다)

자, 여기 수동 계산을 확인하는 코드가 있습니다.

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]
  • 지지 벡터의 지표 = [2 3]
  • 지원 벡터 = [[2. 3.] [6. -1.]]
  • 각 클래스에 대한 지원 벡터 수 = [1 1]
  • 결정 함수에서지지 벡터의 계수 = [[0.0625 0.0625]]

체중의 표시는 수업과 관련이 있습니까?

실제로, 가중치의 부호는 경계면의 방정식과 관련이 있습니다.

 

출처

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


5

기능 선택에 대한백서를 확인하십시오 . 저자는 특정 속성의 관련성을 결정하기위한 순위 메트릭으로 선형 커널 SVM에 의해 할당 된 가중치의 제곱 (속성)을 사용합니다. 이것은 microarray 데이터에서 유전자를 선택하는 가장 많이 인용되는 방법 중 하나입니다.


3

Guyon과 Elisseeff (2003)의 훌륭한 논문. 변수 및 기능 선택에 대한 소개 기계 학습 연구 저널 1157-1182는 다음과 같이 말합니다. "좋은 예측 변수를 작성하는 데 유용한 기능의 하위 집합 구성 및 선택은 잠재적으로 관련된 모든 변수를 찾거나 순위를 매기는 문제와 대조적입니다. 가장 관련성이 높은 변수를 선택하는 것은 일반적으로 예측 변수, 특히 변수가 중복되는 경우 예측 변수와는 달리 유용한 변수의 하위 집합은 중복되지만 관련성이있는 많은 변수를 제외 할 수 있습니다. "

따라서 로지스틱 회귀 분석, 선형 회귀 분석 및 선형 커널 SVM을 포함하여 선형 모델의 가중치를 일반적으로 해석 할 때는주의해야합니다. 입력 데이터가 정규화되지 않은 경우 SVM 가중치가 보상 될 수 있습니다. 특정 기능의 SVM 가중치는 다른 기능, 특히 기능이 서로 관련되어있는 경우에도 다릅니다. 개별 기능의 중요성을 결정하려면 기능 순위 지정 방법이 더 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.