1

LIBLINEAR の Java バージョンには、関数を最適化したい損失関数のタイプを選択できる「SolverType」と呼ばれるクラスがあります。たとえば、「SolverType.L2LOSS_SVM_DUAL」です。ユーザー定義の損失関数を定義する方法はありますか?

4

2 に答える 2

0

SVM は QP 問題として定式化されます。

minimize ||w|| w.r.t

y * (w'x) >= 1 for all (x, y) in the training dataset

これは問題の双対形式であり、目的はL2重みのノルムを最小化することwです。

目的を変更した場合 ||w|| その場合、それはもはや SVM ではありません。ただし、トレーニング例の重みは変更できます。ここでチュートリアルを見つけることができます:

http://scikit-learn.org/stable/modules/svm.html#unbalanced-problems

于 2015-01-20T03:46:05.677 に答える
0

短い答えはノーです。

「損失関数」は最適化問題を定義します。実際、このパラメーターは (特に) このモデルを次のように変更します。

  • 線形回帰
  • ロジスティック回帰
  • サポート ベクター マシン

最初の 2 つは非常に似ていますが、3 番目はそれを解決するためにまったく異なる機械が必要で、はるかに複雑な方法が必要です。特に、解けない(非常に複雑な手法で解ける)「線形モデル」のカテゴリに分類される、非常に恣意的な関数を定義できます。

一方、関数が非常に単純な場合、つまり. それは境界のない微分可能な関数です(最適化はパラメータ空間全体で実行されます)そして(導関数の分析形式を知っていると仮定して)それを任意の最急降下アルゴリズムの実装にプラグインできます(そのようなソルバーが利用可能です) .

于 2014-01-19T08:34:20.200 に答える