Episode penutup blok dasar-dasar machine learning klasik: klasifikasi. Kalau episode lalu model saya belajar menebak angka, sekarang dia belajar menebak kategori — spam atau bukan, churn atau tidak, foto kucing atau anjing. Dua algoritma yang saya pakai untuk latihan: logistic regression dan decision tree.
Klasifikasi itu memprediksi kategori
Bedakan dengan regresi (episode 8): output regresi adalah angka kontinu, output klasifikasi adalah kelas. Klasifikasi biner punya dua kelas; multiclass lebih dari dua. Tugasnya supervised — butuh data berlabel, seperti biasa.
Logistic regression: regresi yang dipaksa pilih kelas
Nama membingungkan — ada kata “regression” padahal ini algoritma klasifikasi. Logikanya begini: hitung dulu skor linear persis seperti linear regression, lalu masukkan skor itu ke fungsi sigmoid yang melengkung dari 0 ke 1. Hasilnya probabilitas. Di atas threshold (biasanya 0,5) → kelas positif; di bawah → negatif.
- Cepat dan sederhana, cocok jadi baseline klasifikasi.
- Output probabilitas — bisa disetel threshold-nya sesuai harga kesalahan (ingat precision vs recall di episode 7).
- Batasan utama: asumsi hubungan yang bisa dipisahkan garis lurus. Data yang polanya melingkar atau rumit akan gagal meski fitur sudah di-scale.
Decision tree: serangkaian if-else yang belajar sendiri
Kalau logistic regression terasa asing, decision tree justru terasa familiar — strukturnya mirip flowchart if-else yang kita tulis tiap hari. Bedanya, pertanyaan-pertanyaan di tiap cabang (“apakah luas > 100?”, “apakah umur < 5 tahun?”) tidak ditulis manusia, tapi dicari otomatis dari data dengan mengukur pemisahan kelas terbaik di tiap titik.
- Sangat mudah dibaca — bisa digambar dan dijelaskan ke stakeholder.
- Tidak butuh scaling — ambang batasnya per fitur, bukan jarak.
- Risiko besar: overfitting — tree yang boleh tumbuh bebas akan menghafal data latih sampai daunnya cuma satu contoh. Penangkalnya: batasi kedalaman (
max_depth) atau jumlah contoh minimum per daun.
| Logistic Regression | Decision Tree | |
|---|---|---|
| Interpretabilitas | Bobot per fitur | Aturan if-else eksplisit |
| Butuh scaling? | Ya | Tidak |
| Risiko utama | Gagal di pola non-linear | Overfitting |
Praktik: dua model, satu dataset
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import f1_score
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
lr = LogisticRegression(max_iter=5000).fit(X_train, y_train)
dt = DecisionTreeClassifier(max_depth=4, random_state=42).fit(
X_train, y_train
)
print("LR F1:", f1_score(y_test, lr.predict(X_test)))
print("DT F1:", f1_score(y_test, dt.predict(X_test)))
Detail kecil yang saya pelajari cara susah: max_iter=5000 pada logistic regression karena default-nya kadang belum konvergen di dataset ini, dan max_depth=4 pada tree supaya tidak menghafal. Dua parameter kecil, dampak besar pada hasil evaluasi.
Catatan untuk diri sendiri
Dua hal yang ingin saya ingat dari episode ini. Pertama, mulai selalu dari baseline sederhana sebelum menyentuh ensemble atau neural network — sering kali cukup, dan kalau tidak cukup, jadi tolok ukur. Kedua, keluarga decision tree ternyata pintu masuk ke topik menarik berikutnya: random forest dan gradient boosting, yang rencananya akan saya bahas di episode mendatang. Blok dasar sudah selesai — setelah ini kita naik level.
Sumber
- https://en.wikipedia.org/wiki/Logistic_regression
- https://en.wikipedia.org/wiki/Decision_tree_learning
- https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
- https://scikit-learn.org/stable/modules/tree.html
- https://machinelearningmastery.com/classification-versus-regression-in-machine-learning/
Komentar Terbaru