Pohon Keputusan yang Ditingkatkan dengan Gradien

Seperti mengantongi dan meningkatkan, peningkatan gradien adalah metodologi yang diterapkan di atas algoritme machine learning lainnya. Secara informal, peningkatan gradien melibatkan dua jenis model:

  • model "machine learning" yang lemah, yang biasanya merupakan pohon keputusan.
  • "strong" model machine learning, yang terdiri dari beberapa model lemah.

Dalam peningkatan gradien, di setiap langkah, model baru yang lemah dilatih untuk memprediksi "error" dari model yang kuat saat ini (yang disebut respons semu). Kita akan membahas "error" nanti. Untuk saat ini, asumsikan "error" adalah perbedaan antara prediksi dan label regresi. Model lemah (yaitu "error") kemudian ditambahkan ke model yang kuat dengan tanda negatif untuk mengurangi error model yang kuat.

Peningkatan gradien bersifat berulang. Setiap iterasi memanggil formula berikut:

\[ F_{i+1} = F_i - f_i \]

dalam hal ini:

  • $F_i$ adalah model yang kuat di langkah $i$.
  • $f_i$ adalah model lemah pada langkah $i$.

Operasi ini berulang hingga kriteria berhenti terpenuhi, seperti jumlah iterasi maksimum atau jika model (kuat) mulai overfit seperti yang diukur pada set data validasi terpisah.

Mari kita ilustrasikan peningkatan gradien pada set data regresi sederhana dengan:

  • Tujuannya adalah memprediksi $y$ dari $x$.
  • Model kuat diinisialisasi menjadi konstanta nol: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

Mari terapkan kode ini pada set data berikut:

plot kebenaran dasar untuk satu fitur, x, dan labelnya, y. Plot adalah serangkaian gelombang sinus yang agak teredam.

Gambar 25. Set data regresi sintetis dengan satu fitur numerik.

 

Berikut adalah tiga plot setelah iterasi pertama algoritme peningkatan gradien:

Tiga plot. Plot pertama menunjukkan prediksi model yang kuat, yang merupakan garis lurus dengan kemiringan 0 dan titik potong y 0. Plot kedua menunjukkan error pada model yang kuat, yang merupakan serangkaian gelombang sinus. Plot ketiga menunjukkan prediksi model yang lemah, yang merupakan kumpulan gelombang persegi.

Gambar 26. Tiga plot setelah iterasi pertama.

 

Perhatikan hal-hal berikut tentang plot dalam Gambar 26:

  • Plot pertama menunjukkan prediksi model yang kuat, yang saat ini selalu 0.
  • Plot kedua menunjukkan error, yang merupakan label dari model yang lemah.
  • Plot ketiga menunjukkan model yang lemah.

Model lemah pertama adalah mempelajari representasi kasar dari label dan sebagian besar berfokus pada bagian kiri ruang fitur (bagian dengan variasi terbanyak, sehingga sebagian besar error untuk model konstan yang salah).

Berikut adalah plot yang sama untuk iterasi algoritme lainnya:

Tiga plot. Plot pertama menunjukkan prediksi model yang kuat, yang merupakan kebalikan dari plot prediksi model lemah dari Gambar sebelumnya. Plot kedua menunjukkan error dari model yang kuat, yang merupakan kumpulan gelombang sinus yang bising. Plot ketiga menunjukkan prediksi model yang lemah, yang merupakan beberapa gelombang persegi.

Gambar 27. Tiga plot setelah iterasi kedua.

 

Perhatikan hal-hal berikut tentang plot dalam Gambar 27:

  • Model kuat sekarang berisi prediksi model yang lemah dari iterasi sebelumnya.
  • Error baru dari model yang kuat sedikit lebih kecil.
  • Prediksi baru dari model yang lemah kini berfokus pada bagian kanan ruang fitur.

Kami menjalankan algoritme untuk 8 iterasi lainnya:

plot menunjukkan model yang kuat secara bertahap menjadi semakin dekat ke kebenaran dasar, sementara prediksi model yang lemah secara bertahap menjadi lebih lemah.

Gambar 28. Tiga plot setelah iterasi ketiga dan iterasi kesepuluh.

 

Dalam Gambar 28, perhatikan bahwa prediksi model yang kuat mulai menyerupai plot set data.

Gambar-gambar ini menggambarkan algoritme peningkatan gradien menggunakan pohon keputusan sebagai pembelajar yang lemah. Kombinasi ini disebut pohon yang ditingkatkan gradien (keputusan).

Plot sebelumnya menunjukkan esensi peningkatan gradien. Namun, contoh ini tidak memiliki dua operasi dunia nyata berikut:

  • Penyingkatan
  • Pengoptimalan nilai daun dengan satu langkah metode Newton

Penyusutan

Model lemah $f_i$ dikalikan dengan nilai kecil $\nu$ (misalnya, $\nu = 0,1$) sebelum ditambahkan ke model kuat $F_i$. Nilai kecil ini disebut penyingkatan. Dengan kata lain, alih-alih setiap iterasi menggunakan formula berikut:

\[ F_{i+1} = F_i - f_i \]

Setiap iterasi menggunakan formula berikut:

\[ F_{i+1} = F_i - \nu f_i \]

Penyusutan dalam peningkatan gradien serupa dengan kecepatan pembelajaran dalam jaringan neural. Penyusutan mengontrol seberapa cepat model kuat mempelajarinya, yang membantu membatasi kelebihan pas. Artinya, nilai penyusutan yang mendekati 0,0 akan mengurangi over Fit lebih banyak daripada nilai penyusutan mendekati 1,0.

Dalam kode kami di atas, penyingkatan kode akan diterapkan sebagai berikut:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions