私はscikit SVMを使用していますが、sample_weights
をカスタマイズして、分類子に渡してSVMをテストしたいと思います。通常の実装では、sample_weights
がデフォルト値の1
です。 (sample_weight
は、ユーザーがいくつかのサンプルに他のサンプルよりも大きな影響を及ぼすことを可能にします)。ワークフローは標準です - 各モデルをトレーニングサブセットに合わせて、保有する開発セットで各モデルをテストして、私のコードはこれです:私はclf
を再定義することで分類器を再初期化する必要があります使用するカーネルをテストしていたPythonのScikitクラシファイア `.fit`メソッドを呼び出すと何かが繰り返し実行されますか?
clf = svm.SVC(kernel = 'rbf', gamma = .001) ## initialize the model- i only do this once!
clf.fit(X_train, y_train) ## fit the model/do the optimization
accuracy[name + "_no_weights"] = clf.score(X_test, y_test) ## store results
clf.fit(X_train, y_train, sample_weight = sample_weight_test) ## fit the model/do the optimization w/ different regularization
accuracy[name + "_w_weights"] = clf.score(X_test, y_test) ## store results
気付いた場合。ポイントは、私は両方のケースで同じ分類子を訓練していますが、私は分類子を再初期化しません。したがって、2回目に.fit
というパラメータが既に初期化されている(ランダムではなく、以前のトレーニングから)ということがあります。これは、第2の方法が不公平な利点を有する可能性があることを意味し、最適化の出発点は良好な決定境界に非常に近いものであった。
これはどのように動作するのか、ご意見がありますか?
Ahh ..二次最適化問題には、ユニークなグローバルな分がありますか?あなたの声明の証拠でしょうか?また、素晴らしい答え。あなたは最高の場合のシナリオでは常にそれが問題だと言っています。 – travelingbones
@travelingbones svm-problemの解決策は必ずしも一意ではありませんが、ここでは重要ではありません。凸最適化問題であるという事実は、大域的最小値に近似する多くのアルゴリズムをもたらす。しかし、これは一部のアルゴリズム(既製のQPソルバ、Coordinate-descent、SMOなど)にのみ当てはまります。現在よく使用されているSGDベースの方法(巨大なデータによく使用される)は、いくつかのメタパラメータ(最も単純です:反復/エポックと学習率が不十分です)によっては失敗する可能性があります。 – sascha
@travelingbonesこのような証拠は、数値分析のためのあらゆる本で見つけることができます。凸関数には、(値の点で)ユニークなものがあります(厳密には、座標上のユニークなものも同様です)。 saschaが示唆していることとは反対に、これはsvmの問題にも当てはまります。しかし、数値的な近似と精度の欠如のために、実際の実装は実際のグローバルな解に収束するのではなく、単に「十分に近い」ものです(これは反復的な最適化にも当てはまります)。 – lejlot