未验证 提交 a9ed403e 编写于 作者: T tabeworks 提交者: GitHub

r4

上级 e4994b9e
......@@ -32,7 +32,7 @@
通过尝试自动选出测试数据集上的表现开始降低而训练数据集上的表现继续提高这样过拟合发生迹象的拐点来避免过拟合。
表现度量可以是通过训练模型而进行优化的损失函数(例如对数损失函数),或者通常情况下问题所关注的外部度量(例如分类精度)。
表现度量可以是通过训练模型而进行优化的损失函数(例如对数损失函数(logarithmic loss)),或者通常情况下问题所关注的外部度量(例如分类精度)。
## 在XGBoost中监测训练表现
......@@ -108,7 +108,7 @@ print("Accuracy: %.2f%%" % (accuracy * 100.0))
Accuracy: 77.95%
```
回顾所有输出,我们可以看到在测试集上模型表现平稳,不过在训练即将结束时表现有下降。
回顾所有输出,我们可以看到在测试集上模型表现平稳,不过在训练即将结束时表现有下降。
## 通过学习曲线评估XGBoost模型
......@@ -130,7 +130,7 @@ results = model.evals_result()
print(results)
```
这将print如下结果(为简洁明了,只截取部分作说明):
这将print如下结果(为简洁明了,只截取部分作说明):
```py
{
......@@ -148,9 +148,10 @@ results['validation_0']['error']
```
此外,我们可以通过向**fit()**函数的eval_metric参数提供度量数组,来指定更多的评估度量指标用于评价和汇总。
使用这些收集的表现度量来创建线图,并进一步了解模型在训练时期的训练和测试数据集上的表现。
下面是完整的代码示例,显示了如何在线图上显示收集的结果。
我们可以使用这些汇总的表现度量来创建曲线图,并进一步解读模型在训练epochs过程中分别在训练数据集和测试数据集上的表现。
下面是完整的代码示例,显示了如何在曲线图上可视化汇总的结果。
```py
# plot learning curve
......@@ -198,40 +199,40 @@ pyplot.title('XGBoost Classification Error')
pyplot.show()
```
运行此代码会报告每个纪元的训练和测试数据集的分类错误。我们可以通过在 **fit()**函数的调用中设置 **verbose = False** (默认值)来关闭它
运行这段代码会显示每个epoch中训练数据集和测试数据集的分类误差。我们可以通过在 **fit()**函数的调用中设置 **verbose = False** (默认值)来关闭这个功能
创建了两个图。第一个显示了训练和测试数据集中每个时期的 XGBoost 模型的对数损失
我们看到结果创建了两张图。第一张图显示了训练数据集和测试数据集中每个epoch中XGBoost模型的对数损失(logarithmic loss)
![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 学习曲线分类错误
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
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)
```
如果提供了多个评估数据集或多个评估指标,则提前停止将使用列表中的最后一个。
如果提供了多个评估数据集或多个评估指标,则提前停止(early stopping)将使用列表中的最后一个。
下面提供了完整性的完整示例,提前停止
下面展示提前停止(early stopping)的一个完整示例
```py
# early stopping
......@@ -260,7 +261,7 @@ accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
```
运行该示例提供以下输出,为简洁起见,将其截断
运行示例代码将给出如下输出(为简洁明了,只截取部分作说明)
```py
...
......@@ -276,18 +277,18 @@ Stopping. Best iteration:
[32] validation_0-logloss:0.487297
```
我们可以看到模型在第 42 纪元停止训练(接近我们对学习曲线的手动判断的预期),并且在第 32 纪元观察到具有最佳损失的模型。
我们可以看到模型在epoch 42停止训练(接近我们对学习曲线手动判断的预期),并且在epoch 32观察到具有最佳损失结果的模型。
选择 **early_stopping_rounds** 作为训练时期总数(在这种情况下为 10%)的合理函数通常是个好主意,或者尝试对应于在情节上可以观察到的拐点时期。学习曲线
通常情况下,选择 **early_stopping_rounds** 作为训练epoch总数(在这种情况下为 10%)是个不错的主意,或者尝试找到对应的可能观察到的学习曲线拐点时期
## 摘要
## 总结
在这篇文章中,您发现了监控表现和提前停止
在这篇文章中,您实际了解了监测性能表现和提前停止(early stopping)
你了解到
所学到的是
* 关于在模型过度训练数据之前停止模型训练的早期停止技术
* 如何在训练期间监控 XGBoost 模型的表现并绘制学习曲线。
* 如何在训练 XGBoost 模型时配置早期停止
* 提前停止(early stopping)技术能够在训练数据集上发生过拟合之前就停止模型训练
* 如何在训练期间监测XGBoost模型的表现并绘制学习曲线。
* 如何在训练XGBoost模型中配置提前停止(early stopping)
您对过度拟合或有关此帖子有任何疑问吗?在评论中提出您的问题,我会尽力回答。
您对过拟合或这篇文章有任何疑问吗?请在评论中提出您的问题,我会尽力回答。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册