Pohon Keputusan yang Ditingkatkan dengan Gradien

Seperti pengangkutan dan penguatan, peningkatan gradien adalah metodologi yang diterapkan di atas algoritma machine learning lainnya. Secara informal, peningkatan gradien melibatkan dua jenis model:

  • "lemah" machine learning, yang biasanya berupa pohon keputusan.
  • "kuat" model machine learning, yang terdiri dari beberapa jaringan.

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

Peningkatan gradien bersifat iteratif. Setiap iterasi akan memanggil formula berikut:

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

dalam hal ini:

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

Operasi ini berulang sampai kriteria penghentian terpenuhi, mis. atau jika model (kuat) mulai terlalu pas dengan nilai 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 kita terapkan kode ini pada set data berikut:

Plot kebenaran dasar untuk satu fitur, x, dan labelnya, y. Alurnya adalah sebuah
serangkaian sinus yang agak teredam
ombak.

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

 

Berikut adalah tiga plot setelah iterasi pertama dari peningkatan gradien algoritme:

Tiga plot. Plot pertama menunjukkan prediksi model yang kuat, yaitu
garis lurus dengan kemiringan 0 dan perpotongan y terhadap 0. Plot kedua menunjukkan {i>error<i}
model kuat, yang merupakan
serangkaian gelombang sinus. Plot ketiga menunjukkan
model yang lemah, yang merupakan himpunan dari
ombak.

Gambar 26. Tiga plot setelah iterasi pertama.

 

Perhatikan hal berikut tentang plot pada Gambar 26:

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

Model lemah pertama adalah mempelajari representasi kasar label dan kebanyakan berfokus pada bagian kiri ruang fitur (bagian dengan variasi paling banyak, sehingga error terbesar terjadi pada model yang salah secara konstan).

Berikut ini adalah plot yang sama untuk iterasi lain dari algoritma:

Tiga plot. Plot pertama menunjukkan prediksi model yang kuat, yaitu
kebalikan dari plot prediksi model lemah dari sebelumnya
Gambar. Plot kedua menunjukkan {i>error<i} dari model kuat, yaitu
satu set gelombang sinus. Plot ketiga menunjukkan prediksi model yang lemah, yang
adalah beberapa persegi
ombak.

Gambar 27. Tiga plot setelah iterasi kedua.

 

Perhatikan hal berikut tentang plot pada Gambar 27:

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

Kami menjalankan algoritma untuk 8 iterasi lagi:

Plot menunjukkan model kuat secara bertahap menjadi semakin mendekati kebenaran dasar
sedangkan prediksi model yang lemah secara bertahap akan terjadi.
akan lebih lemah.

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

 

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

Gambar-gambar ini mengilustrasikan algoritma peningkatan gradien menggunakan pohon keputusan sebagai peserta didik yang lemah. Kombinasi ini disebut pohon (keputusan) yang ditingkatkan gradien.

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

  • Penyusutan
  • 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 penyusutan. Dengan kata lain, alih-alih setiap iterasi menggunakan rumus:

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

Setiap iterasi menggunakan formula berikut:

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

Penyusutan dalam peningkatan gradien setara dengan kecepatan pemelajaran dalam jaringan neural. Penyusutan mengontrol seberapa cepat model yang kuat belajar, yang membantu membatasi {i>overfitting<i}. Artinya, nilai penyusutan yang mendekati 0,0 akan mengurangi overfitting dari nilai penyusutan yang lebih dekat ke 1,0.

Dalam kode kita di atas, penyusutan akan diimplementasikan sebagai berikut:

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