선형 SVM을 피팅하여 주어진 가변 가중치를 해석하려고합니다.
(나는 scikit-learn 사용하고 있습니다 ) :
from sklearn import svm
svm = svm.SVC(kernel='linear')
svm.fit(features, labels)
svm.coef_
설명서에서 이러한 가중치를 계산하거나 해석하는 방법을 구체적으로 나타내는 내용을 찾을 수 없습니다.
체중의 표시는 수업과 관련이 있습니까?
선형 SVM을 피팅하여 주어진 가변 가중치를 해석하려고합니다.
(나는 scikit-learn 사용하고 있습니다 ) :
from sklearn import svm
svm = svm.SVC(kernel='linear')
svm.fit(features, labels)
svm.coef_
설명서에서 이러한 가중치를 계산하거나 해석하는 방법을 구체적으로 나타내는 내용을 찾을 수 없습니다.
체중의 표시는 수업과 관련이 있습니까?
답변:
일반적인 커널의 경우 SVM 가중치를 해석하기 어렵지만 선형 SVM의 경우 실제로 유용한 해석이 있습니다.
1) 선형 SVM에서 결과는 클래스를 최대한 분리하는 초평면이라는 것을 기억하십시오. 가중치는 하이퍼 플레인과 직교하는 벡터의 좌표를 제공하여이 하이퍼 플레인을 나타냅니다. 이들은 svm.coef_에 의해 주어진 계수입니다. 이 벡터를 w라고합시다.
2)이 벡터로 무엇을 할 수 있습니까? 방향은 예측 된 클래스를 제공하므로 벡터가있는 점의 내적을 취하면 어느 쪽인지 알 수 있습니다. 내적이 양수이면 양의 클래스에 속하고 음수이면 부정적인 클래스에 속합니다.
3) 마지막으로 각 기능의 중요성에 대해 배울 수도 있습니다. 이것은 내 자신의 해석이므로 먼저 자신을 설득하십시오. svm이 데이터를 분리하는 데 유용한 기능을 하나만 찾은 다음 초평면이 해당 축에 직교한다고 가정 해 봅시다. 따라서 다른 계수에 대한 계수의 절대 크기는 피처가 분리에 얼마나 중요한지 나타냅니다. 예를 들어, 첫 번째 좌표 만 분리에 사용되는 경우 w는 (x, 0) 형식이며 여기서 x는 0이 아닌 숫자이고 | x |> 0입니다.
문서는 꽤 완료된 다음 libsvm 라이브러리를 기반으로하는 멀티 클래스의 경우, SVC의 한 대 - 한 설정을 사용합니다. 선형 커널의 경우 n_classes * (n_classes - 1) / 2
개별 선형 이진 모델이 각 가능한 클래스 쌍에 적합합니다. 따라서 함께 연결된 모든 기본 매개 변수의 집계 모양은 [n_classes * (n_classes - 1) / 2, n_features]
( 속성 [n_classes * (n_classes - 1) / 2
에서 + 차단 intercept_
)입니다.
이진 선형 문제의 경우, coef_
속성 에서 분리 초평면을 플로팅하는 것은이 예제 에서 수행됩니다 .
적합하지 않은 매개 변수의 의미에 대한 자세한 내용, 특히 비선형 커널 사례의 경우 설명서에 언급 된 수학적 공식 과 참고 자료를 살펴보십시오 .
선형 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 이론에 따르면 여백의 "폭"은 로 주어집니다
우리가 얻는 너비에 대한 방정식에 다시 연결
(나는 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]]
체중의 표시는 수업과 관련이 있습니까?
실제로, 가중치의 부호는 경계면의 방정식과 관련이 있습니다.
Guyon과 Elisseeff (2003)의 훌륭한 논문. 변수 및 기능 선택에 대한 소개 기계 학습 연구 저널 1157-1182는 다음과 같이 말합니다. "좋은 예측 변수를 작성하는 데 유용한 기능의 하위 집합 구성 및 선택은 잠재적으로 관련된 모든 변수를 찾거나 순위를 매기는 문제와 대조적입니다. 가장 관련성이 높은 변수를 선택하는 것은 일반적으로 예측 변수, 특히 변수가 중복되는 경우 예측 변수와는 달리 유용한 변수의 하위 집합은 중복되지만 관련성이있는 많은 변수를 제외 할 수 있습니다. "
따라서 로지스틱 회귀 분석, 선형 회귀 분석 및 선형 커널 SVM을 포함하여 선형 모델의 가중치를 일반적으로 해석 할 때는주의해야합니다. 입력 데이터가 정규화되지 않은 경우 SVM 가중치가 보상 될 수 있습니다. 특정 기능의 SVM 가중치는 다른 기능, 특히 기능이 서로 관련되어있는 경우에도 다릅니다. 개별 기능의 중요성을 결정하려면 기능 순위 지정 방법이 더 좋습니다.