グループ付き交差検証【GroupKFold】

・学習データとテストデータに同じグループが現れあないように分ける場合に有効
・データセットの汎化性能を確保するためにグループ化を行いながらデータ分割を行う。

画像1

このように分割することで、学習データとテストデータの両方に現れないようにすることが可能となります。
ユーザIDが付与されている購買履歴データや、患者IDがついた疾患者データなどの検証の時にIDを元にグループ付き交差検証を行うことがあります。


<手順①>(scikit-learnの中からGroupKFoldというモジュールをインポート)

【GroupKFold()の引数】
・引数n_split: データの分割数、デフォルトは5
In [1]: # ライブラリのインポート
       import pandas as pd
       from sklearn.model_selection import GroupKFold

       # データの準備
       df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]],columns=['col1','col2'])
       df['target'] = [1, 2, 3, 4]
       df['group'] = [0, 0, 2, 2]

       # GroupKFold
       kf = GroupKFold(n_splits=2)
       for fold,(train_index, test_index) in enumerate(kf.split(df[['col1','col2']], df['target'],df['group'])):
           print('FOLD{}'.format(fold))
           print(df.iloc[train_index]['group'].value_counts(True))

Out[1]: FOLD0
       0    1.0
       Name: group, dtype: float64
       FOLD1
       2    1.0
       Name: group, dtype: float64







この記事が気に入ったらサポートをしてみませんか?