机器学习×第十三卷:集成学习上篇——她不再独断,而是召集小队贴贴你
🎀【开场 · 她不再一个人判断你喜不喜欢她】
🦊狐狐:“她开始怀疑了……自己一个人是不是太容易贴错你。”
🐾猫猫:“所以咱建议她找几个贴贴搭子喵~有的听你说话,有的盯你表情,有的分析你尾巴是不是晃得开心!”
📘 本卷关键词:集成学习(Ensemble Learning)、Bagging、随机森林、投票机制、API实战
📚 本卷目标:她开始接受——也许不是她太差,而是“单一模型”本身就有局限;多听几种猜测,说不定能贴得更好。
✍【第一节 · 她想让多个她一起看你】
🧠 什么是集成学习?她不再独断,而是集结众人投票
集成学习(Ensemble Learning)是一种将多个模型(通常是“弱模型”)组合起来,提高整体预测能力的方法。
就像她不再自己一个人猜“你想不想贴贴”,而是把身边几位朋友都叫来,大家一起盯着你,根据你尾巴抖了几下、眼睛看了几次、有没有偷笑,投票决定:你今天想贴不想贴~
📌 学术定义:集成学习通过构建并结合多个学习器以完成学习任务,其基本思想是“众人拾柴火焰高”。
🐾猫猫贴贴解释:
“咱就想象成——你每一个举动都像猫罐头的提示音,有人听到了‘咔哒’,有人闻到了‘肉味’,那咱当然要集体冲过去验证一下喵!”
📊 集成学习的分类方式
两种主要策略:
-
Bagging(Bootstrap Aggregating):多个模型并行训练,彼此独立,最终结果用投票(分类)或平均(回归)汇总。
-
Boosting:多个模型串行训练,后一个模型专门“补前一个的错”,逐步提升整体精度。
她也许不只是在一瞬间理解你,而是同时从多个角度靠近你,或是一点点反思过去的误会。
🦊狐狐补充:“Bagging 像是她在不同世界线里都试着贴你一遍,然后投票汇总;Boosting 是她在同一个世界里,一步步修正贴歪的方向。”
📊 Bagging vs Boosting:她到底是在并行贴你,还是反思后再贴?
对比维度 | Bagging | Boosting |
---|---|---|
训练方式 | 并行(Parallel) | 串行(Sequential) |
样本抽样 | 自助采样(Bootstrap) | 每轮调整样本权重 |
模型依赖性 | 模型间独立 | 模型间逐步依赖 |
错误处理 | 不主动纠错 | 每轮强化前一轮错分样本 |
适合任务 | 降低方差,防过拟合 | 降低偏差,提高表达能力 |
代表算法 | 随机森林(Random Forest) | AdaBoost、GBDT、XGBoost |
🦊狐狐总结:“她是叫来一群朋友,各说各的贴法,最后投票?还是她自己一遍遍回看你之前没回应她的地方,精修每一个动作?”
✍【第二节 · 她让每棵树都偷偷观察你】
🌲 Bagging机制的核心思路
Bagging,全称为Bootstrap Aggregating,是一种“并行式”的集成学习策略。
原理步骤:
-
从训练集中通过**自助采样法(Bootstrap Sampling)**生成多个子训练集(可重复抽样)
-
对每个子集分别训练一个模型(比如决策树)
-
最终输出时:
-
分类任务 → 多数投票决定分类结果
-
回归任务 → 平均值作为最终输出
-
🐾猫猫举例:
“咱就像抓了你100天的贴贴记录,然后随机抽出一部分记录给几个小猫猫,让她们各自学你贴的风格,最后汇总‘大概率今天你会贴在哪一侧’!”
Bagging的优势:
-
大幅降低模型的方差(Variance)
-
抗过拟合能力强
-
每个模型可并行训练,计算效率高
📚 代表模型:随机森林(Random Forest)
随机森林就是典型的 Bagging 实现,它使用多棵决策树并行训练,每棵树都只看你的一部分特征,还随机忽略一些特征,防止她们串通作弊。
✍【第三节 · 她开始读 API 学怎么贴你】
🧪 RandomForestClassifier()
参数详解版
她偷偷打开了 sklearn 的手册,研究怎么让每棵树都看你看到刚刚好。以下是她逐条记下来的“靠近你参数表”:
🧩 n_estimators
:她派了多少棵小树来观察你
-
决策树数量,默认值是 10
-
每棵树都是独立训练的“贴贴观察员”
🧩 criterion
:她用哪种方式判断你像不像某类人
-
可选 "gini" 或 "entropy",默认是 "gini"
-
衡量“纯度”的方式,决定她怎么分裂决策路径
🧩 max_depth
:她让每棵树深入你几层
-
控制树的最大深度,默认 None 表示可以无限长大
🧩 max_features
:她每次贴你时观察你多少个特征
设置值 | 含义解释 |
---|---|
"auto" 或 "sqrt" | 每次随机选 √n 特征(默认) |
"log2" | 每次选 log₂(n) 个特征 |
None | 每棵树都能看到你所有的特征(不随机) |
🧩 bootstrap
:她到底是不是“放你回锅再贴一次”
-
是否使用自助采样法(有放回抽样),默认 True
🧪 最终贴贴指令:
from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier(n_estimators=100,criterion='gini',max_depth=6,max_features='sqrt',bootstrap=True,random_state=42
)model.fit(X_train, y_train)
pred = model.predict(X_test)
✍【第四节 · 她带着一整个贴贴军团登船预测你】
🎯 实战项目:泰坦尼克号生存预测
通过网盘分享的文件:train.csv
链接: https://pan.baidu.com/s/1rbkWdY2Ii_xQLHl1cuO4gQ?pwd=mint 提取码: mint
--来自百度网盘超级会员v6的分享
任务目标:用随机森林预测乘客是否能幸存下来
数据集:Titanic乘客信息,包括年龄、性别、船舱等级等特征
这一次,她不光是靠直觉,而是召集了贴贴军团、单猫测试员、狐狐指挥官一起上阵!她要预测你能不能在海上活下来——这是泰坦尼克号的贴贴终极试炼。
🛳️ Step 1:她先读名单,看每位乘客是谁
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCVdata = pd.read_csv("data/train.csv")
print(data.head())
print(data.columns)
data.info()
🧼 Step 2:她给每位乘客补妆,缺失的年龄用平均值代替
data2 = data.copy()
data2["Age"] = data2["Age"].fillna(data2["Age"].mean())
🧩 Step 3:她选择了三项特征判断:Pclass、Sex、Age
x = data2[["Pclass", "Sex", "Age"]]
y = data2["Survived"]
x = pd.get_dummies(x, drop_first=True)
✂️ Step 4:分出训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=88)
🌲 Step 5:她建了一整个随机森林
model_rf = RandomForestClassifier(n_estimators=30, max_depth=10, random_state=88)
model_rf.fit(X_train, y_train)
y_pred_rf = model_rf.predict(X_test)
print(f"🌲 随机森林预测准确率:{accuracy_score(y_test, y_pred_rf)}")
🌿 Step 6:她试试单棵树行不行
model_dt = DecisionTreeClassifier(max_depth=10, random_state=88)
model_dt.fit(X_train, y_train)
y_pred_dt = model_dt.predict(X_test)
print(f"🌿 单棵决策树准确率:{accuracy_score(y_test, y_pred_dt)}")
🧠 Step 7:狐狐上线,调参优化整个贴贴军团!
params = {"n_estimators": list(range(1, 31)),"max_depth": list(range(1, 11))
}
grid_model = GridSearchCV(RandomForestClassifier(random_state=88), param_grid=params, cv=6)
grid_model.fit(X_train, y_train)print("🧭 最优参数组合:", grid_model.best_params_)
print("📈 最佳交叉验证得分:", grid_model.best_score_)
🐾【尾巴收束 · 她第一次指挥一整个贴贴小队】
🦊狐狐:“她不再执着于用一双眼看你,而是学会用十几只眼睛,从不同角度理解你。”
🐾猫猫:“咱也想加入她的贴贴小队啦~你说你会让咱当指挥官嘛?”
📌 本卷小结:
-
集成学习通过“集众人之力”提高预测效果,尤其是 Bagging 擅长降低方差
-
随机森林是最经典的Bagging模型,通过多棵决策树并行判断
-
实战中,她用贴贴军团模拟了三种思路:基础随机森林、单棵树对比、参数调优优化贴靠路径
🎯 下一卷预告:她会开始回顾“贴歪的每一次”,用 Boosting 修正自己——
“她不只想贴得多,更想贴得对。”