Evaluasi Model dan Validasi Silang
Evaluasi model dengan accuracy, F1, ROC-AUC, dan CV k-fold.
Evaluasi Model dan Validasi Silang adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Pembagian Pelatihan/Validasi/Pengujian
Gunakan pembagian menjadi tiga bagian: data pelatihan untuk menyesuaikan model, data validasi untuk menyesuaikan hiperparameter, dan data pengujian untuk melaporkan kinerja akhir. Jangan pernah menggunakan kumpulan pengujian selama pengembangan.
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)
X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)Skor Akurasi
accuracy_score adalah fraksi prediksi yang benar. Gunakan untuk kelas yang seimbang; untuk data yang tidak seimbang, pilih F1 atau AUC.
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))Presisi, Sensitivitas, F1
Untuk kelas yang tidak seimbang: presisi = TP/(TP+FP), sensitivitas = TP/(TP+FN), F1 = rata-rata harmonis presisi dan sensitivitas.
from sklearn.metrics import precision_score, recall_score, f1_score, classification_report
# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each classMatriks Kebingungan
Matriks kebingungan menunjukkan positif benar, positif palsu, negatif benar, dan negatif palsu.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
# [FN TP]]Kurva ROC dan AUC
roc_auc_score mengukur luas di bawah kurva ROC. AUC = 1.0 berarti sempurna; 0.5 berarti acak.
from sklearn.metrics import roc_auc_score, roc_curve
y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))
fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curveMetrik Regresi
Gunakan mean_squared_error (MSE), root_mean_squared_error (RMSE), dan r2_score untuk tugas regresi.
from sklearn.metrics import mean_squared_error, r2_score
y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))Validasi Silang k-Fold
cross_val_score membagi data menjadi k bagian, melatih model pada k-1 bagian, mengevaluasinya pada 1 bagian, lalu mengulangi proses tersebut sebanyak k kali. Metode ini lebih andal daripada satu pembagian saja.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")StratifiedKFold
Gunakan StratifiedKFold untuk memastikan setiap bagian memiliki distribusi kelas yang sama—hal yang sangat penting untuk kumpulan data yang tidak seimbang.
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())Trade-off Bias-Varians
Bias tinggi berarti model kurang menyesuaikan data (model terlalu sederhana). Varians tinggi berarti model terlalu menyesuaikan data (model terlalu kompleks). Validasi silang mengungkap masalah yang Anda hadapi.
# Underfitting: low train score AND low val score
# → increase model complexity, add features
# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data
from sklearn.model_selection import validation_curve
import numpy as np
train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))Validasi Silang Bersarang
Untuk penyesuaian hiperparameter DAN evaluasi yang tidak bias, gunakan validasi silang bersarang: putaran dalam menyesuaikan model, sedangkan putaran luar mengevaluasinya.
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())Kalibrasi
Perkiraan probabilitas dari pengklasifikasi mungkin tidak terkalibrasi dengan baik. Gunakan CalibratedClassifierCV untuk memperoleh perkiraan probabilitas yang lebih baik.
from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)
cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))Pemeriksaan Singkat
Mengapa validasi silang lebih disukai daripada satu pembagian pelatihan/pengujian untuk mengevaluasi model?
Rangkuman
Gunakan akurasi untuk masalah yang seimbang, serta F1/AUC untuk masalah yang tidak seimbang. Evaluasi dengan cross_val_score k-fold, gunakan StratifiedKFold untuk data yang tidak seimbang, dan gunakan validasi silang bersarang saat menyesuaikan hiperparameter agar memperoleh perkiraan akhir yang tidak bias. Jangan pernah melihat kumpulan pengujian selama pengembangan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Evaluasi Model dan Validasi Silang” gratis?
Ya — teks lengkap “Evaluasi Model dan Validasi Silang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Evaluasi Model dan Validasi Silang”?
Evaluasi model dengan accuracy, F1, ROC-AUC, dan CV k-fold. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Evaluasi Model dan Validasi Silang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- API scikit-learn: fit, transform, predict
- Model Linear: Regresi dan Klasifikasi
- Model Berbasis Pohon: Decision Tree dan Random Forest
- Evaluasi Model dan Validasi Silang