140000の例と30の機能のデータセットがあり、それらに対してバイナリ分類(SVM、ロジスティック回帰、ランダムフォレストなど)のいくつかの分類器をトレーニングしています。
多くの場合、グリッド検索またはランダム検索を使用したデータセット全体のハイパーパラメーター調整は、時間的にコストがかかりすぎます。
私は次のテクニックを使い始めました
- データセットのサブサンプル
- 取得した分数を使用して、ハイパーパラメーターを調整します
- 取得したパラメーターを使用して、データセット全体を使用してモデルをトレーニングします
第2段階Iの使用に関するパラメータの各セットを評価することsklearn
のGridSearchCV
CV = 10で。私は第三ステップIの使用中に作成することを最終的なモデルを評価するためにsklearn
「S cross_val_predict
。その意味で、データの10%を残してモデルを評価し、残りのトレーニングを行い、10%で予測精度を10回繰り返し測定し、スコアの平均を取得します。
私が心配したのは、データセット全体のトレーニングから得られる予測精度が、最適なパラメーターセットのパラメーターを調整するときに得られる評価に非常に近いことです(テストされた各パラメーターセットは、平均10-フォールドクロス検証結果)。
ほとんどの場合、cross_val_predict
すべてのトレーニング例(データセット全体)を使用して測定した精度は、最適なパラメーターの評価が返す値をわずかに上回っています。
これをここで説明するために、一連のパラメーターの評価を行います(上記で説明したものよりも小さいデータセット上ですが、効果は同じです)
Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...
そしてここにcross_val_predict
、最高のパラメーターを使用してデータセット全体のトレーニングから得た平均スコア(から)があります
precision recall f1-score support
0 0.86 0.85 0.86 15417
1 0.86 0.87 0.87 16561
avg / total 0.86 0.86 0.86 31978
acc score: 0.863750078179
roc au score: 0.863370490059
[[13147 2270]
[ 2087 14474]]
ご覧のとおり、データセット全体のトレーニングにより結果が改善されます。また、適切に調整されていないモデル(C
およびにデフォルト値またはランダム値を使用するなどgamma
)により、予測精度が大幅に低下することも検証しました。
全体として、サブセットのハイパーパラメーターを調整することは理想的ではありませんが、長時間待つことなく比較的良い結果につながる可能性があると思います。たとえば、そのアプローチを使用する前optunity
に、データセット全体のハイパーパラメータを調整するためにパッケージを使用していました。この手順は完了するのに3〜5日かかり、結果は非常に良好な精度または非常に良好なリコールのいずれかであり、両方ではありませんでした。分類子が達成した)f1測定値は本当に低かった。それどころか、後者のアプローチを使用すると、数時間のトレーニングとより良いf1測定につながります。
私の懸念は:
分類の精度を制限しますか?サブセットのみを調整することで、データセットが提供できるすべての予測力を使用することを避けますか?このようなパフォーマンスの害が発生している場合、何らかの要因によって何らかの形で制限されていますか?