見出し画像

前処理大全:第5章

今回は前処理大全の第5章をまとめたコードを記載します。
*PythonのみのコードなのでRやSQLのコードは参照できません。

第5章:分割

5-1:レコードデータにおけるモデル検証用のデータ分割

Q:交差検証

製造レコードのデータを用いて予測モデル構築のためのデータ分割。データの20%をホールドアウト検証用のテストデータにして、
残りのデータで交差数4の交差検証を行う。

from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

# ホールドアウト検証用のデータ分割
# 予測モデルの入力値と予測対象の値を別々にtrain_test_split関数に設定
# test_sizeは検証データの割合
train_date, test_date, train_target, test_target = train_test_split(
    production_tb.drop('fault_flg', axis=1),
    production_tb[['fault_flg']],
    test_size=0.2
)

# train_test_splitによって、行冥を現在の行番号に直す
train_date.reset_index(inplace=True, drop=True)
test_date.reset_index(inplace=True, drop=True)
train_target.reset_index(inplace=True, drop=True)
test_target.reset_index(inplace=True, drop=True)

# 対象の行番号リストを生成
row_no_list = list(range(len(train_target)))

# 交差検証用のデータ分割
k_fold =KFold(n_splits=4, shuffle=True)

# 交差数分繰り返し処理、並列処理も可能な部分
for train_cv_no, test_cv_no in k_fold.split(row_no_list):
    
    # 交差検証における学習データを抽出
    train_cv = train_date.iloc[train_cv_no, :]
    
    # 交差検証における検証データを抽出
    test_cv = train_date.iloc[test_cv_no, :]
    
    # train_dateとtrain_targetを学習データ
    # test_dateとtest_targetを検証データとして機械学習モデルの構築、検証

# 交差検証の結果をまとめる

# trainを学習データ、private_testを検証データとして機械学習モデルの構築、検証

5-2:時系列データにおけるモデル検証用のデータ分割

Q:時系列データにおける学習/検証データの準備

月毎のレコードデータを対象に、学習データと検証データを時間軸に対して1カ月ごとにスライドしながら生成。学習期間は24カ月、検証期間は12カ月、スライドする期間は12カ月とする。

# train_window_startに最初の学習データの開始行番号を指定
train_window_start = 1
# train_window_endに最初の学習データの終了行番号を指定
train_window_end = 24
# horizonに検証データのデータ数を指定
horizon = 12
# skipにスライドするデータ数を指定
skip = 12

# 年月に基づいてデータを並び替え
monthly_index_tb.sort_values(by='year_month')

while True : 
    # 検証データの終了番号を計算
    test_window_end = train_window_end + horizon
    
    # 行番号を指定して、元データから学習データを取得
    # train_window_startの部分を1に固定すれば、学習データを増やしていく検証に変更可能
    traub = monthly_index_tb[train_window_start : train_window_end]
    
    # 行番号を指定して、元データから検証データを取得
    test = monthly_index_tb[(train_window_end + 1) : test_window_end]
    
    # 検証データの終了番号が元データの行数以上になってるか判定
    if test_window_end >= len(monthly_index_tb.index) :
        # 前データを対象にした場合終了
        break
        
    # データをスライドさせる
    train_window_start += skip
    train_window_end += skip

# 交差検証の結果をまとめる

まとめ

k_Foldなんかは馴染みある方も多いのではないでしょうか?かくいう私もPythonを触りたての頃から描いてる記憶があります。次は第6章をまとめますので、参考にして頂けたら嬉しいです。

サポートして頂いたお金は開業資金に充てさせて頂きます。 目標は自転車好きが集まる場所を作る事です。 お気持ち程度でいいのでサポートお願い致します!