私はsklearn.svm.svcをscikit-learnから使用して、バイナリ分類を行います。確率予測を得るために、そのpredict_proba()関数を使用しています。 predict_proba()が内部的に確率を計算する方法を教えてもらえますか?sklearn.svm.svcのpredict_proba()関数はどのように内部的に動作しますか?
答えて
Scikit-learnはLibSVMを内部的に使用し、this note by the LibSVM authorsに記載されているようにPlatt scalingを使用して、クラス予測に加えて確率を生成するようにSVMを調整します。
プラットスケーリングは、まずパラメータ・ベクトルをとBようf(X)
が超平面(scikit学習者からのサンプルの符号付き距離である
P(y|X) = 1/(1 + exp(A * f(X) + B))
それを最適化する、いつものようにSVMを訓練する必要decision_function
方法)。この定義のlogistic sigmoidは、ロジスティック回帰とニューラルネットが決定関数を確率推定に変えるのに使用するのと同じ機能です。
B
パラメータ、「インターセプト」または「バイアス」など、あなたがそれを呼びたいと思うものは、このモデルからの確率推定に基づく予測がSVM決定関数から得られるものと矛盾することがありますf
。例えば。 f(X) = 10
とすると、X
の予測は肯定的です。 B = -9.9
とA = 1
の場合は、P(y|X) = .475
です。私は薄い空気からこれらの数字を引き出していますが、これは実際に起こりうることに気付いています。
効果的に、Plattスケーリングは、クロスエントロピー損失関数の下でSVMの出力の上に確率モデルを訓練する。このモデルがオーバーフィットするのを防ぐために、内部の5倍のクロスバリデーションを使用しています。つまり、probability=True
のトレーニングSVMは、バニラの確率的でないSVMよりもかなり高価です。
偉大な答え@larsmans。私は確率が分類の決定のための信頼尺度として解釈できるかどうか疑問に思っていますか?例えば。サンプルの正と負のクラスの確率が非常に近いことを意味します。 –
ありがとう@larsmans。私は実際にはもっと劇的なケースを見ました - 予測は1ですが、確率は0.45です。私はベイズ最適カットオフが正確に0.5であると思った。このような劇的なケースは、LibSVMの数値的な不安定性によっても説明できると思いますか? –
@MosesXu:これは調べる価値がありますが、私はLibSVMコードATMを掘り下げる時間がありません。一見すると一貫していないように見えますが、実際にはその確率を使用するのではなく、SVMの超平面であると私は思っています。 –
は、実際に私はAとBの値は、モデルファイル(probAとprobB)で見つけることができるここで
'double fApB = decision_value*A+B;
if (fApB >= 0)
return Math.exp(-fApB)/(1.0+Math.exp(-fApB));
else
return 1.0/(1+Math.exp(fApB)) ;'
彼らは確率に判定値を変換するには、このコードを使用することをわずかに異なる答えを見つけました。 確率を決定値に変換してヒンジ損失に変換する方法を提供します。
ln(0)= -200を使用します。
- 1. C++:関数の変数宣言は、内部的にどのように動作しますか?
- 2. エクスプローラ/ウィンドウのタスクバーはどのように内部的に動作しますか?
- 3. レコードの更新は内部的にどのように動作しますか?
- 4. ASP.NETルーティングはどのように内部的に動作しますか?
- 5. C#eventhandlerは内部的にどのように動作しますか?
- 6. Javaシリアル化は内部的にどのように動作しますか?
- 7. BULK INSERTはどのように内部的に動作しますか?
- 8. SQLiteカーソルはどのように内部的に動作しますか?
- 9. Linq DataContext.SubmitChanges()は内部的にどのように動作しますか?
- 10. "as"キーワードはどのように内部的に動作しますか?
- 11. printfは内部でどのように動作しますか?
- 12. 注釈は内部的にどのように動作するのですか
- 13. カサンドラとセカンダリインデックスは、内部でどのように動作していますか?
- 14. ラムダ式は内部でどのように動作しますか?
- 15. LogParserのようなプログラム/ライブラリを作成しようとしていますが、内部的にはどのように動作しますか?
- 16. Apache Crunch PTableのcollectValuesは内部的にどのように動作しますか
- 17. c#整数は内部的にどのように管理されますか?
- 18. リフレクションとリモート処理はどのように内部的に動作しますか?
- 19. Google App Engine User Serviceは内部的にどのように動作しますか?
- 20. cairngormフレームワークが内部でどのように動作するか
- 21. jQuery関数は内部でのみ動作します。
- 22. SQLAlchemyでは、どのように動的関係を作成しますか?
- 23. JavaScriptは内部的にnull値をどのように保存しますか?
- 24. JS Promiseは内部的にどのように機能しますか?
- 25. 可変スワップは内部的にどのように機能しますか?
- 26. ホット展開は内部的にどのように機能しますか?
- 27. 倹約は内部的にどのように機能しますか?
- 28. Pythonはリストを内部的にどのように保存しますか?
- 29. fgetsは内部的にどのように機能しますか?
- 30. 依存関係/添付プロパティは内部的にどのように動作し、値はどこに格納されますか?
これはSOです - プログラミングについてですが、コードを怖がらないでください。 – danodonovan