Lv2. 予測実測値補間法とランダムForestroデータ


#前処理


1.実測値平均で置換する(fillna({mean})


:実測値を各フィーチャーの平均値に置き換えます.
: df.Fillna(「コラム名」:int(df[コラム名].mean)},inplace=True)
:欠落した測定値を持つフィーチャーの表示
print(train.isnull().sum())

:実測値平均で置換
train.fillna({'hour_bef_temperature':int(train['hour_bef_temperature'].mean())}, inplace=True)
train.fillna({'hour_bef_precipitation':int(train['hour_bef_precipitation'].mean())}, inplace=True)
train.fillna({'hour_bef_windspeed':int(train['hour_bef_windspeed'].mean())}, inplace=True)
train.fillna({'hour_bef_humidity':int(train['hour_bef_humidity'].mean())}, inplace=True)
train.fillna({'hour_bef_visibility':int(train['hour_bef_visibility'].mean())}, inplace=True)
train.fillna({'hour_bef_ozone':int(train['hour_bef_ozone'].mean())}, inplace=True)
train.fillna({'hour_bef_pm10':int(train['hour_bef_pm10'].mean())}, inplace=True)
train.fillna({'hour_bef_pm2.5':int(train['hour_bef_pm2.5'].mean())}, inplace=True)

2.欠測値補間法で代用(補間()


:補間置換メジャーを使用してフィーチャーの情報性を強調
:Lv 2に関わる大菱データについては,気象情報が特徴であり,データの順序は時間順である.
:したがって、測定値を前の行(前の時間)と次の行(後の時間)の平均値に補間するのは合理的です.
:Python pandasの補間()メソッドで実現
: df.interpolate(inplace=True)
:切欠き補間法で置換
train.interpolate(inplace=True)

#モデリング#モデリング#


1.ランダムツリーの概念、宣言


:ランダムツリーは、複数の決定ツリーを作成することによって予測パフォーマンスを平均的に向上させる方法です.
:組み立て(Ensemble)技法とも呼ばれます.
:指定した1つのデータから複数のランダム・データセットを抽出し、各データセットから複数のモデルを作成できます.
: from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
: sklearn.統合からRandomForestRegressorを呼び出し、宣言モデルのコードを作成します.
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()

2.評価尺度に基づいてランダム森林を学習する(標準=「mse」)


:ランダムforestモジュールのオプションのcriterionオプションにより、どの評価スケールを基準にトレーニングを行うかを決定できます.
:大菱試合の評価指標はRMSEです.
:RMSEはMSE評価指標の基礎であり、モデルを宣言する際にcriteria="mse"オプションを使用して実現することができる.
: model = RandomForestRegressor(criterion = 'mse')

:コードを作成してcountフィーチャー以外のX train dfとcountフィーチャーのみを持つY train dfを作成します.
X_train = train.drop(['count'], axis=1)
Y_train = train['count']
:PythonランダムForestに基づき、学習モデルが大会の評価指標(=RMSE)に適合することを宣言し、トレーニングモデルのコードを作成する
model = RandomForestRegressor(criterion = 'mse')
model.fit(X_train, Y_train)

#調整


1.ランダムforest変数の決定の重要性(特徴importionations)


:fit()でモデルを学習した後、フィーチャーimportionsプロパティ(attribute)を使用して変数の重要度を理解できます.
:変数の重要度は,予測変数を決定する際に,各特徴がどの程度の役割を果たすかの尺度である.
:変数の重要度が低い場合、このフィーチャーを削除すると、モデルのパフォーマンスが向上します.
: model.feature_importances__
:ランダム森林モデル予測変数の重要度を出力するコードを作成する
model.feature_importances_

2.変数の削除(drop()


:変数の重要度が低いフィーチャーを決定した後、フィーチャーを順次削除し、モデルを再訓練できます.
:idフィーチャーは予測に意味のないフィーチャーです.
:新しいダウンidとcountのX train 1トレーニングdfを生成します.
:予測を行う場合、testは3つの訓練と同じ特徴を持たなければならない.従って、同じ特徴のtest 1 dfが生成される.
:時間bef windspeedと時間bef pm 2.5フィーチャーに対して追加dropを実行し、上記の手順を繰り返し、合計3対のX trainセットとtestセットを生成します.
:各モデルの予測値をsubmissionに保存し、Leader Board比較スコアにコミットします.
:X trainから削除するフィーチャーについて、3つのX trainを数で作成します.
X_train_1 = train.drop(['count','id'], axis=1)
X_train_2 = train.drop(['count', 'id', 'hour_bef_windspeed'], axis=1)
X_train_3 = train.drop(['count', 'id', 'hour_bef_windspeed', 'hour_bef_pm2.5'], axis=1)
:シーケンスごとに同じフィーチャーのテストセットを作成する
test_1 = test.drop(['id'], axis=1)
test_2 = test.drop(['id', 'hour_bef_windspeed'], axis=1)
test_3 = test.drop(['id', 'hour_bef_windspeed', 'hour_bef_pm2.5'], axis=1)
:X trainごとにモデルトレーニングを行う
model_input_var1 = RandomForestRegressor(criterion = 'mse')
model_input_var1.fit(X_train_1, Y_train)
model_input_var2 = RandomForestRegressor(criterion = 'mse')
model_input_var2.fit(X_train_2, Y_train)
model_input_var3 = RandomForestRegressor(criterion = 'mse')
model_input_var3.fit(X_train_3, Y_train)
:各モデルを使用したテストセットの予測
y_pred_1 = model_input_var1.predict(test_1)
y_pred_2 = model_input_var2.predict(test_2)
y_pred_3 = model_input_var3.predict(test_3)
:各結果をsubmissionファイルとして保存
submission_1 = pd.read_csv('data/submission.csv')
submission_2 = pd.read_csv('data/submission.csv')
submission_3 = pd.read_csv('data/submission.csv')
submission_1['count'] = y_pred_1
submission_2['count'] = y_pred_2
submission_3['count'] = y_pred_3
submission_1.to_csv('sub_1.csv',index=False)
submission_2.to_csv('sub_2.csv',index=False)
submission_3.to_csv('sub_3.csv',index=False)

3.スーパーパラメータ、Grid Searchコンセプト(ダウンタイムルール)


:スーパーパラメータ調整は、停止ルール値を設定することを意味します.
:決定ツリーには停止ルール(stopcriteria)の概念があります.
  • 最大深さ(最大深さ)
    :最大降下可能な深さ.ルートノードから下への深さを指定します.ツリーが小さいほど.
  • 最小ノードサイズ(min samples split)
    :ノードを分割するデータの数.ノードの確率変数数がこの値より小さい場合stop.木が小さいほど、木が大きくなります.
  • 最低リフト(min不純物減少)
    :ノードの最小リフトを分割します.リフトが設定値よりも低い場合は分割しません.木が小さいほど、木が大きくなります.
  • コスト複雑度(コスト複雑度)
    :ツリーが大きくなる場合にパネル係数を設定することで、ツリーが大きくなる不順度と複雑度を計算します.
  • :これらのダウンタイムルールを総合的に考慮して、スーパーパラメータ調整と呼ばれる最適な条件値を設定できます.
    :超パラメータ調整には多くの方法論がある.ここでは、最適なパフォーマンスを表すGrid Searchでは「窮屈な検索」が使用されます.
    :すべての可能な組み合わせの中で最も優れた組み合わせを見つけます.しかし、完全探索なので最適な組み合わせを探すには長い時間がかかります.

    4.GridSearch()の実装


    :GridSearchCVモジュールを使用して全ナビゲーションスーパーパラメータ調整を実施する
    from sklearn.model_selection import GridSearchCV
    model = RandomForestRegressor(criterion = 'mse', random_state=2020)
    params = {'n_estimators': [200, 300, 500],
              'max_features': [5, 6, 8],
              'min_samples_leaf': [1, 3, 5]}
    greedy_CV = GridSearchCV(model, param_grid=params, cv = 3, n_jobs = -1)
    greedy_CV.fit(X_train, Y_train)
    pred = greedy_CV.predict(test)
    pred
    submission = pd.read_csv('data/submission.csv')
    import numpy as np
    submission['count'] = np.round(pred, 2)
    submission.head()
    submission.to_csv('sub.csv',index=False)

    DACON 101:初めて機械の勉強をすると🤔 🏃」データのダウンロードから」大会への提出🏃‍♂