3.2. 调整估计器的超参数#
超参数是在估计器中不直接学习的参数。在scikit-learn中,它们作为参数传递给估计器类的构造器。典型的例子包括 C
, kernel
和 gamma
对于支持载体分类器, alpha
对于套索等
这是可能的,并建议搜索超参数空间的最佳 cross validation 得分
在构造估计器时提供的任何参数都可以以这种方式优化。具体来说,要查找给定估计器所有参数的名称和当前值,请用途::
estimator.get_params()
搜索包括:
估计器(回归器或分类器,
sklearn.svm.SVC()
);参数空间;
搜索或抽样候选人的方法;
交叉验证计划;以及
一 score function .
scikit-learn中提供了两种参数搜索的通用方法:对于给定的值, GridSearchCV
详尽考虑所有参数组合,同时 RandomizedSearchCV
可以从具有指定分布的参数空间中采样给定数量的候选。这两种工具的对应工具连续减半 HalvingGridSearchCV
和 HalvingRandomSearchCV
,这可以更快地找到良好的参数组合。
在描述了这些工具后,我们详细介绍了 best practices 适用于这些方法。某些模型允许专业、高效的参数搜索策略,如中所述 暴力参数搜索的替代方案 .
请注意,这些参数的一小部分可能会对模型的预测或计算性能产生很大影响,而其他参数可能会保留其默认值,这是常见的。建议阅读估计器类的文档字符串,以更好地了解其预期行为,可能通过阅读随附的文献参考来进行。
3.2.1. 详尽的网格搜索#
网格搜索由 GridSearchCV
从用 param_grid
参数.例如,以下内容 param_grid
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
指定应探索两个网格:一个具有线性核心和C值 [1, 10, 100, 1000] ,第二个具有RBS核,C值的叉积范围在 [1, 10, 100, 1000] 和伽马值, [0.001, 0.0001] .
的 GridSearchCV
实例实现通常的估计器API:当将其“匹配”到数据集时,会评估参数值的所有可能组合并保留最佳组合。
示例
看到 嵌套与非嵌套交叉验证 对于虹膜数据集的交叉验证循环中的网格搜索示例。这是使用网格搜索评估模型性能的最佳实践。
看到 用于文本特征提取和评估的样本管道 对于网格搜索的示例,将来自文本文档特征提取器(n-gram计数向量化器和TF-IDF Transformer)的参数与分类器(这里是用SGD训练的线性SVM,具有弹性网或L2惩罚)耦合,使用
Pipeline
instance.
先进典型#
看到 嵌套与非嵌套交叉验证 对于虹膜数据集的交叉验证循环中的网格搜索示例。这是使用网格搜索评估模型性能的最佳实践。
看到 基于cross_val_score和GridSearchCV的多度量评估演示 的示例
GridSearchCV
用于同时评估多个指标。看到 平衡模型复杂性和交叉验证分数 例如使用
refit=callable
界面GridSearchCV
.该示例展示了该界面如何在识别“最佳”估计器方面增加了一定程度的灵活性。该界面还可以用于多个指标评估。看到 使用网格搜索进行模型统计比较 例如如何对的输出进行统计比较
GridSearchCV
.
3.2.2. 随机参数优化#
虽然使用参数设置网格是目前最广泛使用的参数优化方法,但其他搜索方法具有更有利的属性。 RandomizedSearchCV
实现参数随机搜索,其中每个设置都是从可能参数值的分布中采样的。与详尽搜索相比,这有两个主要好处:
可以独立于参数的数量和可能的值来选择预算。
添加不影响性能的参数不会降低效率。
详细说明应如何对参数进行采样是使用字典完成的,与指定参数非常相似 GridSearchCV
.此外,计算预算(即采样候选项或采样迭代的数量)是使用 n_iter
参数.对于每个参数,可以指定可能值的分布或离散选择列表(将被统一采样)::
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
此示例使用 scipy.stats
模块,其中包含许多有用的采样参数分布,例如 expon
, gamma
, uniform
, loguniform
或 randint
.
原则上,任何提供 rvs
(随机变量样本)对值进行抽样的方法。电话给 rvs
函数应该从连续调用的可能参数值中提供独立的随机样本。
警告
中的分布 scipy.stats
scipy 0.16版本之前不允许指定随机状态。相反,它们使用全局numpy随机状态,可以通过 np.random.seed
或使用 np.random.set_state
.然而,从scikit-learn 0.18开始, sklearn.model_selection
如果scipy >= 0.16也可用,则模块设置由用户提供的随机状态。
对于连续参数,例如 C
在上述情况下,重要的是指定连续分布以充分利用随机化。通过这种方式, n_iter
总是会导致更好的搜索。
连续的log均匀随机变量是log间隔参数的连续版本。例如,指定相当于 C
从上面看, loguniform(1, 100)
可以用来代替 [1, 10, 100]
.
在网格搜索中镜像上面的例子,我们可以指定一个连续随机变量,该变量在之间保持log均匀分布 1e0
和 1e3
from sklearn.utils.fixes import loguniform
{'C': loguniform(1e0, 1e3),
'gamma': loguniform(1e-4, 1e-3),
'kernel': ['rbf'],
'class_weight':['balanced', None]}
示例
比较随机搜索和网格搜索用于超参数估计 比较了随机搜索和网格搜索的使用和效率。
引用
Bergstra,J.和Bengio,Y.,超参数优化的随机搜索,《机器学习研究杂志》(2012年)
3.2.3. 通过连续减半寻找最佳参数#
Scikit-learn还提供 HalvingGridSearchCV
和 HalvingRandomSearchCV
可用于使用连续减半搜索参数空间的估计器 [1] [2] .连续减半(SH)就像候选参数组合之间的锦标赛。SH是一个迭代选择过程,其中在第一次迭代时使用少量资源评估所有候选项(参数组合)。只有其中一些候选人被选择用于下一次迭代,下一次迭代将被分配更多资源。对于参数调优,资源通常是训练样本的数量,但它也可以是任意数字参数,例如 n_estimators
在一片随机的森林中。
备注
选择的资源增加应该足够大,以便在考虑统计显着性时获得分数的大幅提高。
如下图所示,只有一部分候选人“存活”到最后一次迭代。这些候选人在所有迭代中一直排在最高得分的候选人之列。每次迭代都为每个候选者分配越来越多的资源,这里是样本的数量。

我们在这里简要介绍了主要参数,但每个参数及其相互作用将在下面的第二节中详细描述。的 factor
(> 1)参数控制资源增长的速度和候选数量减少的速度。在每次迭代中,每个候选人的资源数量乘以 factor
候选人数除以同一因子。随着 resource
和 min_resources
, factor
是我们的实现中控制搜索的最重要参数,尽管值3通常效果良好。 factor
有效控制中的迭代次数 HalvingGridSearchCV
以及候选项(默认情况下)和迭代的数量 HalvingRandomSearchCV
. aggressive_elimination=True
如果可用资源数量较少,也可以使用。通过调整 min_resources
参数.
这些估计者仍然 experimental :他们的预测和API可能会在没有任何弃用周期的情况下发生变化。要使用它们,您需要显式导入 enable_halving_search_cv
>>> from sklearn.experimental import enable_halving_search_cv # noqa
>>> from sklearn.model_selection import HalvingGridSearchCV
>>> from sklearn.model_selection import HalvingRandomSearchCV
示例
以下部分深入探讨了连续减半的技术方面。
选择 min_resources
以及候选人数量#
旁边 factor
,影响连续减半搜索行为的两个主要参数是 min_resources
参数以及评估的候选项(或参数组合)的数量。 min_resources
是第一次迭代为每个候选人分配的资源量。候选人数直接在 HalvingRandomSearchCV
,并根据 param_grid
参数 HalvingGridSearchCV
.
考虑这样一种情况,其中资源是样本数量,并且我们有1000个样本。理论上,与 min_resources=10
和 factor=2
,我们能够跑 at most 7次迭代,样本数量如下: [10, 20, 40, 80, 160, 320, 640]
.
但根据候选者的数量,我们可能会运行少于7次迭代:如果我们从一个 small 由于候选项的数量,最后一次迭代可能使用少于640个样本,这意味着没有使用所有可用资源(样本)。例如,如果我们从5个候选项开始,我们只需要2次迭代:第一次迭代有5个候选项,然后 5 // 2 = 2
第二次迭代时的候选人,之后我们知道哪个候选人表现最好(所以我们不需要第三个)。我们最多只能使用20个样本,这是一种浪费,因为我们有1000个样本可供使用。另一方面,如果我们从 high 候选人的数量,我们可能会在最后一次迭代中得到很多候选人,这可能并不总是理想的:这意味着许多候选人将使用全部资源运行,基本上将过程减少到标准搜索。
的情况下 HalvingRandomSearchCV
,默认情况下设置候选项的数量,以便最后一次迭代使用尽可能多的可用资源。为 HalvingGridSearchCV
,候选人数由 param_grid
参数.改变的价值 min_resources
将影响可能的迭代次数,因此也将影响候选者的理想数量。
选择时的另一个考虑因素 min_resources
是否容易用少量的资源来区分好的和坏的候选人。例如,如果需要大量样本来区分好参数和坏参数, min_resources
建议。另一方面,如果即使样本量很少,区分也很明显,那么就很小 min_resources
可能是更好的,因为它会加速计算。
请注意,在上面的例子中,最后一次迭代没有使用最大数量的可用资源:有1000个样本可用,但最多只使用了640个样本。默认情况下,两者 HalvingRandomSearchCV
和 HalvingGridSearchCV
尝试在最后一次迭代中使用尽可能多的资源,但限制是资源量必须是两者的倍数 min_resources
和 factor
(this在下一节中将清楚地说明这一限制)。 HalvingRandomSearchCV
通过对适量的候选人进行抽样来实现这一目标,而 HalvingGridSearchCV
通过正确设置来实现这一目标 min_resources
.
每次迭代中的资源量和候选项数量#
在任何迭代中 i
,每个候选人都被分配了一定数量的资源,我们表示 n_resources_i
.该数量由参数控制 factor
和 min_resources
如下 (factor
严格大于1)::
n_resources_i = factor**i * min_resources,
或等效地::
n_resources_{i+1} = n_resources_i * factor
哪里 min_resources == n_resources_0
是第一次迭代使用的资源量。 factor
还定义了下一次迭代将选择的候选人比例::
n_candidates_i = n_candidates // (factor ** i)
或等效地::
n_candidates_0 = n_candidates
n_candidates_{i+1} = n_candidates_i // factor
所以在第一次迭代中,我们使用 min_resources
资源 n_candidates
次在第二次迭代中,我们使用 min_resources * factor
资源 n_candidates // factor
次第三种方法再次乘以每个候选人的资源并划分候选人的数量。当达到每个候选人的最大资源量或当我们确定了最佳候选人时,此过程就会停止。在正在评估的迭代中确定最佳候选人 factor
或更少的候选人(请参阅下面的解释)。
这是一个例子, min_resources=3
和 factor=2
,从70名候选人开始:
|
|
---|---|
3(=min_resources) |
70(=n_候选人) |
3 * 2 = 6 |
70 // 2 = 35 |
6 * 2 = 12 |
35 // 2 = 17 |
12 * 2 = 24 |
17 // 2 = 8 |
24 * 2 = 48 |
8 // 2 = 4 |
48 * 2 = 96 |
4 // 2 = 2 |
我们可以注意到:
该过程在第一次迭代时停止,该迭代评估
factor=2
候选人:最好的候选人是这2名候选人中最好的。没有必要运行额外的迭代,因为它只会评估一个候选人(即我们已经确定的最佳候选人)。出于这个原因,一般来说,我们希望最后一次迭代最多运行factor
候选人如果最后一次迭代的评估结果超过factor
候选者,然后最后一次迭代简化为常规搜索(如RandomizedSearchCV
或GridSearchCV
).每个
n_resources_i
是两者的倍数factor
和min_resources
(这通过上面的定义得到了证实)。
每次迭代使用的资源量可以在 n_resources_
属性
选择资源#
默认情况下,资源根据样本数量定义。也就是说,每次迭代都会使用越来越多的样本进行训练。但是,您可以手动指定一个参数,用作 resource
参数.以下是一个示例,其中资源是根据随机森林的估计量数量定义的::
>>> from sklearn.datasets import make_classification
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.experimental import enable_halving_search_cv # noqa
>>> from sklearn.model_selection import HalvingGridSearchCV
>>> import pandas as pd
>>> param_grid = {'max_depth': [3, 5, 10],
... 'min_samples_split': [2, 5, 10]}
>>> base_estimator = RandomForestClassifier(random_state=0)
>>> X, y = make_classification(n_samples=1000, random_state=0)
>>> sh = HalvingGridSearchCV(base_estimator, param_grid, cv=5,
... factor=2, resource='n_estimators',
... max_resources=30).fit(X, y)
>>> sh.best_estimator_
RandomForestClassifier(max_depth=5, n_estimators=24, random_state=0)
请注意,不可能对属于参数网格一部分的参数进行预算。
耗尽可用资源#
如上所述,每次迭代使用的资源数量取决于 min_resources
参数.如果您有很多可用资源,但一开始的资源数量很少,则其中一些可能会被浪费(即未使用)::
>>> from sklearn.datasets import make_classification
>>> from sklearn.svm import SVC
>>> from sklearn.experimental import enable_halving_search_cv # noqa
>>> from sklearn.model_selection import HalvingGridSearchCV
>>> import pandas as pd
>>> param_grid= {'kernel': ('linear', 'rbf'),
... 'C': [1, 10, 100]}
>>> base_estimator = SVC(gamma='scale')
>>> X, y = make_classification(n_samples=1000)
>>> sh = HalvingGridSearchCV(base_estimator, param_grid, cv=5,
... factor=2, min_resources=20).fit(X, y)
>>> sh.n_resources_
[20, 40, 80]
搜索过程最多只会使用80个资源,而我们的最大可用资源量是 n_samples=1000
.这里有 min_resources = r_0 = 20
.
为 HalvingGridSearchCV
,默认情况下, min_resources
参数设置为“exhaust”。这意味着 min_resources
被自动设置,以便最后一次迭代可以在 max_resources
限制::
>>> sh = HalvingGridSearchCV(base_estimator, param_grid, cv=5,
... factor=2, min_resources='exhaust').fit(X, y)
>>> sh.n_resources_
[250, 500, 1000]
min_resources
在这里被自动设置为250,这会导致使用所有资源的最后一次迭代。使用的确切值取决于候选参数的数量, max_resources
和 factor
.
为 HalvingRandomSearchCV
,可以通过两种方式耗尽资源:
通过设置
min_resources='exhaust'
,就像HalvingGridSearchCV
;通过设置
n_candidates='exhaust'
.
这两种选择是相互排斥的:使用 min_resources='exhaust'
需要了解候选人的数量,并且对称 n_candidates='exhaust'
需要知道 min_resources
.
一般来说,耗尽资源总数会得到更好的最终候选参数,并且时间稍微密集一些。
3.2.3.1. 积极淘汰候选人#
使用 aggressive_elimination
参数,您可以强制搜索过程最终得到少于 factor
最后一次迭代的候选人。
主动消除的代码示例#
理想情况下,我们希望最后一次迭代进行评估 factor
候选人然后我们只需要选择最好的。当可用资源的数量相对于候选数量较小时,最后一次迭代可能必须评估超过 factor
候选人::
>>> from sklearn.datasets import make_classification
>>> from sklearn.svm import SVC
>>> from sklearn.experimental import enable_halving_search_cv # noqa
>>> from sklearn.model_selection import HalvingGridSearchCV
>>> import pandas as pd
>>> param_grid = {'kernel': ('linear', 'rbf'),
... 'C': [1, 10, 100]}
>>> base_estimator = SVC(gamma='scale')
>>> X, y = make_classification(n_samples=1000)
>>> sh = HalvingGridSearchCV(base_estimator, param_grid, cv=5,
... factor=2, max_resources=40,
... aggressive_elimination=False).fit(X, y)
>>> sh.n_resources_
[20, 40]
>>> sh.n_candidates_
[6, 3]
由于我们不能使用超过 max_resources=40
资源,流程必须停止在第二次迭代,该迭代评估超过 factor=2
候选人
当使用 aggressive_elimination
,该过程将使用必要的方法消除尽可能多的候选人 min_resources
资源::
>>> sh = HalvingGridSearchCV(base_estimator, param_grid, cv=5,
... factor=2,
... max_resources=40,
... aggressive_elimination=True,
... ).fit(X, y)
>>> sh.n_resources_
[20, 20, 40]
>>> sh.n_candidates_
[6, 3, 2]
请注意,我们在最后一次迭代中以2个候选项结束,因为我们在第一次迭代中已经消除了足够的候选项,使用 n_resources = min_resources = 20
.
3.2.3.2. 使用分析结果 cv_results_
属性#
的 cv_results_
属性包含用于分析搜索结果的有用信息。它可以改造成熊猫摇篮, df = pd.DataFrame(est.cv_results_)
.的 cv_results_
属性 HalvingGridSearchCV
和 HalvingRandomSearchCV
类似于 GridSearchCV
和 RandomizedSearchCV
,以及与连续减半过程相关的额外信息。
(截短的)输出收件箱示例:#
ITER |
n_resources |
mean_test_score |
params |
|
---|---|---|---|---|
0 |
0 |
125 |
0.983667 |
“标准”:“log_loss”,“max_depth”:无,“max_features”:9,“min_samples_split”:5} |
1 |
0 |
125 |
0.983667 |
“标准”:“gini”,“max_depth”:无,“max_features”:8,“min_samples_split”:7} |
2 |
0 |
125 |
0.983667 |
“标准”:“gini”,“max_depth”:无,“max_features”:10,“min_samples_split”:10} |
3 |
0 |
125 |
0.983667 |
“criteria”:“log_loss”,“max_depth”:无,“max_features”:6,“min_samples_split”:6} |
... |
... |
... |
... |
... |
15 |
2 |
500 |
0.951958 |
“标准”:“log_loss”,“max_depth”:无,“max_features”:9,“min_samples_split”:10} |
16 |
2 |
500 |
0.947958 |
“标准”:“gini”,“max_depth”:无,“max_features”:10,“min_samples_split”:10} |
17 |
2 |
500 |
0.951958 |
“标准”:“gini”,“max_depth”:无,“max_features”:10,“min_samples_split”:4} |
18 |
3 |
1000 |
0.961009 |
“标准”:“log_loss”,“max_depth”:无,“max_features”:9,“min_samples_split”:10} |
19 |
3 |
1000 |
0.955989 |
“标准”:“gini”,“max_depth”:无,“max_features”:10,“min_samples_split”:4} |
每一行对应于给定的参数组合(候选)和给定的迭代。迭代由 iter
柱的 n_resources
列告诉您使用了多少资源。
在上面的例子中,最佳的参数组合是 {'criterion': 'log_loss', 'max_depth': None, 'max_features': 9, 'min_samples_split': 10}
因为它已经达到了最高分数的最后一次迭代(3):0.96。
引用
3.2.4. 参数搜索技巧#
3.2.4.1. 确定客观指标#
默认情况下,参数搜索使用 score
估计器评估参数设置的功能。这些都是 sklearn.metrics.accuracy_score
分类和 sklearn.metrics.r2_score
用于回归。 对于某些应用程序,其他评分函数更适合(例如,在不平衡分类中,准确性评分通常没有信息),请参阅 我应该使用哪个评分功能? 寻求一些指导。可以通过指定替代评分功能 scoring
大多数参数搜索工具的参数,请参阅 的 scoring 参数:定义模型评估规则 了解更多详细信息。
3.2.4.2. 指定多个指标进行评估#
GridSearchCV
和 RandomizedSearchCV
允许指定多个指标 scoring
参数.
多指标评分可以指定为预定义评分名称的字符串列表,也可以指定为将评分者名称映射到评分者函数和/或预定义评分者名称的dict。看到 使用多指标评估 了解更多详细信息。
When specifying multiple metrics, the refit
parameter must be set to the
metric (string) for which the best_params_
will be found and used to build
the best_estimator_
on the whole dataset. If the search should not be
refit, set refit=False
. Leaving refit to the default value None
will
result in an error when using multiple metrics.
看到 基于cross_val_score和GridSearchCV的多度量评估演示 例如使用。
HalvingRandomSearchCV
和 HalvingGridSearchCV
不支持多指标评分。
3.2.4.3. 复合估计量和参数空间#
GridSearchCV
和 RandomizedSearchCV
允许搜索复合或嵌套估计量的参数,例如 Pipeline
, ColumnTransformer
, VotingClassifier
或 CalibratedClassifierCV
使用专用 <estimator>__<parameter>
语法::
>>> from sklearn.model_selection import GridSearchCV
>>> from sklearn.calibration import CalibratedClassifierCV
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.datasets import make_moons
>>> X, y = make_moons()
>>> calibrated_forest = CalibratedClassifierCV(
... estimator=RandomForestClassifier(n_estimators=10))
>>> param_grid = {
... 'estimator__max_depth': [2, 4, 6, 8]}
>>> search = GridSearchCV(calibrated_forest, param_grid, cv=5)
>>> search.fit(X, y)
GridSearchCV(cv=5,
estimator=CalibratedClassifierCV(estimator=RandomForestClassifier(n_estimators=10)),
param_grid={'estimator__max_depth': [2, 4, 6, 8]})
Here, <estimator>
is the parameter name of the nested estimator,
in this case estimator
.
If the meta-estimator is constructed as a collection of estimators as in
pipeline.Pipeline
, then <estimator>
refers to the name of the estimator,
see 访问嵌套参数. In practice, there can be several
levels of nesting:
>>> from sklearn.pipeline import Pipeline
>>> from sklearn.feature_selection import SelectKBest
>>> pipe = Pipeline([
... ('select', SelectKBest()),
... ('model', calibrated_forest)])
>>> param_grid = {
... 'select__k': [1, 2],
... 'model__estimator__max_depth': [2, 4, 6, 8]}
>>> search = GridSearchCV(pipe, param_grid, cv=5).fit(X, y)
请参阅 管道:连锁估计器 用于在管道上执行参数搜索。
3.2.4.4. 模型选择:开发与评估#
通过评估各种参数设置进行模型选择可以被视为使用标记数据来“训练”网格参数的一种方式。
在评估生成的模型时,重要的是要对网格搜索过程中未看到的保存样本进行评估:建议将数据拆分为 development set (to被馈送到 GridSearchCV
实例)和 evaluation set 计算性能指标。
这可以通过使用 train_test_split
实用功能。
3.2.4.5. 并行性#
参数搜索工具独立评估每个数据折叠上的每个参数组合。可以使用关键字并行运行计算 n_jobs=-1
.更多细节请参见函数签名, n_jobs .
3.2.4.6. 坚韧地面对失败#
某些参数设置可能会导致无法 fit
数据的一个或多个折叠。默认情况下,这些设置的分数为 np.nan
.这可以通过设置来控制 error_score="raise"
如果一次配合失败,或例如,引发异常 error_score=0
为失败参数组合的得分设置另一个值。
3.2.5. 暴力参数搜索的替代方案#
3.2.5.1. 模型特定的交叉验证#
有些模型可以将数据匹配为某个参数的一系列值,几乎与将估计量匹配为参数的单个值几乎一样有效。可以利用此功能来执行更有效的交叉验证,用于此参数的模型选择。
适用于此策略的最常见参数是编码正规化器强度的参数。在这种情况下,我们说我们计算 regularization path 的估计。
以下是此类型号的列表:
|
弹性网络模型,沿着规则化路径迭代匹配。 |
|
交叉验证的最小角回归模型。 |
|
Lasso线性模型,沿着规则化路径迭代匹配。 |
|
使用LARS算法交叉验证Lasso。 |
|
逻辑回归CV(又名logit,MaxEnt)分类器。 |
|
多任务L1/L2 ElasticNet,内置交叉验证。 |
|
多任务Lasso模型使用L1/L2混合规范作为正规化器进行训练。 |
交叉验证的垂直匹配追求模型(OMP)。 |
|
|
具有内置交叉验证的岭回归。 |
|
具有内置交叉验证的岭分类器。 |
3.2.5.2. 信息准则#
某些模型可以通过计算单个正规化路径(而不是使用交叉验证时的几个)来提供正规化参数最佳估计的信息论封闭式公式。
以下是受益于Akaike信息准则(AIC)或Bayesian信息准则(BIC)用于自动模型选择的模型列表:
|
Lasso模型与Lars匹配,使用BIC或AIC进行模型选择。 |
3.2.5.3. 袋外估计#
当使用基于Bagging的集成方法时,即使用带替换的抽样生成新的训练集,训练集的一部分保持未使用。 对于集成中的每个分类器,训练集的不同部分被省略。
这个遗漏的部分可以用于估计概括误差,而不必依赖单独的验证集。 该估计是“免费的”,因为不需要额外的数据,并且可以用于模型选择。
这目前在以下类中实现:
随机森林分类器。 |
|
随机森林回归量。 |
|
一个额外的树分类器。 |
|
|
额外的树回归因子。 |
|
用于分类的梯度增强。 |
|
梯度提升回归。 |