libsvm の「grid.py」は、svm-train の「c」と「g」の 2 つのパラメーターのみを最適化しようとします。「grid.py」を拡張して、さまざまなパラメーターに対して「grid.py」を何度も実行して、他のパラメーター (「r」や「d」など) を最適化したいと考えました。いくつか質問
があります 1. "c" と "g" 以外のパラメーターを最適化できるスクリプトは既にありますか?
2.どのパラメータがより重要で、最大/最小範囲は何ですか。あるパラメータを変更/最適化すると、他のパラメータが自動的に最適化されることがあります。svm-train パラメーターの場合はそうですか?
1 に答える
私の知る限り、これを行うスクリプトはありませんが、なぜ grid.py を簡単に拡張できないのかわかりません。ただし、努力する価値はないと思います。
まず、カーネルを選択する必要があります。これはそれ自体がパラメーターです。各カーネルには異なるパラメーター セットがあり、パフォーマンスも異なるため、カーネルを比較するには、各カーネルのパラメーターを最適化する必要があります。
C、コスト パラメータは、SVM 自体に適用される全体的なパラメータです。他のパラメーターはすべてカーネル関数への入力です。C は、広いマージンと誤分類されるより多くのトレーニング ポイント (ただし、将来のデータにより適切に一般化される可能性があるモデル) と、トレーニング ポイントによりよく適合するがトレーニング データに過適合する可能性がある狭いマージンとの間のトレードオフを制御します。
一般に、最も広く使用されている 2 つのカーネルは、線形 (パラメーターを必要としない) と RBF カーネルです。
RBF カーネルはガンマ パラメーターを取ります。これは最適化する必要があり、その値はパフォーマンスに大きく影響します。
Polynomial カーネルを使用している場合、d がメイン パラメーターであり、それを最適化します。他のパラメータをデフォルトから変更することは意味がありません。ただし、そうすることでデータがより適切に適合するという数学的な理由がない限り、意味がありません。私の経験では、多項式カーネルは良い結果をもたらす可能性がありますが、RBF カーネルよりもわずかな増加であり、膨大な計算コストがかかります。
シグモイド カーネルと同様に、ガンマが主なパラメーターであり、これを最適化し、coef0 をデフォルトのままにします。これがデータにより適している理由を十分に理解していない限り。
したがって、grid.py が他のパラメーターを最適化しない理由は、ほとんどの場合、単純に不要であり、一般的にパフォーマンスの向上につながらないためです。2 番目の質問については、いいえ、一方を最適化すると他方が最適化されるということではありません。これらのパラメーターの最適値は、データセットに固有です。カーネル パラメーターの値を変更すると、C の最適値に影響します。これが、グリッド検索が推奨される理由です。これらの追加パラメータを検索に追加すると、所要時間が大幅に増加し、分類子のパフォーマンスが向上する可能性はほとんどありません。