検証曲線の描画

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

機械学習において、検証曲線は、異なるハイパーパラメータ値に対する分類器の学習スコアと検証スコアを決定するために使用されます。これは、モデルに最適なハイパーパラメータを選択するのに役立ちます。この実験では、サポートベクターマシン (SVM) 分類器の検証曲線を描画するために scikit-learn を使用します。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook にアクセスして練習します。

場合によっては、Jupyter Notebook が読み込み完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49326{{"検証曲線の描画"}} sklearn/model_selection -.-> lab-49326{{"検証曲線の描画"}} sklearn/datasets -.-> lab-49326{{"検証曲線の描画"}} ml/sklearn -.-> lab-49326{{"検証曲線の描画"}} end

データセットの読み込み

scikit-learn から digits データセットを読み込み、データのサブセットを選択して、数字 1 と 2 の 2 値分類を行います。

from sklearn.datasets import load_digits

X, y = load_digits(return_X_y=True)
subset_mask = np.isin(y, [1, 2])  ## binary classification: 1 vs 2
X, y = X[subset_mask], y[subset_mask]

ハイパーパラメータ範囲の定義

テストしたい SVM カーネルパラメータ gamma の値の範囲を定義します。

param_range = np.logspace(-6, -1, 5)

検証スコアの計算

異なる gamma 値の SVM 分類器に対する学習スコアと検証スコアを計算するために、scikit-learn の validation_curve 関数を使用します。

from sklearn.svm import SVC
from sklearn.model_selection import validation_curve

train_scores, test_scores = validation_curve(
    SVC(),
    X,
    y,
    param_name="gamma",
    param_range=param_range,
    scoring="accuracy",
    n_jobs=2,
)

検証曲線の描画

matplotlib を使用して、gamma の関数として学習スコアと検証スコアを描画します。

import matplotlib.pyplot as plt

train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)

plt.title("Validation Curve with SVM")
plt.xlabel(r"$\gamma$")
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
lw = 2
plt.semilogx(
    param_range, train_scores_mean, label="Training score", color="darkorange", lw=lw
)
plt.fill_between(
    param_range,
    train_scores_mean - train_scores_std,
    train_scores_mean + train_scores_std,
    alpha=0.2,
    color="darkorange",
    lw=lw,
)
plt.semilogx(
    param_range, test_scores_mean, label="Cross-validation score", color="navy", lw=lw
)
plt.fill_between(
    param_range,
    test_scores_mean - test_scores_std,
    test_scores_mean + test_scores_std,
    alpha=0.2,
    color="navy",
    lw=lw,
)
plt.legend(loc="best")
plt.show()

まとめ

この実験では、サポートベクターマシン分類器の検証曲線を描画するために scikit-learn をどのように使用するかを学びました。データセットを読み込み、ハイパーパラメータ値の範囲を定義し、検証スコアを計算し、結果を描画しました。これは、モデルの最適なハイパーパラメータを選択し、その性能を向上させるのに役立ちます。