cross_val_score(clf, X, y, cv=5) でクロスバリデーションを実行する
いよいよクロスバリデーションを実行します。先ほどインポートした cross_val_score 関数を使用します。この関数はいくつかの引数を取ります。
cross_val_score のパラメータ:
estimator: 評価するモデル(私たちの clf クラス分類器)
X: 特徴データ行列
y: ターゲットラベル配列
cv=5: クロスバリデーション戦略(整数 = k-fold、または CV スプリッターオブジェクト)
scoring: 評価メトリック(デフォルトでは推定器のスコアメソッドを使用)
n_jobs: 使用する CPU コア数(デフォルト=1、全コアの場合は -1)
cv=5 を設定することで、scikit-learn に 5-fold クロスバリデーションを実行するように指示します。データは自動的に 5 つのフォールドに分割され、モデルは 5 回訓練およびテストされ、各実行のスコアを含む配列が返されます。
以下のコードを main.py ファイルの末尾、コメント行の下に追加してください。
## Perform 5-fold cross-validation
scores = cross_val_score(clf, X, y, cv=5)
## Print the array of scores
print("Scores:", scores)
これで、main.py ファイル全体は以下のようになります。
import numpy as np
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
## Load the iris dataset
iris = datasets.load_iris()
X, y = iris.data, iris.target
## Initialize a Support Vector Classifier (SVC)
## Parameters explained:
## - kernel='linear': Uses a linear kernel for linearly separable data like Iris
## - C=1: Regularization parameter (higher values = less regularization)
## - random_state=42: Ensures reproducible results across runs
clf = SVC(kernel='linear', C=1, random_state=42)
## --- Your code will go below this line ---
## Perform 5-fold cross-validation
scores = cross_val_score(clf, X, y, cv=5)
## Print the array of scores
print("Scores:", scores)
次に、ターミナルからスクリプトを実行します。
python3 main.py
クロスバリデーションの各フォールドに対応する 5 つのスコアの配列を示す出力が表示されます。
Scores: [0.96666667 1. 0.96666667 0.96666667 1. ]
Mean score: 0.9800000000000001
Standard deviation: 0.016329931618554516
スコアは、正確な分割方法によって若干異なる場合がありますが、似ているはずです。この配列は、モデルがデータの異なるサブセットでどのようにパフォーマンスを発揮したかを詳細に示しています。