2016-04-11 15 views
0

私は、分類問題にsklearn.svm.SVCを使用しています。私のデータを訓練した後、ROC曲線を生成するために、いくつかの値を通してバイアス(すなわち、通常の符号(w.x + b)SVM方程式の項b)をループしたいと思います。 (私はすでにクロスバリデーションを行い、ハイパーパラメータを選んだので、これはテスト用です)。トレーニング前、予測前にscikit SVMのバイアスパラメータbを変更する

.intercept_属性で試してみましたが、これは私が外出したものを変更しません.predict() ...バイアス用語を変更する代替方法はありますか?

私は潜在的にサポートベクトルを回復し、バイアスを変更して自分自身の.predict()関数を実装できますが、これはやや重いアプローチのようです。

答えて

2

私は2年前と全く同じ問題を抱えていました。残念ながら、唯一の解決策は、これを自分で行うことです。 "predict"を実装するのはかなり簡単ですが、Pythonでは1つのライナーです。残念ながら.intercept_は実際にはのコピーのインターセプト(内部ではlibsvmのもの)です。かなり混乱することは、まったく同じライブラリのLinearSVCでは真実ではなく、実際にはバイアスを交互に変えることができるということです(ただし、カーネルにアクセスすることはできません)。

もちろん、コンピューティングカーネルの価値のように深くする必要はありません。あなたはまだ "decision_function"へのアクセス権を持っていますが、最終的に内部に偏りがあります。意思決定機能から古いバイアスを取り除き、新しいバイアスを追加してサインを取るだけです。これは(バイアスの兆候まで):

def new_predict(clf, new_bias, X): 
    return np.sign(clf.decision_function(X) + clf.intercept_ - new_bias) 
関連する問題