共计 1934 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍
在机器学习中,欠拟合和过拟合是模型开发过程中最常见的两类问题。欠拟合指的是模型无法捕捉数据的基本特征,导致在训练集和测试集上表现都很差。过拟合则是模型过度适应训练数据,甚至记住了噪声,导致在训练集上表现很好但在测试集上表现不佳。这两类问题都会严重影响模型的泛化能力。

技术对比:Bagging 与 Boosting
- Bagging(如随机森林)
- 原理:通过并行训练多个基学习器,并对其结果进行投票或平均。
-
适用场景:适用于高方差(过拟合)问题,能够有效减少模型的方差。
-
Boosting(如 XGBoost)
- 原理:通过串行训练多个弱学习器,每个学习器都尝试修正前一个学习器的错误。
- 适用场景:适用于高偏差(欠拟合)问题,能够有效减少模型的偏差。
实战演示
随机森林解决欠拟合
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 生成样本数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 初始化随机森林模型
rf = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
# 训练模型
rf.fit(X_train, y_train)
# 评估模型
print("训练集准确率:", rf.score(X_train, y_train))
print("测试集准确率:", rf.score(X_test, y_test))
XGBoost 解决过拟合
import xgboost as xgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 生成样本数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 初始化 XGBoost 模型
xgb_model = xgb.XGBClassifier(n_estimators=100, max_depth=3, learning_rate=0.1, subsample=0.8, colsample_bytree=0.8, random_state=42)
# 训练模型
xgb_model.fit(X_train, y_train)
# 评估模型
print("训练集准确率:", xgb_model.score(X_train, y_train))
print("测试集准确率:", xgb_model.score(X_test, y_test))
性能优化
- 随机森林关键参数
n_estimators:树的数量,通常越大越好,但会增加计算成本。max_depth:树的最大深度,控制模型的复杂度。-
min_samples_split:节点分裂所需的最小样本数,防止过拟合。 -
XGBoost 关键参数
learning_rate:学习率,控制每次迭代的步长。subsample:样本采样比例,防止过拟合。colsample_bytree:特征采样比例,增加模型的多样性。
避坑指南
- 随机森林常见错误
- 使用过多的树导致计算资源浪费。
-
忽略特征重要性分析。
-
XGBoost 常见错误
- 学习率设置过高导致模型不稳定。
- 忽略早停(early stopping)机制。
总结与思考题
集成学习方法在解决欠拟合和过拟合问题上表现出色,尤其是 Bagging 和 Boosting 两类算法。通过合理调参,可以进一步提升模型性能。
思考题:
1. 尝试在不同的数据集上应用随机森林和 XGBoost,观察它们的效果。
2. 调整 XGBoost 的 learning_rate 和max_depth参数,看看模型性能如何变化。
3. 比较 Bagging 和 Boosting 在相同数据集上的表现,分析它们的优缺点。
正文完
发表至: 未分类
近两天内
