【scikit-learn】モデルの選択: estimatorとハイパーパラメータ-1【Python】

本ページでは以下のページを要約するとともに、個人的な解説も記載しています。独特な解釈をしている部分があるので、誤りなどの指摘はtwitterまでお願いします。

参考ページ
Model selection: choosing estimators and their parameters — scikit-learn 1.1.2 documentation
https://scikit-learn.org/stable/tutorial/statistical_inference/model_selection.html
閲覧日:2022年10月17日

スコア、および交差検証

全てのアルゴリズムにおいて、学習させて後はscoreメソッドにて、データがどのくらいの精度で予測できているのかを計算することができます。精度の出し方にも複数ありますが、別の記事でご紹介予定です。回帰問題の場合は決定係数が表示されます。
scoreの数値は大きいほどよく、この値が大きくなるように前処理のやり方やハイパーパラメータ、アルゴリズムの調整を行います。
例えば以下のコードであれば、アヤメのデータセットをSVMを使用して分類した結果のスコアを表示しています。今回は0.98という結果になりました。

from sklearn import datasets, svm
X_digits, y_digits = datasets.load_digits(return_X_y=True)
svc = svm.SVC(C=1, kernel='linear')
svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])
#0.98

予測精度はデータの分割の仕方によって変わってきます。
以下のコードでは、データを3つに分割しテストデータとして使用するデータを変えることにより、3つのモデルを作成しそれぞれのスコアを比較しています。このような手法のことを交差検証(クロスバリデーション)と呼びます。

import numpy as np
X_folds = np.array_split(X_digits, 3)
y_folds = np.array_split(y_digits, 3)
scores = list()
for k in range(3):
     # We use 'list' to copy, in order to 'pop' later on
     X_train = list(X_folds)
     X_test = X_train.pop(k)
     X_train = np.concatenate(X_train)
     y_train = list(y_folds)
     y_test = y_train.pop(k)
     y_train = np.concatenate(y_train)
     scores.append(svc.fit(X_train, y_train).score(X_test, y_test))
print(scores)
#[0.934..., 0.956..., 0.939...]