交差検証は、データの分割を繰り返して複数のモデルを訓練します。単純に訓練セットとテストセットに1回だけ分割するよりも、汎化性能を正確に評価できます。
複数のモデルといっても、例えばサポートベクタマシンと決定木のように複数のアルゴリズムで試行するのはなく、サポートベクタマシンだけで複数の学習モデルを作って試行するという意味です。
例えばデータを5分割した場合、4つの集合を訓練用データセットに、残りの1つの集合をテスト用データセットに使用して、5回試行します。
単純に訓練セットとテストセットに1回だけ分割するとデータが偏ってしまうことがありますが、交差検証で分割することで偶然性を排除します。
交差検証はmodel_selectionモジュールのcross_val_score関数を使用し、引数「cv」で分割数を指定します。
使用例
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
iris = load_iris()
svc = SVC()
引数「cv=5」で5分割、5試行を指定。
cross_val_score(svc, iris.data, iris.target, cv=5)
▶︎ array([0.96666667, 0.96666667, 0.96666667, 0.93333333, 1. ])
5分割したので5回分の正解率がNumPyのndarrayで返ります。平均すると「0.966...」になり、この学習モデルは約97%の汎化性能があることが分かります。
なお、cross_val_score関数は学習モデルを返さないため、predictメソッドで未知のデータを予測することはできません。cross_val_score関数は、特定のアルゴリズムが特定のデータに対してどの程度汎化できるかを評価するものです。