深度学习:Bagging 方法

一、Bagging 方法

Bagging(Bootstrap Aggregating)是一种用于提升模型性能的集成学习方法。它通过将多次采样得到的不同训练集分别训练多个模型,然后将这些模型的预测结果结合在一起,来降低模型的方差,从而提升整体的准确性和稳定性。Bagging 的主要步骤如下:

  1. 数据重采样:从原始训练集(大小为 N)中有放回地随机采样生成多个训练集,每个训练集的大小同样为 N。每个训练集可能会包含重复的样本,而原始训练集中的一些样本可能不会出现在某个特定的采样集中。这种有放回的采样过程称为 Bootstrap

  2. 模型训练:对每个采样的训练集分别训练一个模型。常用的模型可以是决策树、神经网络等。

  3. 集成预测:对于分类问题,使用多个模型预测的结果进行投票(即多数表决),最终的预测结果为得票最多的类别。对于回归问题,取多个模型预测结果的平均值作为最终的预测结果。

公式表示

假设我们有一个训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } D = \{(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)\} D={(x1,y1),(x2,y2),,(xN,yN)},Bagging 的具体步骤如下:

  1. 生成 B B B个Bootstrap数据集 D 1 , D 2 , … , D B D_1, D_2, \dots, D_B D1,D2,,DB,每个 D i D_i Di通过从 D D D中有放回地采样得到。

  2. 对每个 D i D_i Di 训练一个模型 f i f_i fi

  3. 对于分类任务,Bagging的最终预测 y ^ \hat{y} y^为:
      y ^ = mode { f 1 ( x ) , f 2 ( x ) , … , f B ( x ) } \ \hat{y} = \text{mode} \{ f_1(x), f_2(x), \dots, f_B(x) \}  y^=mode{f1(x),f2(x),,fB(x)}

    其中, mode \text{mode} mode表示多数表决。

    对于回归任务,Bagging 的最终预测为:
      y ^ = 1 B ∑ i = 1 B f i ( x ) \ \hat{y} = \frac{1}{B} \sum_{i=1}^{B} f_i(x)  y^=B1i=1Bfi(x)

优点
  1. 降低方差:通过构建多个模型并结合它们的预测结果,Bagging 减少了单个模型的方差,提升了模型的稳定性。
  2. 防止过拟合:由于对数据进行重采样训练多个模型,Bagging 可以有效防止单个模型过拟合。
缺点
  1. 计算成本高:Bagging 需要训练多个模型,特别是当基模型复杂或数据量较大时,计算开销会显著增加。
  2. 模型解释性差:Bagging 是一种集成方法,最终的预测结果来自多个模型的集成,解释单个预测结果背后的机制变得更加复杂。
示例:Bagging 应用于决策树

在经典的 Bagging 方法中,常使用决策树作为基模型。这种方法也被称为 随机森林。通过对多个决策树的集成,可以显著提升单棵决策树的预测性能。

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 创建数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用Bagging方法构建多个决策树
bagging_model = BaggingClassifier(base_estimator=DecisionTreeClassifier(), n_estimators=10, random_state=42)
bagging_model.fit(X_train, y_train)

# 预测
y_pred = bagging_model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

在这个例子中,BaggingClassifier 使用了多个决策树 n e s t i m a t o r s = 10 n_estimators=10 nestimators=10进行集成,最终得到了更加稳定的分类结果。

Bagging 的经典应用包括随机森林,这种方法通过 Bagging 集成多个决策树,显著提高了模型的准确率和鲁棒性。

在 Bagging 方法中,多个模型通过集成的方式预测测试集的结果。具体过程如下:

二、多个模型预测结果过程

1. 训练多个基模型

Bagging 通过有放回的采样方法,从训练集生成多个不同的数据子集,每个子集用来训练一个基模型。假设我们训练了 B B B 个基模型 f 1 , f 2 , … , f B f_1, f_2, \dots, f_B f1,f2,,fB,每个模型通过不同的训练数据进行学习,但它们的结构通常相同(比如每个模型都是一个决策树)。

2. 测试集上的预测

当我们有一个测试样本 x x x时,Bagging 会让所有训练好的基模型分别对 x x x 进行预测。然后再通过一定的集成策略,得到最终的预测结果。

3. 集成策略

Bagging 常用的集成策略根据任务不同,主要有以下两种:

  1. 分类问题

    • 每个基模型 f i f_i fi 会给出一个类别预测结果,比如 y ^ i = f i ( x ) \hat{y}_i = f_i(x) y^i=fi(x)

    • 最终的集成结果采用“多数投票法”(majority voting)。即选择出现次数最多的类别作为最终预测结果:
        y ^ = mode { y ^ 1 , y ^ 2 , … , y ^ B } \ \hat{y} = \text{mode}\{\hat{y}_1, \hat{y}_2, \dots, \hat{y}_B\}  y^=mode{y^1,y^2,,y^B}

      其中, mode \text{mode} mode 表示众数操作,即选择频率最高的类别作为最终预测结果。

  2. 回归问题

    • 每个基模型 f i f_i fi 会输出一个数值预测结果 y ^ i = f i ( x ) \hat{y}_i = f_i(x) y^i=fi(x)

    • 最终的集成结果通过平均每个模型的预测结果来得到:
        y ^ = 1 B ∑ i = 1 B f i ( x ) \ \hat{y} = \frac{1}{B} \sum_{i=1}^{B} f_i(x)  y^=B1i=1Bfi(x)

      这种方法可以减少单个模型预测的方差,从而提高模型的整体性能。

示例:多个模型预测测试集结果(分类任务)

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 创建数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用 Bagging 方法构建多个决策树
bagging_model = BaggingClassifier(base_estimator=DecisionTreeClassifier(), n_estimators=10, random_state=42)
bagging_model.fit(X_train, y_train)

# 对测试集进行预测
y_pred = bagging_model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Test Accuracy: {accuracy:.2f}")
代码解释:
  • 训练多个模型BaggingClassifier 使用 10 个决策树(n_estimators=10)作为基模型。每个基模型在不同的采样训练集上进行训练。
  • 预测测试集bagging_model.predict(X_test) 让每个基模型对测试集进行预测,然后通过多数投票的方式得到最终的分类结果。
  • 集成效果:预测结果通过 10 个模型的集成,减少了单一模型的偏差和方差,提升了准确率。

回归任务集成预测示例

对于回归问题,Bagging 会对每个基模型的预测结果取平均值:

from sklearn.ensemble import BaggingRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 创建数据集
X, y = make_regression(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用 Bagging 方法构建多个回归树
bagging_model = BaggingRegressor(base_estimator=DecisionTreeRegressor(), n_estimators=10, random_state=42)
bagging_model.fit(X_train, y_train)

# 对测试集进行预测
y_pred = bagging_model.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")

在这个回归任务中,每个基模型对测试集的输出值取平均,从而得到更平滑和稳定的预测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值