周志华《机器学习》课后习题(第八章):集成学习

简介: 周志华《机器学习》课后习题(第八章):集成学习

image.pngimage.pngimage.png


8.3 从网上下载或自己编程实现 AdaBoost,以不剪枝抉策树为基学习器,在西瓜数据集 3.0α 上训练一个 AdaBoost 集成,并与图 8.4进行比较。


答:

代码在:

https://github.com/han1057578619/MachineLearning_Zhouzhihua_ProblemSets/tree/master/ch8--%E9%9B%86%E6%88%90%E5%AD%A6%E4%B9%A0

这里题目有点问题,如果以不剪枝决策树为基学习器,可以生成一个完美符合数据的决策树,此时AdaBoost就没意义了,因为第一颗树错误率就为0了,样本权重也不会发生改变。

所有这里代码是限定树的深度为2,但训练到第四颗树,错误率就已经到0了,下图给出来的决策边界,其实基本上就是第四颗树的决策了,因为错误率为0,其权重太大。

image.png

8.4 GradientBoosting [Friedman, 2001] 是一种常用的 Boosting 算法,试析其与 AdaBoost 的异同.


答:

这个问题,网上已经有很多总结了:

Gradient Boosting和其它Boosting算法一样,通过将表现一般的数个模型(通常是深度固定的决策树)组合在一起来集成一个表现较好的模型。抽象地说,模型的训练过程是对一任意可导目标函数的优化过程。通过反复地选择一个指向负梯度方向的函数,该算法可被看做在函数空间里对目标函数进行优化。因此可以说Gradient Boosting = Gradient Descent + Boosting。
和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。不同的是,AdaBoost是通过提升错分数据点的权重来定位模型的不足而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。因此相比AdaBoost, Gradient Boosting可以使用更多种类的目标函数。

参考:机器学习算法中GBDT与Adaboost的区别与联系是什么?


8.5 试编程实现 Bagging,以决策树桩为基学习器,在西瓜数据集 3.0α 上训练一个 Bagging 集戚,井与图 8.6 进行比较.


答:

代码在:han1057578619/MachineLearning_Zhouzhihua_ProblemSets

以决策树桩作为Bagging的基学习器,效果不太好。尝试了下,设置基学习器数量为21时算是拟合最好的,决策边界如下:

image.png

8.6 试析 Bagging 通常为何难以提升朴素贝叶斯分类器的性能.


答:

书中P177和P179提到过:

从偏差—方差分解的角度看, Boosting 主要关住降低偏差,因此 Boosting能基于泛化性能相当弱的学习器构建出很强的集成.
从偏差—方差分解的角度看, Bagging 主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显.

朴素贝叶斯中假设各特征相互独立,已经是很简化模型,其误差主要是在于偏差,没有方差可降。

ps.同样道理,这也是为什么8.5中,以决策树桩为基学习器的Bagging时,效果很差的原因;决策树桩同样是高偏差低方差的模型。

个人理解:

  • 方差大(偏差低)的模型往往是因为对训练数据拟合得过好,模型比较复杂,输入数据的一点点变动都会导致输出结果有较大的差异,它描述的是模型输出的预测值相比于真实值的离散程度,方差越大,越离散,所以为什么Bagging适合以不剪枝决策树、神经网络这些容易过拟合的模型为基学习器;
  • 偏差大(方差低)的模型则相反,往往因为对训练数据拟合得不够,模型比较简单,输入数据发生变化并不会导致输出结果有多大改变,它描述的是预测值和和真实值直接的差距,偏差越大,越偏离真实值。

8.7 试析随机森林为何比决策树 Bagging 集成的训练速度更快.


答:

决策树的生成过程中,最耗时的就是搜寻最优切分属性;随机森林在决策树训练过程中引入了随机属性选择,大大减少了此过程的计算量;因而随机森林比普通决策树Bagging训练速度要快。

相关文章
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
108 3
|
3月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十三章 集成测试
本文是《软件质量保护与测试》(第2版)第十三章的学习总结,介绍了集成测试的概念、主要任务、测试层次与原则,以及集成测试的不同策略,包括非渐增式集成和渐增式集成(自顶向下和自底向上),并通过图示详细解释了集成测试的过程。
95 1
软件质量保护与测试(第2版)学习总结第十三章 集成测试
|
3月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
431 1
|
3月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
158 0
|
3月前
|
机器学习/深度学习 算法 前端开发
集成学习任务七和八、投票法与bagging学习
集成学习任务七和八、投票法与bagging学习
42 0
|
3月前
|
机器学习/深度学习 算法
【机器学习】迅速了解什么是集成学习
【机器学习】迅速了解什么是集成学习
|
4月前
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
83 1
|
4月前
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
176 4
|
5月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
98 1
|
5月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
100 0

热门文章

最新文章