集成学习之大纲介绍
1 课程概览
本课介绍集成学习的大纲。集成学习通过组合多个弱学习器形成强学习器,类似"三个臭皮匠顶个诸葛亮"。分为Bagging(并行)和Boosting(串行)两种思想。
2 核心概念与定义
- 集成学习:通过多个模型组合形成精度更高的模型。
- 弱学习器:参与组合的模型,也叫基学习器。
- 强学习器:多个弱学习器组合而成的模型。
- Bagging:并行思想,有放回抽样,投票决策。
- Boosting:串行思想,依次训练,针对短板加强。
3 算法与模型详解
3.1 集成学习思想
核心理念:三个臭皮匠顶个诸葛亮
原理:
- 单个模型预测有偏差(一个人说了算)
- 多个模型组合预测更准确(投票决策)
3.2 集成学习流程
单模型:
数据集 → 模型 → 预测结果(有偏差)
多模型(集成学习):
数据集 → 模型1 → 预测结果1
→ 模型2 → 预测结果2
→ 模型3 → 预测结果3
→ 投票决策 → 最终结果
3.3 随机森林
底层模型:决策树
问题:如果数据集相同、模型相同,训练结果必然相同,没有意义
解决方案:有放回抽样
- 从1000条数据中抽500条
- 有放回(抽完放回去)
- 三个模型抽取的数据既有交集又有差异
- 训练结果不同,投票才有意义
3.4 Bagging思想
特点:
- 并行训练(三个模型同时训练)
- 有放回抽样
- 投票决策
- 多个弱学习器组成强学习器
代表算法:随机森林
3.5 Boosting思想
特点:
- 串行训练(一个接一个)
- 针对短板加强
- 依次训练
代表算法:
- AdaBoost
- GBDT
- XGBoost
- LightGBM
3.6 Bagging vs Boosting
| 特性 | Bagging | Boosting |
|---|---|---|
| 训练方式 | 并行 | 串行 |
| 数据抽取 | 有放回抽样 | 针对短板 |
| 决策方式 | 投票 | 加权 |
| 代表算法 | 随机森林 | AdaBoost、GBDT、XGBoost |
3.7 集成学习的意义
类比:
- 服务器集群:多台服务器对外提供服务,避免单点故障
- 团队协作:不再强调超级个体,而是团队协作
- 弱者联盟:多个弱学习器组成强学习器
优势:
- 能力变强
- 不易发生过拟合
- 避免单点故障
4 代码示例
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
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
)
print(f"训练集: {X_train.shape}")
print(f"测试集: {X_test.shape}")
# 2. 单个决策树(弱学习器)
print("\n=== 单个决策树(弱学习器)===")
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, # 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. AdaBoost(Boosting思想)
print("\n=== AdaBoost(Boosting)===")
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. 对比
print("\n=== 对比 ===")
print(f"单个决策树: {dt_acc:.4f}")
print(f"随机森林(Bagging): {rf_acc:.4f}")
print(f"AdaBoost(Boosting): {ab_acc:.4f}")
# 6. 模拟Bagging的有放回抽样
print("\n=== 模拟Bagging有放回抽样 ===")
np.random.seed(42)
data_size = 1000
sample_size = 500
# 三个模型各自抽样
sample1 = np.random.choice(data_size, sample_size, replace=True)
sample2 = np.random.choice(data_size, sample_size, replace=True)
sample3 = np.random.choice(data_size, sample_size, replace=True)
# 计算交集
intersection_12 = len(set(sample1) & set(sample2))
intersection_13 = len(set(sample1) & set(sample3))
intersection_23 = len(set(sample2) & set(sample3))
print(f"模型1和模型2的交集: {intersection_12}")
print(f"模型1和模型3的交集: {intersection_13}")
print(f"模型2和模型3的交集: {intersection_23}")
print("既有交集又有差异,投票才有意义")
# 7. 投票决策示例
print("\n=== 投票决策示例 ===")
# 三个模型的预测结果
pred1 = np.array([1, 0, 1, 1, 0])
pred2 = np.array([1, 1, 1, 0, 0])
pred3 = np.array([0, 1, 1, 1, 0])
# 投票(多数表决)
from scipy.stats import mode
predictions = np.array([pred1, pred2, pred3])
final_pred = mode(predictions, axis=0)[0].ravel()
print(f"模型1: {pred1}")
print(f"模型2: {pred2}")
print(f"模型3: {pred3}")
print(f"投票结果: {final_pred}")
输出示例:
训练集: (800, 20)
测试集: (200, 20)
=== 单个决策树(弱学习器)===
准确率: 0.8950
=== 随机森林(Bagging)===
准确率: 0.9300
=== AdaBoost(Boosting)===
准确率: 0.9150
=== 对比 ===
单个决策树: 0.8950
随机森林(Bagging): 0.9300
AdaBoost(Boosting): 0.9150
=== 模拟Bagging有放回抽样 ===
模型1和模型2的交集: 316
模型1和模型3的交集: 318
模型2和模型3的交集: 314
既有交集又有差异,投票才有意义
=== 投票决策示例 ===
模型1: [1 0 1 1 0]
模型2: [1 1 1 0 0]
模型3: [0 1 1 1 0]
投票结果: [1 1 1 1 0]
5 重难点与易错提醒
- ❗重点:集成学习是思想,不是新模型。
- ❗重点:Bagging并行,Boosting串行。
- ❗重点:Bagging有放回抽样,投票决策。
- ❗重点:多个弱学习器组成强学习器。
- ⚠️易错:数据集相同、模型相同,结果必然相同。
- ⚠️易错:混淆Bagging和Boosting。
- 💡深入理解:集成学习类似团队协作,避免单点故障。
6 课堂问答精选
Q: 什么是集成学习?
A: 集成学习是通过多个模型组合形成精度更高的模型的思想。类似"三个臭皮匠顶个诸葛亮"。参与组合的模型称为弱学习器(基学习器),组合后的模型称为强学习器。集成学习不是新模型,而是一种思想。
Q: Bagging和Boosting有什么区别?
A:
- Bagging:并行训练,有放回抽样,投票决策。代表算法:随机森林。
- Boosting:串行训练,针对短板加强,加权决策。代表算法:AdaBoost、GBDT、XGBoost。
7 本课小结
- 集成学习:多个弱学习器组成强学习器。
- Bagging:并行,有放回抽样,投票。
- Boosting:串行,针对短板,加权。
- 随机森林:Bagging代表,底层是决策树。
- AdaBoost/GBDT/XGBoost:Boosting代表。
8 延伸思考与实践
- 实践:对比单个决策树和随机森林。
- 预习:Bagging和Boosting思想介绍。
- 思考:为什么集成学习能提高准确率?