Bab 6 ~4 jam
Dasar-Dasar Machine Learning
Pahami paradigma fundamental, alur kerja pemodelan, dan konsep kritis yang mendasari seluruh machine learning.
6.1 Paradigma ML
Supervised
Belajar dari contoh berlabel (input→output).
Regresi, Klasifikasi
Unsupervised
Temukan pola dalam data tanpa label.
Clustering, Reduksi Dimensi
Reinforcement
Belajar melalui coba-coba dengan reward.
Game, Robotika, RLHF
Catatan: Ada juga semi-supervised, self-supervised, dan federated learning. Kami fokus pada tiga paradigma inti karena mencakup 90%+ aplikasi dunia nyata.
6.2 Alur Kerja ML
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 1. Bagi data
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 2. Preprocessing (fit hanya pada train!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 3. Latih model
model = LogisticRegression(random_state=42)
model.fit(X_train_scaled, y_train)
# 4. Evaluasi
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))
Aturan Kritis: Jangan pernah gunakan data test untuk feature selection, imputasi, scaling, atau tuning hyperparameter. Data test harus benar-benar belum terlihat sampai evaluasi akhir.
6.3 Pembagian Data & Cross-Validation
# Hold-out sederhana
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# K-Fold Cross-Validation
from sklearn.model_selection import cross_val_score
skor = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
print(f"Rata-rata: {skor.mean():.3f} ± {skor.std():.3f}")
# Stratified K-Fold (untuk data tidak seimbang)
from sklearn.model_selection import StratifiedKFold
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# Repeated stratified k-fold untuk estimasi lebih robust
from sklearn.model_selection import RepeatedStratifiedKFold
cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=3)
6.4 Tradeoff Bias-Varian
Error prediksi model apa pun dapat diuraikan menjadi tiga komponen:
Error Total = Bias² + Varian + Noise Irreduksi
Bias Tinggi (Underfitting)
- • Model terlalu sederhana untuk data
- • Kinerja training DAN test buruk
- • Solusi: lebih banyak fitur, model kompleks
Varian Tinggi (Overfitting)
- • Model menghafal data training
- • Kinerja training bagus, test buruk
- • Solusi: lebih banyak data, regularisasi, model sederhana
# Diagnosis dengan learning curves
from sklearn.model_selection import learning_curve
ukuran_train, skor_train, skor_val = learning_curve(
model, X_train, y_train, cv=5,
train_sizes=np.linspace(0.1, 1.0, 10)
)
# Plot skor train vs validasi vs ukuran training
# Gap = varian, skor rendah = bias
6.5 Metrik Evaluasi
| Tugas | Metrik | Kapan Digunakan |
|---|---|---|
| Regresi | MAE | Interpretable, robust terhadap pencilan |
| RMSE | M memberi penalti pada error besar | |
| R² | Proporsi varians yang dijelaskan | |
| Klasifikasi | Akurasi | Kelas seimbang |
| Presisi/Recall | Kelas tidak seimbang, sensitif biaya | |
| F1-Skor | Keseimbangan presisi & recall | |
| AUC-ROC | Evaluasi independen threshold |
from sklearn.metrics import (mean_squared_error, mean_absolute_error, r2_score,
accuracy_score, precision_score, recall_score, f1_score, roc_auc_score,
confusion_matrix, classification_report)
# Regresi
print(f"MAE: {mean_absolute_error(y_test, y_pred):.2f}")
print(f"RMSE: {mean_squared_error(y_test, y_pred, squared=False):.2f}")
print(f"R²: {r2_score(y_test, y_pred):.3f}")
# Klasifikasi
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
print(f"AUC: {roc_auc_score(y_test, y_prob):.3f}")
Latihan: Latih logistic regression pada dataset kanker payudara. Hitung akurasi, presisi, recall, F1, dan AUC-ROC. Lalu coba dengan class_weight='balanced' dan bandingkan hasilnya.