摘要:装袋法(Bagging)是一种集成学习技术,通过有放回抽样生成多个训练子集,分别训练基础模型后对预测结果进行平均或投票。该方法能降低模型方差,提高稳定性和准确性。示例展示了使用Scikit-learn实现装袋法的完整流程:加载鸢尾花数据集,基于决策树构建包含10个模型的装袋分类器,最终在测试集上获得100%的准确率。装袋法的核心优势在于通过模型多样性降低过拟合风险。
目录
机器学习 —— 自助聚合(装袋法)
装袋法的工作原理
示例:使用 Python 实现装袋法
代码说明
输出结果
机器学习 —— 自助聚合(装袋法)
装袋法(Bagging)是一种集成学习技术,它结合多个模型的预测结果,以提高单个模型的准确性和稳定性。其核心流程是通过有放回的随机抽样创建训练数据的多个子集,用每个子集分别训练一个独立模型,最终通过对所有模型的预测结果取平均(回归任务)或多数投票(分类任务)得到最终预测结果。
装袋法的核心思想是:通过使用多个复杂度较低但仍具备准确性的模型,降低单个模型的方差。通过对多个模型的预测结果进行融合,装袋法能有效降低过拟合风险,提升模型的稳定性。
装袋法的工作原理
装袋法算法按以下步骤执行:
- 通过有放回的随机抽样,生成训练数据的多个子集;
- 用每个数据子集分别训练一个独立的模型;
- 让每个训练好的模型对测试数据进行预测;
- 对所有模型的预测结果进行融合,具体方式为取平均(回归)或多数投票(分类)。
装袋法的关键特征是每个模型都基于训练数据的不同子集进行训练,这为集成模型引入了多样性。这些模型通常采用基础估计器(基模型)训练,例如决策树、逻辑回归或支持向量机等。
示例:使用 Python 实现装袋法
下面将展示如何使用 Scikit-learn 库在 Python 中实现装袋法,本示例将使用经典的鸢尾花(Iris)数据集。
# 导入所需库 from sklearn.datasets import load_iris from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = load_iris() # 将数据分割为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42) # 定义基础估计器(决策树,最大深度为3) base_estimator = DecisionTreeClassifier(max_depth=3) # 定义装袋分类器(包含10个决策树模型) bagging = BaggingClassifier(base_estimator=base_estimator, n_estimators=10, random_state=42) # 训练装袋分类器 bagging.fit(X_train, y_train) # 用训练好的模型对测试集进行预测 y_pred = bagging.predict(X_test) # 评估模型准确率 accuracy = accuracy_score(y_test, y_pred) print("准确率(Accuracy):", accuracy)代码说明
- 首先使用 Scikit-learn 的
load_iris函数加载鸢尾花数据集,并通过train_test_split函数将数据集分割为训练集(占比 80%)和测试集(占比 20%);- 定义基础估计器为最大深度为 3 的决策树,避免单棵决策树过拟合;
- 构建装袋分类器,包含 10 个基于不同数据子集训练的决策树模型;
- 使用
fit方法训练装袋分类器,通过predict方法对测试集进行预测;- 利用 Scikit-learn 的
accuracy_score函数计算模型在测试集上的准确率。
输出结果
运行上述代码后,将得到以下输出:
准确率(Accuracy): 1.0