SVMの最適なメタパラメータを見つけるための高速な方法(グリッド検索よりも高速)


17

SVMモデルを使用して、大気汚染物質の短期予測を行っています。新しいモデルをトレーニングするには、SVMモデルに適切なメタパラメーターを見つける必要があります(C、ガンマなどを意味します)。

Libsvmのドキュメント(および私が読んだ他の多くの本)は、グリッド検索を使用してこれらのパラメーターを見つけることを提案しています。したがって、基本的に特定のセットからこれらのパラメーターの組み合わせごとにモデルをトレーニングし、最適なモデルを選択します。

最適な(または最適に近い)メタパラメーターを見つけるより良い方法はありますか?私にとっては、主に計算時間の問題です-この問題の1回のグリッド検索には約2時間かかります(最適化を行った後)。

グリッド検索の長所:

  • 簡単に並列化することができます-20個のCPUがある場合、20倍高速になり、他のメソッドの並列化は難しくなります
  • メタパラメータ空間の大部分をチェックするため、適切なソリューションがあればそれを見つけることができます。

回答:


10

グリッド検索の欠点は、ランタイムが各パラメーターのオプション数の積と同じくらい速く成長することです。

ここに質問に関連するアレックススモーラのブログのエントリがあります

引用はここにあります:

[...]データセットからランダムに1000ペア(x、x ')を選択し、そのようなすべてのペアの距離を計算し、中央値、0.1および0.9分位数を取得します。ここで、これら3つの数値のいずれかを逆数にするためにλを選択します。少しの相互検証で、3つのうちどれが最適かを判断します。ほとんどの場合、これ以上検索する必要はありません。

私はこれを自分で試したことはありませんが、有望なようです。


これは質問とどのように関連していますか?問題は、SVMモデルに最適なパラメーターを(簡単な方法で)見つけることです。
ロロノアゾロ

2
@ロロノア・ゾロ:それが答えです。3 | Cs |の放射基底関数ベースのSVM(Smolaのブログ投稿のCおよび\ lambda)のパラメーターを見つける方法を説明しています。| \ gammas || Cs |とは対照的な時間 グリッド検索の場合に行われるように。
carlosdc

私がヒューリスティックを理解していることを明確にするために、基本的には、SVMをトレーニングするためにデータセットから1000個のデータポイントをランダムに引き出し、.1、.9分位数および中央値の逆数を取得します適切なガンマの候補?
トマス

6

パラメーターのグリッドの基礎となる比較的滑らかな関数があると仮定すると、できることがいくつかあります。たとえば、単純なヒューリスティックの1つは、非常に粗いパラメーターのグリッドから開始し、次に、粗いグリッドの最適なパラメーター設定の周りに細かいグリッドを使用することです。

これは実際には非常にうまく機能する傾向がありますが、もちろん注意が必要です。まず、空間は必ずしも滑らかではなく、局所的な最適値が存在する可能性があるということです。粗いグリッドはこれらを完全に見落とす可能性があり、最終的に最適なソリューションではなくなる可能性があります。また、ホールドアウトセットに比較的少ないサンプルがある場合、同じスコア(エラーまたは使用しているメトリック)を与える多くのパラメーター設定がある場合があることに注意してください。これは、マルチクラス学習(たとえば、1対すべての方法を使用)を実行していて、ホールドアウトセットの各クラスからの例がわずかしかない場合、特に問題になる可能性があります。しかし、厄介な非線形最適化手法に頼ることなく、これはおそらく良い出発点として役立つでしょう。

ここに参考文献の素晴らしいセットがあります。過去に、カーネルの検査によって適切な範囲のカーネルハイパーパラメーターを合理的に推定できるアプローチを採用しました(たとえば、RBFカーネルの場合、カーネル値のヒストグラムが値の良好な広がりを与えることを確認し、 0または1に偏るのではなく、あまり労力をかけずに自動的にこれを行うことができます)、つまり、開始する前に範囲を絞り込むことができます。その後、正則化/容量パラメーターなどの他のパラメーターに検索を集中できます。ただし、これは事前に計算されたカーネルでのみ機能しますが、事前に計算されたカーネルを使用したくない場合は、ランダムなポイントのサブセットでこれを推定できますが、そのアプローチもうまくいくと思います。


5

パラメーターの検索にはシミュレーテッドアニーリングを使用します。

動作は、いくつかのパラメーターによって管理されます。

  • k はボルツマン定数です。
  • T_max 開始温度です。
  • T_min 終了しきい値です。
  • mu_Tμ)は温度をどれだけ下げるか(T->T/μ
  • i 各温度での反復回数
  • zはステップサイズです-あなたはそれが正確に何を意味するかを決定します。私はランダムに移動します old*(1±z)
  1. 開始点(パラメーター値のセット)を取得します。
  2. そのためのエネルギーを取得します(データにどの程度適合するか、カイ2乗値を使用します)。
  3. ランダムな方向を見てください(「一歩踏み出す」)。
    • エネルギーが現在のポイントよりも低い場合は、そこに移動します。
    • 高い場合は、確率でそこに移動しp = e^{-(E_{i+1} - E_i)/(kT)}ます。
  4. 時折低下、繰り返しT->T/μ、すべてのiあなたがヒットするまで反復をT_min

パラメーターを少し試してみてください。うまく動作するセットを見つけることができるはずです。

また、GNU Scientific Libraryにはシミュレーテッドアニーリングが含まれています。


4

誰かがここに興味を持っているなら、主題に関する私の考えのいくつかがあります:

  • @tdcが示唆したように、粗い/細かいグリッド検索を行っています。これにより、2つの問題が発生します。
    • ほとんどの場合、非常に異なるパラメーターを持つ適切なメタパラメーターセットのセットを取得します---これらのパラメーターが最適なソリューションであると解釈していますが、これらすべての良いパラメーターの近くにあるすべての細かいグリッドを確認する必要があります(それには多くの時間がかかります)、今のところ、ベットのメタパラメータセットの近傍のみをチェックします。
    • ほとんどの場合、精密な検索ではSVMのパフォーマンスは向上しません(これは、粗いグリッドから最高点の8分の1だけをチェックしているという事実による可能性があります。
  • ほとんどの計算時間は、良い結果をもたらさないメタパラメータセットに費やされるという挙動を観察しました。たとえば、ほとんどのメタパラメータセットは15秒未満で計算され(そのうちの15%はエラー率が最高)、15分かかります(これらのほとんどは、エラー率が100%を超えています)。したがって、グリッド検索を行うとき、計算に30秒以上かかるポイントをキルし、無限のエラーが発生したと想定します。
  • マルチプロセッシングを使用します(これは十分に単純です)

1

σ


リンクは無効です。参照しているヒューリスティックは何ですか?
Aalawlx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.