まとめ
- Kurva validasi menampilkan perubahan skor latihan dan validasi ketika satu hiperparameter diubah.
- Manfaatkan
validation_curveuntuk 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()

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).