Bagging分类器中的’max_samples’关键字如何影响每个基础估计器使用的样本数量?

我想了解Bagging分类器中的max_samples值如何影响每个基础估计器使用的样本数量。

这是网格搜索的输出:

GridSearchCV(cv=5, error_score='raise',       estimator=BaggingClassifier(base_estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,            max_features=None, max_leaf_nodes=None, min_samples_leaf=1,            min_samples_split=2, min_weight_fraction_leaf=0.0,            presort=False, random_state=1, spl... n_estimators=100, n_jobs=-1, oob_score=False,         random_state=1, verbose=2, warm_start=False),       fit_params={}, iid=True, n_jobs=-1,       param_grid={'max_features': [0.6, 0.8, 1.0], 'max_samples': [0.6, 0.8, 1.0]},       pre_dispatch='2*n_jobs', refit=True, scoring=None, verbose=2)

这里我正在找出最佳参数是什么:

print gs5.best_score_, gs5.best_params_0.828282828283 {'max_features': 0.6, 'max_samples': 1.0}

现在我正在挑选最佳的网格搜索估计器,并试图查看该特定Bagging分类器在其100个基础决策树估计器中使用的样本数量。

val=[]for i in np.arange(100):    x = np.bincount(gs5.best_estimator_.estimators_samples_[i])[1]    val.append(x)print np.max(val)print np.mean(val), np.std(val)587563.92 10.3399032877

现在,训练集的大小是891。由于CV是5,891 * 0.8 = 712.8应该进入每个Bagging分类器评估中,并且由于max_samples是1.0,891 * 0.5 * 1.0 = 712.8应该是每个基础估计器的样本数量,或者接近这个数字?

那么,为什么数字在564 +/- 10的范围内,最大值为587,而根据计算,它应该接近712呢?谢谢。


回答:

经过更多的研究,我认为我已经弄清楚了这是怎么回事。GridSearchCV对训练数据使用交叉验证来确定最佳参数,但它返回的估计器是在整个训练集上进行拟合的,而不是CV折叠中的一个。这是有道理的,因为更多的训练数据通常会更好。

因此,从GridSearchCV获得的BaggingClassifier是针对891个数据样本的完整数据集进行拟合的。确实如此,当max_sample=1.时,每个基础估计器将从训练集中随机抽取891个样本。然而,默认情况下样本是有放回地抽取的,因此由于重复,唯一样本的数量将少于总样本数量。如果你想无放回地抽取,设置BaggingClassifier的bootstrap关键字为false。

现在,当无放回抽样时,我们期望不同样本的数量与数据集大小有多接近呢?

根据这个问题,当从一组n个样本中以放回方式抽取n个样本时,预期的不同样本数量为n * (1-(n-1)/n) ^ n。当我们将891代入时,我们得到

>>> 891 * (1.- (890./891)**891)563.4034437025824

预期的样本数量(563.4)与你观察到的平均值(563.8)非常接近,所以看起来没有什么异常情况发生。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注