5章 モデルの改良と評価 5.1交差検証
(60m)07:00~08:00
5.1 交差検証
k分割交差検証:KFold
データを分割し、訓練とテストに振り分け評価を繰り返す。
例:①~⑤に分割→①をテスト残りを訓練→②をテスト残りを訓練→繰り返し
層化k分割交差検証:StratifiedKFold
ターゲットの分類が均一だとただの分割では評価できない。
例:iris label を3分割すると答えは均一になり学習できない。
Iris labels:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
KFold分類器:
kfold= KFold(n_splits=X)
をcvで渡す。
cross_val_score(logreg,iris.data,iris.target,cv=kfold)
1つ抜き交差検証:
テストサンプルを1つだけにして繰り返す。
LeaveOneoutをcvとして渡す。
from sklearn.model_selection import LeaveOneOut
loo =LeaveOneOut()
scores=cross_val_score(logreg,iris.data,iris.target,cv=loo)
シャッフル分割交差検証:
train_size個を訓練として選び、test_size個をテストとして選び、n_iter回繰り返す。
ShuffleSplitをcvで渡す。
from sklearn.model_selection import ShuffleSplit
shuffle_split=ShuffleSplit(test_size=.5,train_size=.5,n_splits=10)
# 割合でもできる。この場合は0.5=50%
scores=cross_val_score(logreg,iris.data,iris.target,cv=shuffle_split)
グループ付き交差検証:GroupKFold
グループを設定し、グループ内では分割がかからないようにする。
groupsを設定。GroupKFoldをcvで渡す。
from sklearn.model_selection import GroupKFold
X,y =make_blobs(n_samples=12,random_state=0)
groups=[0,0,0,1,1,1,1,2,2,3,3,3]
scores=cross_val_score(logreg,X,y,groups,cv=GroupKFold(n_splits=3))
基本的には以下3つを試そう。
k分割交差検証:KFold
層化k分割交差検証:StratifiedKFold
グループ付き交差検証:GroupKFold