Pohon Keputusan: Teori dan Implementasi
Ketidakmurnian Gini, perolehan informasi, kedalaman pohon, overfitting — sklearn DecisionTreeClassifier.
Pohon Keputusan: Teori dan Implementasi adalah pelajaran Learn AI with Python gratis di CoddyKit. Ini adalah pelajaran 1 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 Learn AI with Python, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa Itu Pohon Keputusan
Pohon keputusan membagi data menjadi cabang berdasarkan nilai fitur, dengan mengajukan pertanyaan ya/tidak hingga mencapai prediksi pada simpul daun.
Setiap simpul internal menguji satu fitur, setiap cabang merupakan suatu hasil, dan setiap daun menetapkan sebuah kelas. Pohon mudah ditafsirkan karena Anda dapat mengikuti jalur keputusannya.
Ketidakmurnian Gini
Ketidakmurnian Gini mengukur seberapa bercampur kelas-kelas dalam sebuah simpul. Simpul murni (hanya berisi satu kelas) memiliki nilai Gini 0.
Rumusnya adalah Gini = 1 - sum(p_i^2), dengan p_i sebagai proporsi kelas i. Pohon memilih pemisahan yang paling banyak mengurangi ketidakmurnian.
import numpy as np
def gini(labels):
classes, counts = np.unique(labels, return_counts=True)
probs = counts / counts.sum()
return 1 - np.sum(probs ** 2)
print(gini([0, 0, 1, 1])) # 0.5 (max mix)
print(gini([0, 0, 0, 0])) # 0.0 (pure)Perolehan Informasi dan Entropy
Kriteria pemisahan alternatif adalah perolehan informasi, yang didasarkan pada entropy. Entropy adalah -sum(p_i * log2(p_i)).
Perolehan informasi = entropy (induk) - entropy berbobot (anak). Gini dan entropy biasanya menghasilkan pohon yang serupa; Gini sedikit lebih cepat dihitung.
import numpy as np
def entropy(labels):
_, counts = np.unique(labels, return_counts=True)
p = counts / counts.sum()
return -np.sum(p * np.log2(p))
print(entropy([0, 0, 1, 1])) # 1.0
print(entropy([0, 0, 0, 1])) # ~0.81Melatih DecisionTreeClassifier
Scikit-learn menyediakan DecisionTreeClassifier. Anda memilih kriteria pemisahan dengan parameter criterion (gini atau entropy).
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
Xtr, Xte, ytr, yte = train_test_split(X, y, random_state=0)
clf = DecisionTreeClassifier(criterion="gini", random_state=0)
clf.fit(Xtr, ytr)
print("Accuracy:", clf.score(Xte, yte))Overfitting dan max_depth
Pohon tanpa batasan akan tumbuh hingga setiap daun murni dan menghafal derau. Pohon tersebut mengalami penyesuaian berlebihan.
Parameter max_depth membatasi kedalaman pertumbuhan pohon sehingga pohon dipaksa untuk melakukan generalisasi. Kedalaman yang lebih kecil = model yang lebih sederhana = penyesuaian berlebihan yang lebih sedikit.
from sklearn.tree import DecisionTreeClassifier
shallow = DecisionTreeClassifier(max_depth=3, random_state=0)
deep = DecisionTreeClassifier(max_depth=None, random_state=0)
# shallow generalizes better on unseen data;
# deep often overfits the training setParameter Pemangkasan Awal Lainnya
Selain max_depth, Anda dapat mengendalikan pertumbuhan dengan:
min_samples_splitjumlah sampel minimum untuk memisahkan sebuah simpulmin_samples_leafjumlah sampel minimum dalam sebuah daunmax_leaf_nodesbatas jumlah total daun
Semua parameter ini mengurangi varians dan melawan penyesuaian berlebihan.
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(
max_depth=5,
min_samples_split=10,
min_samples_leaf=5,
random_state=0,
)Memvisualisasikan dengan plot_tree
plot_tree menggambar seluruh pohon sehingga Anda dapat membaca setiap pemisahan, nilai Gini, dan distribusi kelas pada setiap simpul.
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
clf = DecisionTreeClassifier(max_depth=3).fit(X, y)
plt.figure(figsize=(12, 6))
plot_tree(clf, filled=True, feature_names=load_iris().feature_names)
plt.show()Kepentingan Fitur
Setelah pelatihan, feature_importances_ memberi tahu seberapa besar setiap fitur mengurangi ketidakmurnian di seluruh pemisahan. Nilai-nilainya berjumlah 1.0.
Ini adalah cara cepat untuk memeringkat masukan yang paling penting bagi model.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
data = load_iris()
clf = DecisionTreeClassifier(max_depth=3).fit(data.data, data.target)
for name, imp in zip(data.feature_names, clf.feature_importances_):
print(f"{name}: {imp:.3f}")Pemangkasan Kompleksitas Biaya (ccp_alpha)
Pemangkasan setelah pelatihan menumbuhkan pohon penuh lalu memangkas cabang yang lemah. Parameter ccp_alpha mengendalikan seberapa agresif pemangkasan dilakukan: nilai alpha yang lebih tinggi menghapus lebih banyak simpul.
Gunakan cost_complexity_pruning_path untuk menemukan kandidat nilai alpha.
from sklearn.tree import DecisionTreeClassifier
base = DecisionTreeClassifier(random_state=0)
path = base.cost_complexity_pruning_path(Xtr, ytr)
alphas = path.ccp_alphas
pruned = DecisionTreeClassifier(ccp_alpha=0.01, random_state=0)
pruned.fit(Xtr, ytr)Memilih Alpha Terbaik
Untuk memilih ccp_alpha, latih satu pohon untuk setiap kandidat nilai alpha dan bandingkan ketepatan validasinya. Nilai alpha terbaik menyeimbangkan ketepatan dan kesederhanaan.
from sklearn.tree import DecisionTreeClassifier
scores = []
for a in alphas:
t = DecisionTreeClassifier(ccp_alpha=a, random_state=0)
t.fit(Xtr, ytr)
scores.append((a, t.score(Xte, yte)))
best = max(scores, key=lambda s: s[1])
print("Best alpha:", best[0])Kelebihan dan Kekurangan
Kelebihan: mudah ditafsirkan, tidak memerlukan penskalaan, menangani batas nonlinier, dan mendukung berbagai jenis data.
Kekurangan: varians tinggi (perubahan kecil pada data dapat mengubah pohon), rentan terhadap penyesuaian berlebihan, dan hanya mendukung pemisahan yang sejajar dengan sumbu. Kekurangan ini mendorong penggunaan ansambel seperti hutan acak.
Uji Cepat
Uji pemahaman Anda tentang konsep pohon keputusan.
Ringkasan
Ringkasan: Pohon keputusan membagi data menggunakan ketidakmurnian Gini atau perolehan informasi. Kendalikan penyesuaian berlebihan dengan pemangkasan awal (max_depth, min_samples_leaf) atau pemangkasan setelah pelatihan (ccp_alpha). Periksa model dengan plot_tree dan feature_importances_. Variansnya yang tinggi mendorong penggunaan metode ansambel.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pohon Keputusan: Teori dan Implementasi” gratis?
Ya — teks lengkap “Pohon Keputusan: Teori dan Implementasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn AI with Python, upgrade ke CoddyKit PRO. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pohon Keputusan: Teori dan Implementasi”?
Ketidakmurnian Gini, perolehan informasi, kedalaman pohon, overfitting — sklearn DecisionTreeClassifier. Kamu berlatih Learn AI with Python 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 Learn AI with Python?
Tidak diperlukan pengalaman sebelumnya. Learn AI with Python 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 1 dari 4.
Berapa lama pelajaran “Pohon Keputusan: Teori dan Implementasi” 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 Learn AI with Python ini?
Ya. Setiap pelajaran Learn AI with Python 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
- Pohon Keputusan: Teori dan Implementasi
- Random Forest dan Bagging
- Gradient Boosting: GBM dan XGBoost
- LightGBM dan CatBoost