最適なモデル選んだら、評価する必要あり
機械学習では、様々なモデル(アルゴリズム)が存在する。
scikit-learnでも、多くのモデルが用意されている。
前回の最適なモデル選びall_estimatorsで、最適なモデル(アルゴリズム)の選ぶ方法を紹介しました。
all_estimators()を使うことで、正解率が高い=最適なモデルを選ぶことができる。
モデルが決まったら、そのモデルを評価しましょう。
精度が安定しないモデルは、正答率が高くてもあまりいいモデルとは言えません。
この安定性を見る方法として、交差検証法を使います。
交差検証法とは?
交差検証法(Cross-Validation)は、データを学習データと検証データに分け、その誤差を評価基準とする、パラメータの最適化方法です。
irisデータを学習する
SepalLength、SepalWidth、PetalLength、PetalWidthの4つの変数から、Nameを予測する。
データの形式

結果

K-分割交差検証
K=5と指定したので、正解率は5つ出力されます。
ソースコード
import numpy as np
import pandas as pd
from sklearn.metrics import accuracy_score
from sklearn.model_selection import KFold, cross_val_score, LeaveOneOut, ShuffleSplit, GroupKFold
from sklearn.utils.testing import all_estimators
from sklearn.datasets import load_iris
import warnings
warnings.filterwarnings('ignore')
X = load_iris().data
y = load_iris().target
allAlgorithms = all_estimators(type_filter="classifier")
kfold_cv = KFold(n_splits=5, shuffle=False)
for (name, algorithm) in allAlgorithms:
clf = algorithm()
if hasattr(clf, "score"):
scores = cross_val_score(clf, X, y, cv=kfold_cv)
#print(name,"の正解率=", scores)
print(name, "CV値=",scores.mean())
CV値
交差検証法で出された正解率は、K個あるので平均を取ります。
この値をCV値と呼びます。
for (name, algorithm) in allAlgorithms:
clf = algorithm()
if hasattr(clf, "score"):
scores = cross_val_score(clf, X, y, cv=kfold_cv)
print(name,"のCV値=", scores.mean())

1つ抜き交差検証法
loo = LeaveOneOut()
for (name, algorithm) in allAlgorithms:
clf = algorithm()
if hasattr(clf, "score"):
scores = cross_val_score(clf, X, y, cv=loo)
#print(name,"の正解率=", scores)
print(name, "CV値=",scores.mean())
シャッフル交差検証法
shuffle_split = ShuffleSplit(test_size=0.5, n_splits=10)
for (name, algorithm) in allAlgorithms:
clf = algorithm()
if hasattr(clf, "score"):
scores = cross_val_score(clf, X, y, cv=shuffle_split)
#print(name,"の正解率=", scores)
print(name, "CV値=",scores.mean())
