グループ付き交差検証【GroupKFold】
・学習データとテストデータに同じグループが現れあないように分ける場合に有効
・データセットの汎化性能を確保するためにグループ化を行いながらデータ分割を行う。
このように分割することで、学習データとテストデータの両方に現れないようにすることが可能となります。
ユーザ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
この記事が気に入ったらサポートをしてみませんか?