Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
ml-mastery-zh
提交
a9ed403e
M
ml-mastery-zh
项目概览
OpenDocCN
/
ml-mastery-zh
大约 1 年 前同步成功
通知
2
Star
556
Fork
158
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
ml-mastery-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
a9ed403e
编写于
9月 11, 2019
作者:
T
tabeworks
提交者:
GitHub
9月 11, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
r4
上级
e4994b9e
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
29 addition
and
28 deletion
+29
-28
docs/xgboost/avoid-overfitting-by-early-stopping-with-xgboost-in-python.md
...d-overfitting-by-early-stopping-with-xgboost-in-python.md
+29
-28
未找到文件。
docs/xgboost/avoid-overfitting-by-early-stopping-with-xgboost-in-python.md
浏览文件 @
a9ed403e
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
通过尝试自动选出测试数据集上的表现开始降低而训练数据集上的表现继续提高这样过拟合发生迹象的拐点来避免过拟合。
通过尝试自动选出测试数据集上的表现开始降低而训练数据集上的表现继续提高这样过拟合发生迹象的拐点来避免过拟合。
表现度量可以是通过训练模型而进行优化的损失函数(例如对数损失函数),或者通常情况下问题所关注的外部度量(例如分类精度)。
表现度量可以是通过训练模型而进行优化的损失函数(例如对数损失函数
(logarithmic loss)
),或者通常情况下问题所关注的外部度量(例如分类精度)。
## 在XGBoost中监测训练表现
## 在XGBoost中监测训练表现
...
@@ -108,7 +108,7 @@ print("Accuracy: %.2f%%" % (accuracy * 100.0))
...
@@ -108,7 +108,7 @@ print("Accuracy: %.2f%%" % (accuracy * 100.0))
Accuracy
:
77.95
%
Accuracy
:
77.95
%
```
```
回顾所有输出,我们可以看到在测试集上模型表现平稳,不过在训练即将结束时表现有
点
下降。
回顾所有输出,我们可以看到在测试集上模型表现平稳,不过在训练即将结束时表现有
些
下降。
## 通过学习曲线评估XGBoost模型
## 通过学习曲线评估XGBoost模型
...
@@ -130,7 +130,7 @@ results = model.evals_result()
...
@@ -130,7 +130,7 @@ results = model.evals_result()
print
(
results
)
print
(
results
)
```
```
这将print如下结果(为简洁明了,只截取部分作说明
。
):
这将print如下结果(为简洁明了,只截取部分作说明):
```
py
```
py
{
{
...
@@ -148,9 +148,10 @@ results['validation_0']['error']
...
@@ -148,9 +148,10 @@ results['validation_0']['error']
```
```
此外,我们可以通过向
**fit()**
函数的eval_metric参数提供度量数组,来指定更多的评估度量指标用于评价和汇总。
此外,我们可以通过向
**fit()**
函数的eval_metric参数提供度量数组,来指定更多的评估度量指标用于评价和汇总。
使用这些收集的表现度量来创建线图,并进一步了解模型在训练时期的训练和测试数据集上的表现。
下面是完整的代码示例,显示了如何在线图上显示收集的结果。
我们可以使用这些汇总的表现度量来创建曲线图,并进一步解读模型在训练epochs过程中分别在训练数据集和测试数据集上的表现。
下面是完整的代码示例,显示了如何在曲线图上可视化汇总的结果。
```
py
```
py
# plot learning curve
# plot learning curve
...
@@ -198,40 +199,40 @@ pyplot.title('XGBoost Classification Error')
...
@@ -198,40 +199,40 @@ pyplot.title('XGBoost Classification Error')
pyplot
.
show
()
pyplot
.
show
()
```
```
运行
此代码会报告每个纪元的训练和测试数据集的分类错误。我们可以通过在
**fit()**
函数的调用中设置
**verbose = False**
(默认值)来关闭它
。
运行
这段代码会显示每个epoch中训练数据集和测试数据集的分类误差。我们可以通过在
**fit()**
函数的调用中设置
**verbose = False**
(默认值)来关闭这个功能
。
创建了两个图。第一个显示了训练和测试数据集中每个时期的 XGBoost 模型的对数损失
。
我们看到结果创建了两张图。第一张图显示了训练数据集和测试数据集中每个epoch中XGBoost模型的对数损失(logarithmic loss)
。
![
XGBoost Learning Curve Log Loss
](
img/3dd164f486ba1862fa97f82eb6693360.jpg
)
![
XGBoost Learning Curve Log Loss
](
img/3dd164f486ba1862fa97f82eb6693360.jpg
)
XGBoost
学习曲线日志丢失
XGBoost
学习曲线(对数损失(log loss))
第二
个图显示了训练和测试数据集中每个时期的 XGBoost 模型的分类错误
。
第二
张图显示了训练数据集和测试数据集中每个epoch中XGBoost模型的分类误差(classification error)
。
![
XGBoost Learning Curve Classification Error
](
img/cdfec3000bac01a37daacb6f874ff978.jpg
)
![
XGBoost Learning Curve Classification Error
](
img/cdfec3000bac01a37daacb6f874ff978.jpg
)
XGBoost
学习曲线分类错误
XGBoost
学习曲线(分类误差(classification error))
通过回顾
logloss 图,看起来有机会提前停止学习,也许在 20 世纪到 40 世纪左右
。
通过回顾
logloss的图像,我们像是有提前停止学习过程的机会,也许在epoch 20到epoch 40之间的某个阶段
。
我们看到了类似的分类错误故事,其中错误似乎在 40 左右的时间内重新出现
。
在分类误差的图像中,我们也观察到了类似的情况,误差似乎在epoch 40左右出现上升
。
##
早期停止使用 XGBoost
##
在XGBoost中使用提前停止(early stopping)
XGBoost
支持在固定次数的迭代后提前停止
。
XGBoost
支持在固定次数的迭代后提前停止(early stopping)
。
除了为每个
时期指定用于评估的度量和度量数据集之外,还必须指定一个窗口,其中没有观察到任何改进的时期数。这在
**early_stopping_rounds**
参数中指定
。
除了为每个
epoch指定用于评估的度量和测试数据集之外,还必须指定一个epoch窗长,它代表没有观察到任何改善的epoch数目。它可以在
**early_stopping_rounds**
参数中实现
。
例如,我们可以
检查 10 个时期的对数损失没有改善
如下:
例如,我们可以
在10个epoch中检查对数损失没有得到改善,代码
如下:
```
py
```
py
eval_set
=
[(
X_test
,
y_test
)]
eval_set
=
[(
X_test
,
y_test
)]
model
.
fit
(
X_train
,
y_train
,
early_stopping_rounds
=
10
,
eval_metric
=
"logloss"
,
eval_set
=
eval_set
,
verbose
=
True
)
model
.
fit
(
X_train
,
y_train
,
early_stopping_rounds
=
10
,
eval_metric
=
"logloss"
,
eval_set
=
eval_set
,
verbose
=
True
)
```
```
如果提供了多个评估数据集或多个评估指标,则提前停止将使用列表中的最后一个。
如果提供了多个评估数据集或多个评估指标,则提前停止
(early stopping)
将使用列表中的最后一个。
下面
提供了完整性的完整示例,提前停止
。
下面
展示提前停止(early stopping)的一个完整示例
。
```
py
```
py
# early stopping
# early stopping
...
@@ -260,7 +261,7 @@ accuracy = accuracy_score(y_test, predictions)
...
@@ -260,7 +261,7 @@ accuracy = accuracy_score(y_test, predictions)
print
(
"Accuracy: %.2f%%"
%
(
accuracy
*
100.0
))
print
(
"Accuracy: %.2f%%"
%
(
accuracy
*
100.0
))
```
```
运行
该示例提供以下输出,为简洁起见,将其截断
:
运行
示例代码将给出如下输出(为简洁明了,只截取部分作说明)
:
```
py
```
py
...
...
...
@@ -276,18 +277,18 @@ Stopping. Best iteration:
...
@@ -276,18 +277,18 @@ Stopping. Best iteration:
[
32
]
validation_0
-
logloss
:
0.487297
[
32
]
validation_0
-
logloss
:
0.487297
```
```
我们可以看到模型在
第 42 纪元停止训练(接近我们对学习曲线的手动判断的预期),并且在第 32 纪元观察到具有最佳损失
的模型。
我们可以看到模型在
epoch 42停止训练(接近我们对学习曲线手动判断的预期),并且在epoch 32观察到具有最佳损失结果
的模型。
选择
**early_stopping_rounds**
作为训练时期总数(在这种情况下为 10%)的合理函数通常是个好主意,或者尝试对应于在情节上可以观察到的拐点时期。学习曲线
。
通常情况下,选择
**early_stopping_rounds**
作为训练epoch总数(在这种情况下为 10%)是个不错的主意,或者尝试找到对应的可能观察到的学习曲线拐点时期
。
##
摘要
##
总结
在这篇文章中,您
发现了监控表现和提前停止
。
在这篇文章中,您
实际了解了监测性能表现和提前停止(early stopping)
。
你了解到
:
所学到的是
:
*
关于在模型过度训练数据之前停止模型训练的早期停止技术
。
*
提前停止(early stopping)技术能够在训练数据集上发生过拟合之前就停止模型训练
。
*
如何在训练期间监
控 XGBoost
模型的表现并绘制学习曲线。
*
如何在训练期间监
测XGBoost
模型的表现并绘制学习曲线。
*
如何在训练
XGBoost 模型时配置早期停止
。
*
如何在训练
XGBoost模型中配置提前停止(early stopping)
。
您对过
度拟合或有关此帖子有任何疑问吗?
在评论中提出您的问题,我会尽力回答。
您对过
拟合或这篇文章有任何疑问吗?请
在评论中提出您的问题,我会尽力回答。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录