问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Bagging和随机森林:机器学习中的集成学习方法

创作时间:
作者:
@小白创作中心

Bagging和随机森林:机器学习中的集成学习方法

引用
CSDN
1.
https://m.blog.csdn.net/qq_28309121/article/details/145882169

Bagging和随机森林是机器学习中常用的集成学习方法,它们通过组合多个弱学习器来提高模型的泛化能力。本文将详细介绍这两种方法的原理、实现过程以及应用场景。

Bagging集成原理

Bagging(Bootstrap Aggregating)是一种集成学习方法,其核心思想是通过Bootstrap采样生成多个数据集,然后在每个数据集上训练一个基学习器,最后通过投票或平均的方式组合这些基学习器的预测结果。

具体实现过程如下:

  1. 从原始数据集中有放回地随机采样生成多个数据集
  2. 在每个采样数据集上训练一个基学习器
  3. 对所有基学习器的预测结果进行平权投票(分类任务)或平均(回归任务),得到最终的预测结果

Bagging的主要优点是能够降低模型的方差,提高预测的稳定性。通过引入数据扰动,Bagging可以有效地减少过拟合的风险。

随机森林构造过程

随机森林(Random Forest)是一种基于决策树的Bagging集成方法。它在Bagging的基础上引入了特征随机化,即在每个节点的分裂过程中,只考虑随机选择的一部分特征。这种额外的随机化进一步提高了模型的多样性,从而增强了模型的泛化能力。

随机森林的构造过程可以总结为以下步骤:

  1. 从原始数据集中有放回地随机采样生成多个数据集
  2. 在每个采样数据集上训练一棵决策树,但在每个节点的分裂过程中,只考虑随机选择的一部分特征
  3. 对所有决策树的预测结果进行平权投票(分类任务)或平均(回归任务),得到最终的预测结果

随机森林的关键参数包括:

  • 树的数量(n_estimators)
  • 每棵树的最大深度(max_depth)
  • 每个节点分裂时考虑的特征数量(max_features)
  • 是否使用放回抽样(bootstrap)

包外估计

在随机森林的构造过程中,由于使用了有放回的抽样,每次采样都会有一部分样本没有被选中,这部分样本被称为包外数据(Out-of-Bag,OOB)。包外数据可以用于评估模型的性能,这种评估方法称为包外估计。

包外估计的主要优点是:

  • 无需额外的测试集,可以利用训练数据进行评估
  • 是对集成分类器泛化误差的无偏估计
  • 可以用于计算特征的重要性

随机森林API介绍

在Python的scikit-learn库中,随机森林的实现类为RandomForestClassifier(分类任务)和RandomForestRegressor(回归任务)。以下是RandomForestClassifier的主要参数:

  • n_estimators:森林中的树的数量,默认为10
  • criterion:用于衡量分裂质量的标准,默认为"gini"
  • max_depth:树的最大深度,默认为None
  • bootstrap:是否在构建树时使用放回抽样,默认为True
  • max_features:每个决策树的最大特征数量,默认为"auto"
  • random_state:随机数种子,用于控制随机性
  • min_samples_split:内部节点再划分所需最小样本数,默认为2

随机森林预测案例

下面通过一个泰坦尼克号生存预测的案例来说明随机森林的应用:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report

# 读取数据
df = pd.read_csv("泰坦尼克号数据.csv")

# 数据预处理
x = df[['Pclass', 'Age', 'Sex']]
y = df['Survived']
x.loc[:, ['Age']] = x.loc[:, ['Age']].fillna(x.loc[:, ['Age']].mean())
x = pd.get_dummies(x)  # 进行One-Hot编码

# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)

# 决策树模型
dtc = DecisionTreeClassifier()
dtc.fit(x_train, y_train)
dtc_pred = dtc.predict(x_test)
print("决策树准确率:", dtc.score(x_test, y_test))
print("决策树分类报告:")
print(classification_report(dtc_pred, y_test))

# 随机森林模型
rfc = RandomForestClassifier(max_depth=6, random_state=9)
rfc.fit(x_train, y_train)
rfc_pred = rfc.predict(x_test)
print("随机森林准确率:", rfc.score(x_test, y_test))
print("随机森林分类报告:")
print(classification_report(rfc_pred, y_test))

# 超参数调优
rf = RandomForestClassifier()
param = {"n_estimators": [80, 100, 200], "max_depth": [2, 4, 6, 8, 10, 12], "random_state": [9]}
gc = GridSearchCV(rf, param_grid=param, cv=2)
gc.fit(x_train, y_train)
print("最佳参数:", gc.best_params_)
print("随机森林预测的准确率为:", gc.score(x_test, y_test))

Bagging集成优点

Bagging集成方法具有以下优点:

  1. 可以在原有算法上提高约2%左右的泛化正确率
  2. 实现简单,使用方便,具有很好的通用性

Bagging可以与多种基学习器结合使用,如决策树、线性回归、逻辑回归、深度学习等,形成不同的Bagging集成学习方法。

总结

  • Bagging集成过程:

    1. 采样 — 从所有样本里面,采样一部分
    2. 学习 — 训练弱学习器
    3. 集成 — 使用平权投票
  • 随机森林介绍:

  • 随机森林定义:随机森林 = Bagging + 决策树

  • 流程:

    1. 随机选取m条数据
    2. 随机选取k个特征
    3. 训练决策树
    4. 重复1-3
    5. 对上面的若决策树进行平权投票
  • 注意:

    1. 随机选取样本,且是有放回的抽取
    2. 选取特征的时候吗,选择m< M(M是所有的特征数)
  • 包外估计:如果进行有放回的对数据集抽样,会发现,总是有一部分样本选不到

  • API:sklearn.ensemble.RandomForestClassifier()

  • Bagging + 决策树/线性回归/逻辑回归/深度学习… = bagging集成学习方法

  • bagging的优点:

    1. 均可在原有算法上提高约2%左右的泛化正确率
    2. 简单, 方便, 通用
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号