Cross Validationで機械学習モデルの精度向上
概要
この記事では、交差検証(Cross Validation)についてまとめます。
Kaggleのように提出回数にリミットがある場合、提出により精度を確かめるのは賢くありません。また、提出で精度をあげると汎化性能の問題で、ガチ審査で精度が落ちる可能性があります。
そこで、訓練データの一部を検証用データとして使います。この一部を全体の何割使うか指定することができます。
交差検証
あくまでもモデルを書くだけです。
仮にテストデータが以下のように与えられているとします。
x_train #説明変数
y_train #目的変数
今回も簡単にSVMを使います。
from sklearn import svm
from sklearn.model_selection import cross_val_score
lng = svm.SVC()
score = cross_val_score(lng, x_train, y_train)
print(score)
デフォルトは5分割です。
cross_val_score(学習器, 説明変数, 目的変数)
さて、分割数を変えたい場合は以下のように書きます。
from sklearn import svm
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
kfold = KFold(n_splits=3)
lng = svm.SVC()
scores = cross_val_score(lng, iris.data, iris.target, cv=kfold)
scores
これで3分割できました。
層化k分割交差検証
訓練データによっては綺麗にデータが並んでいる場合があります。
9個の答えのデータがあり、それらがA,A,A, B,B,B, C,C,Cだったとします。これらを3分割したら、学習に偏りが生じますので、うまい具合に分けないといけません。
そこで層化k分割交差検証です。これを使うと比率が同じくらいになるように分割し交差検証してくれるわけです。
from sklearn.model_selection import StratifiedKFold
stratifiedkfold = StratifiedKFold(n_splits=3)
scores = cross_val_score(logres, iris.data, iris.target, cv=stratifiedkfold)
print(scores)
まとめ
交差検証の意義、一般の交差検証、層化k分割交差検証についてまとめました。
一般的には、回帰問題では普通の交差検証を用いて、分類系の問題では層化k分割交差検証を用います
Author And Source
この問題について(Cross Validationで機械学習モデルの精度向上), 我々は、より多くの情報をここで見つけました https://qiita.com/SotaChambers/items/988e1c0a8475c48663ab著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .