Machine Learning Academy · Pelajaran

Intuisi Boosting: Pembetulan Ralat Berjujukan

Pelajar akan mensimulasikan tiga pusingan gradient boosting secara manual pada set data kecil, dengan memadankan setiap pepohon baharu kepada baki ralat ensemble setakat itu.

Pelajaran 1 daripada 413 langkah

Intuisi Boosting: Pembetulan Ralat Berjujukan ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Machine Learning Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.

Boosting berbanding Bagging: Perbezaan Utama

Bagging melatih banyak model secara selari pada subset data rawak dan menggabungkannya, sekali gus mengurangkan varians. Boosting melatih model secara berjujukan: setiap model baharu menumpukan pada pembetulan kesilapan yang dilakukan oleh ensembel sebelumnya. Walaupun bagging mengurangkan varians, boosting terutamanya mengurangkan bias — teknik ini boleh menukarkan banyak model lemah yang terlebih kurang suai kepada pembelajar yang berkuasa. Strategi pembetulan ralat secara berjujukan ini menjadi asas kepada gradient boosting, AdaBoost dan XGBoost.

Idea Pembetulan Ralat secara Berjujukan

Bayangkan anda meramalkan harga rumah. Model pertama anda meramalkan semuanya hampir kepada min dan menghasilkan ralat yang besar. Daripada membuangnya, anda melatih model kedua khusus pada baki ralat (ralat: sebenar − ramalan) model pertama. Model kedua mempelajari corak yang terlepas oleh model pertama. Kemudian, model ketiga membetulkan perkara yang masih tersilap oleh model kedua. Setiap model baharu menghasilkan sedikit penambahbaikan pada ralat semasa ensembel yang terkumpul. Ramalan akhir ialah jumlah ramalan semua model.

Boosting secara Manual: Tiga Pusingan

Pertimbangkan set data regresi kecil dengan 5 contoh. Mulakan dengan model yang meramalkan min. Hitung baki ralat. Latih pepohon pada baki ralat. Tambahkan sebahagian daripada ramalannya (kadar pembelajaran) kepada ensembel semasa. Hitung baki ralat baharu. Ulangi. Pada setiap pusingan, baki ralat sepatutnya mengecil jika pepohon berjaya menangkap sesuatu corak. Selepas pusingan yang mencukupi, baki ralat menghampiri sifar bagi set latihan. Inilah algoritma tepat yang dilaksanakan oleh gradient boosting untuk regresi dengan kehilangan kuasa dua min.

import numpy as np
# Tiny example: manual 3-round gradient boosting for regression
y = np.array([3.0, 5.0, 2.0, 8.0, 1.0])
pred = np.full(5, y.mean())  # Round 0: predict the mean
print('Round 0 pred:', pred, 'Residuals:', y - pred)
# Round 1: suppose our tree predicts half the residual
residuals_1 = y - pred
pred += 0.5 * residuals_1  # learning_rate=0.5
print('Round 1 pred:', pred, 'Residuals:', np.round(y - pred, 2))
# Round 2
residuals_2 = y - pred
pred += 0.5 * residuals_2
print('Round 2 pred:', np.round(pred, 2), 'Residuals:', np.round(y - pred, 3))

Kadar Pembelajaran (Pengecutan)

Kadar pembelajaran (sering dipanggil pengecutan) mengecilkan sumbangan setiap pepohon sebelum menambahkannya kepada ensembel. Daripada membetulkan baki ralat sepenuhnya dalam satu langkah (kadar pembelajaran = 1.0), boosting mengambil langkah kecil (contohnya, 0.1) dan membiarkan pepohon seterusnya membetulkan perkara yang masih berbaki. Kadar pembelajaran yang lebih kecil memerlukan lebih banyak pepohon untuk mencapai padanan yang sama, tetapi menghasilkan generalisasi yang lebih baik kerana tiada satu pepohon pun mendominasi. Pertukarannya: kadar pembelajaran yang sangat kecil memerlukan n_estimators yang sangat besar, lalu meningkatkan masa latihan.

Penurunan Kecerunan dalam Ruang Fungsi

Gradient boosting dinamakan demikian kerana hubungannya dengan penurunan kecerunan. Dalam penurunan kecerunan standard, kita mengemas kini parameter dengan bergerak ke arah yang mengurangkan kehilangan. Dalam gradient boosting, kita mengemas kini fungsi ramalan dengan memadankan pepohon baharu kepada kecerunan negatif kehilangan berbanding ramalan semasa. Untuk kehilangan kuasa dua min, kecerunan negatif itu hanyalah baki ralat (sebenar − ramalan). Untuk kehilangan lain (kehilangan log, ralat mutlak), kaedah ini mengira baki ralat pseudo yang bersesuaian.

GradientBoostingClassifier dalam scikit-learn

scikit-learn menyediakan GradientBoostingClassifier yang melaksanakan algoritma gradient boosting Friedman yang asal. Parameter utama: n_estimators (bilangan pepohon), learning_rate (pengecutan), max_depth (kedalaman setiap pepohon — pepohon cetek lebih digemari, biasanya 3–5), dan subsample (pecahan data latihan untuk setiap pepohon, yang menambahkan unsur stokastik dan meningkatkan generalisasi). Gabungan kadar pembelajaran kecil, banyak pepohon cetek dan pensampelan subset ialah resipi standard.

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score

X, y = load_breast_cancer(return_X_y=True)
gb = GradientBoostingClassifier(
    n_estimators=200,
    learning_rate=0.1,
    max_depth=3,
    subsample=0.8,
    random_state=42
)
scores = cross_val_score(gb, X, y, cv=5)
print('GradientBoosting CV:', round(scores.mean(), 4))

Terlebih Suai dalam Boosting

Tidak seperti bagging, boosting boleh terlebih suai dengan estimator yang mencukupi, terutamanya pada kadar pembelajaran yang tinggi. Apabila anda menambah lebih banyak pusingan, kehilangan latihan terus berkurang tetapi kehilangan pengesahan akhirnya meningkat. Penyelesaiannya ialah: (1) gunakan penghentian awal — pantau kehilangan pengesahan dan berhenti apabila ia tidak lagi bertambah baik; (2) gunakan kadar pembelajaran kecil (0.01–0.1) dengan banyak pepohon, bukannya kadar besar dengan sedikit pepohon; (3) regularisasikan pepohon individu dengan kedalaman cetek dan bilangan sampel minimum bagi setiap daun. Semua teknik ini tersedia dalam set hiperparameter XGBoost dan LightGBM yang luas.

AdaBoost: Algoritma Boosting Asal

AdaBoost (Boosting Adaptif) ialah algoritma boosting praktikal yang pertama. Daripada memadankan pepohon pada baki ralat, kaedah ini menetapkan pemberat sampel: contoh yang tersalah diklasifikasikan mendapat pemberat lebih tinggi pada pusingan seterusnya, supaya pepohon berikutnya menumpukan pada kes yang sukar. Sumbangan setiap pepohon kepada undian akhir turut diberi pemberat berdasarkan ketepatannya — pepohon yang lebih baik mendapat pengaruh yang lebih besar. AdaBoost dilaksanakan dalam scikit-learn sebagai AdaBoostClassifier dan penting dari segi sejarah, tetapi gradient boosting (serta XGBoost) sebahagian besarnya telah menggantikannya dalam amalan.

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score

X, y = load_breast_cancer(return_X_y=True)
ada = AdaBoostClassifier(
    estimator=DecisionTreeClassifier(max_depth=1),  # stumps
    n_estimators=200,
    learning_rate=0.5,
    random_state=42
)
print('AdaBoost CV:', round(cross_val_score(ada, X, y, cv=5).mean(), 4))

Gradient Boosting Stokastik

Menetapkan subsample < 1.0 dalam gradient boosting memperkenalkan rawak: setiap pepohon dilatih pada subset rawak data latihan (tanpa penggantian). Unsur stokastik ini mengurangkan korelasi antara pepohon dan sering meningkatkan generalisasi — sama seperti idea dropout dalam rangkaian neural. Nilai lazim ialah subsample=0.8. Apabila subsample kurang daripada 1, scikit-learn turut mengira anggaran luar beg bagi penambahbaikan pada setiap pusingan, yang boleh dicapai melalui oob_improvement_.

Apabila Boosting Mengatasi Hutan Rawak

Boosting biasanya mengatasi hutan rawak pada data jadual yang bersih, apabila nisbah isyarat kepada hingar tinggi dan terdapat interaksi ciri yang kompleks. Mekanisme pembetulan ralat secara berjujukan membolehkan boosting mengeluarkan hampir semua isyarat yang boleh diramal. Walau bagaimanapun, boosting lebih sensitif terhadap data bising dan pencilan — kerana setiap pusingan menumpukan pada contoh yang sukar, hingar boleh menarik model ke arah yang salah. Hutan rawak lebih teguh terhadap hingar label. Bagi data dunia sebenar yang bising dan tidak teratur, pilihan bergantung pada set data tertentu.

from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score

X, y = load_breast_cancer(return_X_y=True)
gb = GradientBoostingClassifier(n_estimators=200, learning_rate=0.1, max_depth=3, random_state=42)
rf = RandomForestClassifier(n_estimators=200, random_state=42)
print('Gradient Boosting:', round(cross_val_score(gb, X, y, cv=5).mean(), 4))
print('Random Forest:    ', round(cross_val_score(rf, X, y, cv=5).mean(), 4))

Boosting untuk Tugas Regresi

Gradient boosting juga sama berkuasa untuk regresi. GradientBoostingRegressor meminimumkan kehilangan regresi secara lalai (ralat kuasa dua), tetapi turut menyokong ralat mutlak (loss='absolute_error', teguh terhadap pencilan) dan kehilangan Huber (loss='huber', menggabungkan kehilangan kuasa dua untuk ralat kecil dan kehilangan mutlak untuk ralat besar). Untuk ramalan harga rumah, peramalan tenaga dan tugas yang serupa, gradient boosting secara konsisten mengatasi regresi linear dan sering menyamai atau mengatasi rangkaian neural pada data jadual tanpa memerlukan perkakasan GPU.

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
import numpy as np

X, y = fetch_california_housing(return_X_y=True)
gbr = GradientBoostingRegressor(n_estimators=200, learning_rate=0.1, max_depth=4,
                                  subsample=0.8, random_state=42)
rmse = np.sqrt(-cross_val_score(gbr, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print('GBR Regression RMSE:', round(rmse, 4))

Pemeriksaan Pantas

Uji pemahaman anda tentang Boosting dan Pembetulan Ralat secara Berjujukan daripada pelajaran ini.

Imbas Kembali Pelajaran

Dalam pelajaran ini, anda telah mempelajari bahawa: boosting melatih model secara berjujukan, dengan setiap model membetulkan baki ralat ensembel sebelumnya, kadar pembelajaran menskalakan sumbangan setiap pepohon dan mengawal terlebih suai, dan gradient boosting meminimumkan kehilangan boleh terbit dengan memadankan pepohon kepada kecerunan negatif. Seterusnya, kita akan meneroka regularisasi dan ciri penghentian awal XGBoost.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Intuisi Boosting: Pembetulan Ralat Berjujukan” percuma?

Ya — teks penuh “Intuisi Boosting: Pembetulan Ralat Berjujukan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Machine Learning Academy, tingkat taraf kepada CoddyKit PRO. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Intuisi Boosting: Pembetulan Ralat Berjujukan”?

Pelajar akan mensimulasikan tiga pusingan gradient boosting secara manual pada set data kecil, dengan memadankan setiap pepohon baharu kepada baki ralat ensemble setakat itu. Anda berlatih Machine Learning Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Machine Learning Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Machine Learning Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Intuisi Boosting: Pembetulan Ralat Berjujukan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Machine Learning Academy ini?

Ya. Setiap pelajaran Machine Learning Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Intuisi Boosting: Pembetulan Ralat Berjujukan
  2. XGBoost: Regularisasi, Pemberhentian Awal dan Kepentingan Ciri
  3. LightGBM: Pertumbuhan Mengikut Daun dan Kelebihan Kelajuan
  4. Hiperparameter Utama: Kadar Pembelajaran, n_estimators dan max_depth
← Kembali ke Machine Learning Academy