集成学习之简介
1 课程概览
本课介绍集成学习的基本概念。集成学习是机器学习中的一种思想,通过多个模型组合形成精度更高的模型。分为Bagging(并行)和Boosting(串行)两种思想。
2 核心概念与定义
- 集成学习:机器学习中的一种思想,通过多个模型组合形成精度更高的模型。
- 弱学习器:参与组合的模型,也叫基学习器。
- 强学习器:多个弱学习器组合而成的模型。
- Bagging:并行思想,有放回抽样,投票决策。
- Boosting:串行思想,依次训练,针对短板加强。
3 算法与模型详解
3.1 集成学习定义
定义:集成学习是机器学习中的一种思想
特点:
- 不是新模型,而是思想
- 类似米式距离(总结欧式、曼哈顿、切比雪夫距离)
- 通过多个模型组合形成精度更高的模型
3.2 核心概念
弱学习器(基学习器):
- 参与组合的模型
- 基础的基
- 类似基石构成强学习器
强学习器:
- 多个弱学习器组合而成
- 精度更高
3.3 集成学习流程
训练阶段:
- 使用训练集
- 依次训练出弱学习器
测试阶段:
- 对未知样本进行测试
- 使用弱学习器联合预测
3.4 Bagging思想
特点:
- 并行训练
- 有放回抽样
- 投票决策
流程:
数据集 → 有放回抽样 → 模型1 → 预测结果1
→ 模型2 → 预测结果2
→ 模型3 → 预测结果3
→ 投票 → 最终结果
示例:
- 模型1预测:1
- 模型2预测:2
- 模型3预测:1
- 投票结果:1(多数)
3.5 Boosting思想
特点:
- 串行训练
- 针对短板加强
- 依次训练
流程:
数据集 → 模型1 → 训练结果1(有短板)
→ 模型2(针对短板)→ 训练结果2
→ 模型3(针对短板)→ 训练结果3
→ 最终结果
类比:
- 老师教学:第一个老师教基础,第二个老师针对短板加强
- 串行:一个老师讲完,下一个老师才能讲
3.6 集成学习的意义
类比1:服务器集群
- 单台服务器:能力有限,单点故障
- 服务器集群:多台服务器,避免单点故障
类比2:团队协作
- 全栈开发(超级个体):风险大
- 团队协作(前端、后端、运维、测试):更稳定
优势:
- 弱者联盟
- 能力变强
- 不易发生过拟合
3.7 集成学习分类
| 类别 | 思想 | 训练方式 | 代表算法 |
|---|---|---|---|
| Bagging | 并行 | 同时训练 | 随机森林 |
| Boosting | 串行 | 依次训练 | AdaBoost、GBDT、XGBoost、LightGBM |
3.8 代表算法
Bagging:
- 随机森林(Random Forest)
- 底层:决策树
- 多棵树组成森林
Boosting:
- AdaBoost
- GBDT
- XGBoost(GBDT的优化)
- LightGBM
4 代码示例
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import make_classification
# 1. 生成数据
X, y = make_classification(
n_samples=1000,
n_features=20,
n_informative=10,
n_classes=2,
random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 2. 单个决策树(弱学习器)
print("=== 弱学习器(单个决策树)===")
dt = DecisionTreeClassifier(random_state=42)
dt.fit(X_train, y_train)
dt_acc = accuracy_score(y_test, dt.predict(X_test))
print(f"准确率: {dt_acc:.4f}")
# 3. Bagging - 随机森林
print("\n=== Bagging - 随机森林 ===")
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
rf_acc = accuracy_score(y_test, rf.predict(X_test))
print(f"准确率: {rf_acc:.4f}")
# 4. Boosting - AdaBoost
print("\n=== Boosting - AdaBoost ===")
ab = AdaBoostClassifier(n_estimators=100, random_state=42)
ab.fit(X_train, y_train)
ab_acc = accuracy_score(y_test, ab.predict(X_test))
print(f"准确率: {ab_acc:.4f}")
# 5. Boosting - GBDT
print("\n=== Boosting - GBDT ===")
gbdt = GradientBoostingClassifier(n_estimators=100, random_state=42)
gbdt.fit(X_train, y_train)
gbdt_acc = accuracy_score(y_test, gbdt.predict(X_test))
print(f"准确率: {gbdt_acc:.4f}")
# 6. 对比
print("\n=== 对比 ===")
print(f"弱学习器(决策树): {dt_acc:.4f}")
print(f"Bagging(随机森林): {rf_acc:.4f}")
print(f"Boosting(AdaBoost): {ab_acc:.4f}")
print(f"Boosting(GBDT): {gbdt_acc:.4f}")
# 7. 模拟集成学习投票
print("\n=== 模拟投票决策 ===")
# 训练多个弱学习器
weak_learners = []
for i in range(5):
dt = DecisionTreeClassifier(max_depth=3, random_state=i)
dt.fit(X_train, y_train)
weak_learners.append(dt)
# 各弱学习器预测
predictions = np.array([learner.predict(X_test) for learner in weak_learners])
print(f"5个弱学习器的预测形状: {predictions.shape}")
# 投票(多数表决)
from scipy.stats import mode
final_pred = mode(predictions, axis=0)[0].ravel()
vote_acc = accuracy_score(y_test, final_pred)
print(f"投票决策准确率: {vote_acc:.4f}")
# 8. 集成学习思想总结
print("\n=== 集成学习思想总结 ===")
print("1. 集成学习是思想,不是新模型")
print("2. 多个弱学习器 → 强学习器")
print("3. Bagging: 并行,有放回抽样,投票")
print("4. Boosting: 串行,针对短板,加权")
print("5. 代表算法: 随机森林、AdaBoost、GBDT、XGBoost")
输出示例:
=== 弱学习器(单个决策树)===
准确率: 0.8950
=== Bagging - 随机森林 ===
准确率: 0.9300
=== Boosting - AdaBoost ===
准确率: 0.9150
=== Boosting - GBDT ===
准确率: 0.9250
=== 对比 ===
弱学习器(决策树): 0.8950
Bagging(随机森林): 0.9300
Boosting(AdaBoost): 0.9150
Boosting(GBDT): 0.9250
=== 模拟投票决策 ===
5个弱学习器的预测形状: (5, 200)
投票决策准确率: 0.9100
=== 集成学习思想总结 ===
1. 集成学习是思想,不是新模型
2. 多个弱学习器 → 强学习器
3. Bagging: 并行,有放回抽样,投票
4. Boosting: 串行,针对短板,加权
5. 代表算法: 随机森林、AdaBoost、GBDT、XGBoost
5 重难点与易错提醒
- ❗重点:集成学习是思想,不是新模型。
- ❗重点:弱学习器组合成强学习器。
- ❗重点:Bagging并行,Boosting串行。
- ❗重点:Bagging投票,Boosting加权。
- ⚠️易错:混淆集成学习和具体算法。
- ⚠️易错:混淆Bagging和Boosting。
- 💡深入理解:集成学习类似团队协作。
6 课堂问答精选
Q: 集成学习是什么?
A: 集成学习是机器学习中的一种思想,通过多个模型组合形成精度更高的模型。参与组合的模型称为弱学习器(基学习器),组合后的模型称为强学习器。集成学习不是新模型,而是一种思想,类似米式距离是对多种距离度量的总结。
Q: Bagging和Boosting有什么区别?
A:
- Bagging:并行训练,有放回抽样,投票决策。代表算法:随机森林。
- Boosting:串行训练,针对短板加强,加权决策。代表算法:AdaBoost、GBDT、XGBoost。
7 本课小结
- 集成学习:多个弱学习器组成强学习器的思想。
- 弱学习器:参与组合的模型。
- 强学习器:组合后的高精度模型。
- Bagging:并行,有放回抽样,投票。
- Boosting:串行,针对短板,加权。
8 延伸思考与实践
- 实践:对比弱学习器和强学习器。
- 预习:Bagging和Boosting思想介绍。
- 思考:集成学习为什么能提高准确率?