離婚後の日記

離婚した。

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