其他参数中的参数 - 在集成学习中使用 bootstrap 聚合与随机森林
Parameters inside other parameters - using bootstrap aggregation with random forests in ensemble learning
假设我决定使用集成方法 - 如果它有所作为,我们将使用鸢尾花数据集。在可用的集成技术中,我们将重点关注并行方法,并从这些方法中使用 sklearn 进行 bootstrap 聚合。
Sklearn 通过使用 BaggingClassifier
实现 bootstrap 聚合,它(文档告诉我们)是“适合基分类器的集成元估计器……”在这些基分类器中,让我们 select RandomForestClassifier
,它本身就是“是一个适合许多决策树分类器的元估计器”。
我们被告知,Bootstrap 聚合主要有四种形式:装袋、粘贴、随机子空间和随机补丁。在 BaggingClassifier
中,我们通过操纵 BaggingClassifier
的 11 个参数中的 4 个来激活这四种口味中的每一种,即:bootstrap_features
(True/False), bootstrap
(True/False), max_features
(=1/<1), 和 max_samples
(=1/<1).
在 sklearn 中,要将 BaggingClassifier
与 RandomForestClassifier
一起使用,我们需要:
clf = BaggingClassifier(RandomForestClassifier(parameters), parameters)
原来RandomForestClassifier
的17个参数中,有两个和BaggingClassifier
的相同:bootstrap
和max_features
。虽然 bootstrap
对于 BaggingClassifier
和 RandomForestClassifier
是相同的(即抽样 with/without 替换),但我不确定 max_features
。在 BaggingClassifier
中,max_features
是“从 X 中提取要训练的特征数”,在这种情况下,RandomForestClassifier
。而在 RandomForestClassifier
中,它是“寻找最佳分割时要考虑的特征数量”。
最后,这让我想到了一个问题:我们如何协调这两个分类器中的这些参数,以便我们可以在随机森林中的每棵树中获得 bootstrap 聚合的四种风格?我不只是问这样的东西是否可以作为粘贴风味:
clf=BaggingClassifier(RandomForestClassifier(bootstrap = False, max_features = 1.0),
bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )
当 BaggingClassifier
调用 RandomForestClassifier
并将所有这些参数调整为不同的值时,我真的很想真正了解幕后发生的事情。
随机森林参数和集成分类器参数之间没有冲突。 Random Forest之所以有相似的参数(顺便说一句,max_features
在两者中是相同的,只是表述方式不同)是因为Random Forest本身是一个Ensemble算法。
因此,您在这里要实现的是集成分类器的集成,其中每个都有自己的参数。如果我稍微更改您的示例以使其更易于理解,我们有:
BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, max_features = 0.5), n_estimators = 5,
bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )
它是这样工作的:
- 首先,EnsembleClassifier 将获取所有特征(由
bootstrap_features = False, max_features = 1.0
给出)并抽取样本的 60% (max_samples = 0.6
),无需替换 (bootstrap = False
)
- 然后它将所有特征和 60% 的样本提供给 RandomForest
- 随机森林选择集成在上一步中传递的 50% 的特征(
max_features = 0.5
)(在我们的例子中,都是特征)并执行 bootstrap对集成分类器通过的 60% 样本进行采样(替换)。在此基础上,它训练决策树并重复此过程 n_estimators = 100
次,使用新功能和新 bootstraping
集成分类器重复 n_estimators = 5
次。
希望对您有所帮助!
TLDR:你传递给 RandomForestClassifier
和 EnsembleClassifier
的参数可能具有相同的名称并且实际上做同样的事情,他们在训练过程的不同阶段做,如果你设置bootstrap = False
在一个中,它不会将此参数值传递给另一个。
假设我决定使用集成方法 - 如果它有所作为,我们将使用鸢尾花数据集。在可用的集成技术中,我们将重点关注并行方法,并从这些方法中使用 sklearn 进行 bootstrap 聚合。
Sklearn 通过使用 BaggingClassifier
实现 bootstrap 聚合,它(文档告诉我们)是“适合基分类器的集成元估计器……”在这些基分类器中,让我们 select RandomForestClassifier
,它本身就是“是一个适合许多决策树分类器的元估计器”。
Bootstrap 聚合主要有四种形式:装袋、粘贴、随机子空间和随机补丁。在 BaggingClassifier
中,我们通过操纵 BaggingClassifier
的 11 个参数中的 4 个来激活这四种口味中的每一种,即:bootstrap_features
(True/False), bootstrap
(True/False), max_features
(=1/<1), 和 max_samples
(=1/<1).
在 sklearn 中,要将 BaggingClassifier
与 RandomForestClassifier
一起使用,我们需要:
clf = BaggingClassifier(RandomForestClassifier(parameters), parameters)
原来RandomForestClassifier
的17个参数中,有两个和BaggingClassifier
的相同:bootstrap
和max_features
。虽然 bootstrap
对于 BaggingClassifier
和 RandomForestClassifier
是相同的(即抽样 with/without 替换),但我不确定 max_features
。在 BaggingClassifier
中,max_features
是“从 X 中提取要训练的特征数”,在这种情况下,RandomForestClassifier
。而在 RandomForestClassifier
中,它是“寻找最佳分割时要考虑的特征数量”。
最后,这让我想到了一个问题:我们如何协调这两个分类器中的这些参数,以便我们可以在随机森林中的每棵树中获得 bootstrap 聚合的四种风格?我不只是问这样的东西是否可以作为粘贴风味:
clf=BaggingClassifier(RandomForestClassifier(bootstrap = False, max_features = 1.0),
bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )
当 BaggingClassifier
调用 RandomForestClassifier
并将所有这些参数调整为不同的值时,我真的很想真正了解幕后发生的事情。
随机森林参数和集成分类器参数之间没有冲突。 Random Forest之所以有相似的参数(顺便说一句,max_features
在两者中是相同的,只是表述方式不同)是因为Random Forest本身是一个Ensemble算法。
因此,您在这里要实现的是集成分类器的集成,其中每个都有自己的参数。如果我稍微更改您的示例以使其更易于理解,我们有:
BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, max_features = 0.5), n_estimators = 5,
bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )
它是这样工作的:
- 首先,EnsembleClassifier 将获取所有特征(由
bootstrap_features = False, max_features = 1.0
给出)并抽取样本的 60% (max_samples = 0.6
),无需替换 (bootstrap = False
) - 然后它将所有特征和 60% 的样本提供给 RandomForest
- 随机森林选择集成在上一步中传递的 50% 的特征(
max_features = 0.5
)(在我们的例子中,都是特征)并执行 bootstrap对集成分类器通过的 60% 样本进行采样(替换)。在此基础上,它训练决策树并重复此过程n_estimators = 100
次,使用新功能和新 bootstraping
- 随机森林选择集成在上一步中传递的 50% 的特征(
集成分类器重复 n_estimators = 5
次。
希望对您有所帮助!
TLDR:你传递给 RandomForestClassifier
和 EnsembleClassifier
的参数可能具有相同的名称并且实际上做同样的事情,他们在训练过程的不同阶段做,如果你设置bootstrap = False
在一个中,它不会将此参数值传递给另一个。