線形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がデータを分離するのに有用な機能を1つだけ見つけ、超平面がその軸に直交するとします。したがって、他の係数と比較した係数の絶対サイズは、特徴が分離にとってどれほど重要かを示していると言えます。たとえば、最初の座標のみが分離に使用される場合、wは(x、0)の形式になります。ここで、xはゼロ以外の数で、| x |> 0です。
ドキュメントがかなり完了です:LIBSVMのライブラリに基づいてマルチクラスの場合、SVCのために1-VS-1の設定を使用しています。線形カーネルの場合、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 ])
取得した幅の式に戻る
(私は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 and Elisseeffによる素晴らしい論文(2003)。変数と機能の選択の概要。Journal of Machine Learning Research、1157-1182は、次のように述べています。特に変数が冗長である場合、予測変数。逆に、有用な変数のサブセットは、多くの冗長だが関連する変数を除外する場合があります。」
したがって、一般的に線形モデルの重みを解釈するときは注意が必要です(ロジスティック回帰、線形回帰、線形カーネルSVMを含む)。入力データが正規化されていない場合、SVMの重みが補正される場合があります。特定の機能のSVMの重みは、特に機能が相関している場合、他の機能にも依存します。個々の機能の重要性を判断するには、機能のランク付け方法の方が適しています。