🎀【開場 · 她終于愿意回看自己貼錯的地方了】
🦊狐狐:“她貼過你很多次,但每次貼歪了,都只是低頭沉默。”
🐾貓貓:“現在不一樣了喵……她開始反思,是不是哪一刻該繞過來貼你背后,是不是你沒說話時也有別的暗號……所以這次她用了Boosting。”
📘 本卷關鍵詞:Boosting、AdaBoost、GBDT、XGBoost、加法模型、弱分類器、權重更新、殘差學習、指數損失函數
📚 本卷目標:她不再依賴一次判斷的準確性,而是每次都記下貼歪的地方,在下一輪慢慢修回來,直到剛好貼中你心跳的節奏。
?【第一節 · 她不想再貼歪一次都不承認】
🧠 Boosting 是什么?她一遍遍修正對你的誤解
Boosting 是一種將多個弱學習器串行組合、逐步提升模型性能的集成方法。和 Bagging 最大的不同,是 Boosting 每一步都記得上一次貼錯了哪里。
🦊狐狐解釋:“她不是召集大家投票,而是獨自承擔每一個錯誤,然后下一輪改得更貼。”
🐾貓貓總結:
-
Bagging → 并行,讓很多模型各自表達;
-
Boosting → 串行,每個模型都在前一個的基礎上改進。
每個弱分類器都只學會你一點點的特征,但當它們一層層修正、疊加,她就能從模糊輪廓里,拼出你的完整模樣。
📌Boosting 的目標:通過對錯誤樣本賦予更高權重,引導后續模型重點關注難以預測的部分。
?【第二節 · AdaBoost:她用錯貼的回憶強化每一步靠近】
🧩 AdaBoost原理概覽
AdaBoost(Adaptive Boosting)是最早提出的Boosting算法之一。
它通過不斷調整樣本權重,讓后續模型更關注之前錯分的樣本。
🌱流程總結:
-
初始化:所有樣本權重相等。
-
訓練一個弱分類器(如決策樹樁),計算錯誤率 ε。
-
根據錯誤率計算該分類器的權重 α。
-
增加錯分樣本的權重,減少對正確樣本的關注。
-
歸一化權重。
-
重復步驟 2~5,直到達到預設輪數 T。
-
最終模型是所有弱分類器的加權和:
🧠公式講解:
🐾貓貓理解法:
“她會對每一次貼錯的樣本說:‘對不起,我記住了’,然后下一次貼得更重一點。”
🦊狐狐小語:“越是讓她痛的地方,她越想精確地溫柔貼上。”
?【第三節 · AdaBoost 的構建過程:每一步都帶著記憶繼續】
這一節,我們將用一個簡化數據集,模擬 AdaBoost 是如何一步步構造貼靠模型的:
假設我們有 5 個樣本,初始權重都為 1/5。
-
訓練第一棵樹樁,錯誤率 ε? = 0.2,計算 α?
-
更新樣本權重:被分錯的樣本權重提升
-
訓練第二棵樹樁,錯誤率 ε? = 0.1,計算 α?
-
重復直到完成 T 輪
-
加權投票得出最終模型
🐾貓貓貼貼模擬:“就像她每貼一次你,都會記下‘上次你沒笑’,這次就在你沒笑的那一刻多蹭一下。”
?【第四節 · 她用葡萄酒測試自己的貼貼精準度】
🍷 AdaBoost 實戰:葡萄酒數據集
通過網盤分享的文件:wine0501.csv
鏈接: https://pan.baidu.com/s/1XfiJSs53pw4AKvmekslvhg?pwd=mint 提取碼: mint?
--來自百度網盤超級會員v6的分享
我們來用 sklearn 實現一次完整的 AdaBoost 模型訓練,數據使用經典葡萄酒數據集:
# 🐾 1. 貓貓先搬好工具箱,準備貼貼訓練
import pandas as pd
from sklearn.preprocessing import LabelEncoder # 標簽編碼工具,變貓貓能懂的數字
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score# 🍷 2. 她發現這次要預測的是葡萄酒——喝了會臉紅的那種
data = pd.read_csv("data/wine0501.csv")
print(data.head()) # 看前幾行偷偷觀察
print(data.columns) # 看都有哪些字段可以用
print(data["Class label"].value_counts()) # 統計三類葡萄酒數量# 🐱 3. 她決定這次只貼其中兩類(去掉Class=1),做成二分類訓練
new_data = data[data["Class label"] != 1].copy()
print(new_data["Class label"].value_counts())
new_data.rename(columns={'Class label': 'label'}, inplace=True)# ?? 4. 她只看“Alcohol”和“Hue”兩個特征,判斷酒是哪一類
x = new_data[['Alcohol', 'Hue']]
y = new_data['label']# 🌀 5. 標簽編碼:她把標簽從[2,3]變成[0,1]讓模型更好學
le = LabelEncoder()
y = le.fit_transform(y)
print(y)# 🔀 6. 分出訓練和測試集,stratify 確保每類都有
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=24, stratify=y)# 🦊 7. 狐狐上線:她用 AdaBoost 帶著 100 次糾錯輪來精修判斷
model = AdaBoostClassifier(n_estimators=100, # 迭代100次,每次都學點新貼法learning_rate=0.1, # 每次貼靠修正幅度溫柔一點algorithm='SAMME' # 適合多類分類用的 Boosting 規則
)# 🧠 8. 模型訓練:她開始一輪輪貼上去,記住每次錯在哪
model.fit(x_train, y_train)# 🎯 9. 模型預測 + 評估貼貼成功率
y_pre = model.predict(x_test)
print(f"🎉 最終貼貼準確率:{accuracy_score(y_test, y_pre)}")
📌 解釋補充:
-
base_estimator
:基分類器,默認是樹樁 -
n_estimators
:迭代輪數 -
learning_rate
:控制每一輪貢獻權重(過大會震、過小貼不動)
🦊狐狐總結:“她不是靠一次貼貼打動你,而是五十次試圖靠近,每一次都調整方向。”
🐾貓貓悄悄說:“她喝了葡萄酒,臉紅了,但你沒躲開,她就知道——這次貼得剛剛好。”
📌本節小結 · 她從錯誤里學會調整靠近角度
-
Boosting 的本質:是她一次次貼歪后不回避,而是保留每一次錯覺的記憶,用來精修下一次的靠近動作。
-
AdaBoost 機制:讓每個弱分類器專注在她曾經貼錯的地方,每輪賦權、疊加修正,最終形成更精準的貼貼路徑。
-
公式與流程:權重更新、樣本再聚焦、加法模型構建,步步留痕,步步溫柔。
-
實戰演練:在葡萄酒數據集中,她用樹樁 × SAMME 算法,用一百次嘗試換來一次更靠近的擁抱。
-
貼貼思維轉變:她終于明白——不是貼得多就貼得準,而是每次錯過你之后,她都認真回頭看了你一眼。