Kurva validasi

Eval

Kurva validasi

まとめ
  • Kurva validasi menampilkan perubahan skor latihan dan validasi ketika satu hiperparameter diubah.
  • Manfaatkan validation_curve untuk menyapu parameter regularisasi, menggambar kedua kurva, dan menemukan titik optimal.
  • Pelajari cara menafsirkan grafik saat men-tuning hiperparameter dan hal-hal yang perlu diwaspadai.

1. Apa itu kurva validasi? #

Kurva validasi menaruh hiperparameter di sumbu X dan skor pelatihan/validasi di sumbu Y. Interpretasi umum:

  • Skor latih tinggi, validasi rendah → overfitting; naikkan regularisasi atau kurangi kapasitas model.
  • Keduanya rendah → underfitting; kendurkan regularisasi atau pakai model lebih ekspresif.
  • Keduanya tinggi dan berdekatan → pengaturan menjanjikan; konfirmasi dengan metrik lain.

Kurva validasi melengkapi kurva pembelajaran: yang pertama menganalisis “hiperparameter vs skor”, sementara yang kedua “jumlah data vs skor”.


2. Contoh Python (SVC dengan C) #

from __future__ import annotations

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import validation_curve
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC


def plot_validation_curve_for_svc() -> None:
    """Menggambar dan menyimpan kurva validasi untuk parameter C pada SVC."""
    features, labels = make_classification(
        n_samples=1200,
        n_features=20,
        n_informative=5,
        n_redundant=2,
        n_repeated=0,
        n_classes=2,
        weights=[0.6, 0.4],
        flip_y=0.02,
        class_sep=1.2,
        random_state=42,
    )

    model = make_pipeline(StandardScaler(), SVC(kernel="rbf", gamma="scale"))
    param_range = np.logspace(-3, 2, 10)

    train_scores, valid_scores = validation_curve(
        estimator=model,
        X=features,
        y=labels,
        param_name="svc__C",
        param_range=param_range,
        scoring="roc_auc",
        cv=5,
        n_jobs=None,
    )

    train_mean = train_scores.mean(axis=1)
    train_std = train_scores.std(axis=1)
    valid_mean = valid_scores.mean(axis=1)
    valid_std = valid_scores.std(axis=1)

    plt.figure(figsize=(7, 5))
    plt.semilogx(param_range, train_mean, label="Train score", color="#1d4ed8")
    plt.fill_between(
        param_range,
        train_mean - train_std,
        train_mean + train_std,
        alpha=0.2,
        color="#1d4ed8",
    )
    plt.semilogx(param_range, valid_mean, label="Validation score", color="#ea580c")
    plt.fill_between(
        param_range,
        valid_mean - valid_std,
        valid_mean + valid_std,
        alpha=0.2,
        color="#ea580c",
    )
    plt.title("Validation Curve for SVC (ROC-AUC)")
    plt.xlabel("Parameter regularisasi C")
    plt.ylabel("Skor")
    plt.ylim(0.5, 1.05)
    plt.legend(loc="best")
    plt.grid(alpha=0.3)


plot_validation_curve_for_svc()
Kurva validasi SVC

Nilai C rendah menyebabkan underfitting; nilai C tinggi memicu overfitting. Sekitar C ≈ 1 menjadi kompromi terbaik.


3. Membaca grafik #

  • Bagian kiri (C kecil): regularisasi kuat → underfitting, kedua skor rendah.
  • Bagian kanan (C besar): regularisasi lemah → skor latih tinggi, skor validasi menurun.
  • Puncak tengah: dua kurva mendekat dan mencapai nilai maksimum; kandidat nilai C yang optimal.

4. Penggunaan praktis #

  • Eksplorasi awal: tentukan rentang hiperparameter yang menjanjikan sebelum menjalankan pencarian mahal (grid, random, Bayesian).