GridSearchCv
(pythonのsklearnパッケージ)を使用してパラメータを選択しています。このモデルは、ロジスティック損失(すなわち、L1-およびL2-正規化ペナルティを伴うロジスティック回帰)を伴う弾性ネットです。私はSGDClassifier
を使ってこのモデルを実装しています。最適値の検索には、alpha
(正規化項を乗算する定数)とl1_ratio
(Elastic Net混合パラメータ)の2つのパラメータがあります。私のデータセットは〜300000行あります。次のようにモデルを初期化します。
sgd_ela = SGDClassifier(alpha=0.00001, fit_intercept=True, l1_ratio=0.1,loss='log', penalty='elasticnet')
と検索fxn。
GridSearchCV(estimator=sgd_ela, cv=8, param_grid=tune_para)
,
チューニングパラメータ:
tune_para = [{'l1_ratio': np.linspace(0.1,1,10).tolist(),'alpha':[0.00001, 0.0001, 0.001, 0.01, 0.1, 1]}]
です。なぜGridSearchCVは繰り返し実行で異なる最適化をしますか?
コードを実行すると、best_params
(alpha
と)が表示されます。しかし、の繰り返し実行では、私は最良のパラメータの同じセットを得ることはありません。私はなぜこれが事実であるかを知ることに興味があり、もし可能であれば、どうすればそれを克服することができますか?
ご回答いただきありがとうございます。最適値はクロスバリデーション(cv)を使って計算されるので、良いgenerelizationを持っているので、繰り返し実行しても同じ値を保持するはずです。あなたはランダムなシードが同じ結果を与えるように設定していますが、cvで最適な値が計算されているにもかかわらず、繰り返し実行されても同じ最適値が得られないのは興味深いです。 – labrynth
おそらく、類似のスコアを持つ複数の最小値があります。したがって、1つのスコアのわずかな増加は、全く異なるセットのパラメータに基づいて最良のモデルを作成する。 – simon
それはそうであるようです。私は、各繰り返し実行で目的関数の出力を最適値(すなわち 'best_score_')で比較することによってこれを検証しようとしています。好奇心が強い場合に備えて、私の調査結果をあなたに知らせます。もう一度おかげでサイモン! – labrynth