DAY 29

13514 ワード

クロス検証


ホットアウトクロス検証


:1回のトレーニング/検証/テストグループ学習の方法
何か問題がありますか?
1.十分なデータがあれば、問題はありません.しかし、十分なデータがないと問題になります
2.検証セットのサイズが十分でなく、パーセンテージを縮小した場合、予測パフォーマンスの推定値が正しくありません.

モデルの選択

  • 私たちはどのような学習モードを使って問題を解決すべきですか?
  • で使用されるスーパーパラメータはどれですか?
  • データが大きくない場合、選択された問題を解決する方法としてクロス検証があります.
  • テーブル列データはクロス検証
  • に適合しない.

    k-fold cross-validation(CV)



    データをk個の集合に等分し,k個の集合ではk−1個の部分集合を用いて訓練し,残りの部分集合をテストデータとして検証する必要がある.
  • 例)3倍CV-データを3等分化し、検証(1/3)とトレーニングセット(2/3)を合計3回変更し、検証
  • K決定ドメインは異なるが、通常は5から10の間で決定(default=5)
  • from sklearn.model_selection import cross_val_score
    scores = cross_val_score(pipe, X_train, y_train, cv=k, 
                      scoring='f1')
    print(f'f1 for {k} folds:', scores)   # K 만큼 score 나옴     
    scores.mean()
    scores.std() 
    分類、回帰、クラスタなどにより得点が異なります
  • 回帰の場合、負(負)評価指標(例えばneg−mae)として使用される指標もある.
    モデルスコアを表示するには、次のリンクを使用します.
    The scoring parameter
  • 画像ソース

    TargetEncoder


    カテゴリ値をターゲットの他の属性の平均値で置き換えるカテゴリ変数エンコーダ.
  • 例)「Lotshape」プロパティでは、Regという名前の値が、Reg、すなわち
  • ではなく、あるプロパティの平均値を算出する.
    from category_encoders import TargetEncoder
    encoder = TargetEncoder(min_samples_leaf=1, smoothing=1000)
    df['Animal Encoded'] = encoder.fit_transform(df['Animal'], df['Target'])

    特長


  • これは、通常、データセット全体のターゲット確率と混合して使用され、より小さな値の分布を減少させる.

  • ターゲットを使用して新しいプロパティを作成するため、ターゲット符号化に検証およびテストデータを含めることは、ターゲット漏洩(target expersion)の形式です.

  • ただし、訓練データセットのみから目標符号化を学習し、他の(検証、テスト)データセットに適用する
    (+)データセット次元を追加しないので、単純で高速な符号化->を符号化の最初の試みとして使用できます
    (-)ターゲットの分布に応じて変化しやすいため、厳密な検証が必要
  • TargetEncoderについて


    Animal符号化
    1.Animalのデータをグループ化し、0、1発生回数を計算する
  • 例)catは5回発生し,1回は3回,0回は2回であった
  • 2.目標1の発生確率を計算する
  • 例)cat,5例中1例に2回出現し0.4
  • これでコードを確認できます.

    正式な書類
    リファレンス
    リファレンス

    ちょうパラメータちょうせい

  • 最適化プロセス
  • モデルを調整し、トレーニングデータを使用してより良いパフォーマンスを得る
  • の一般化は、最初に見たデータにおける学習モデルの性能を記述する.
  • カーブの検証(カーブの検証)


    :スーパーパラメータの精度変化を示す
  • y軸:スコア/x軸:スーパーパラメータ図
  • の間でkickrunを用いて種々のスーパーパラメータ値を訓練/検証し、訓練/検証スコア値の変化を決定した.

    正式な書類
    画像ソース

    最適なスーパーパラメータの組み合わせを探すツール



    GridSearchCVはDAY27

    Randomized Search CV


    :検証するスーパーパラメータの値範囲を指定した場合、すべての組合せを検証するためにランダムに値を指定します.
  • は、すべての組合せを試みるのではなく、各反復の任意の値に基づいて
  • を計算する.
  • n iter*クロス検証(cv)=Task数(多面時間)
  • rt =RandomForestClassifier()
    param = {
        'max_depth':range(1, 21),
        'max_leaf_nodes':range(5, 101, 5),
        'criterion':['entropy','gini']
    }
    n_iter = 80
    rs = RandomizedSearchCV(rt,
                            param_distributions=param,
                            n_iter=n_iter, 
                            cv=5, 
                            scoring='f1'
                            n_jobs=-1)
    rs.fit(X_train, y_train)
    print('최적 하이퍼파라미터: ',rs.best_params_)
    print('f1: ', rs.best_score_)

    best_estimator and refit


    bestestimatorは,CV終了後に見つかった最適パラメータを用いて,すべての学習データ(すべての訓練データ)を持って再学習(再コンパイル)する.
    from sklearn.metrics import f1_score
    pipe2= rs.best_estimator_
    y_pred = pipe2.predict(X_test)
    f1 = f1_score(y_test, y_pred)
    print(f'테스트세트 f1: ${f1:,.0f}')
    ソース

    調整時の各種事情

  • は、パイプラインのように異なる方法のスーパーパラメータを調整する必要がある.
    dists = {
          'targetencoder__smoothing':[2.,20.,50.,60.,100.,500.,1000.],
          'simpleimputer__strategy': ['mean', 'median'],
  • ランダム関数を使用して範囲
  • を指定します.
    dists = {
          'targetencoder__min_samples_leaf': randint(1, 10),
          'randomforestregressor__max_features': uniform(0, 1)
    ランダム関数を参照

    調整時に推奨されるスーパーパラメータ