使用 scikit-learn 玩转机器学习——集成学习

简介: 集成学习是结合多个单一估计器的预测结果对给定问题给出预测的一种算法,集成学习相对于单一的估计器来说会有更好的泛化能力和鲁棒性,教科书式的定义的确会让人头昏脑涨,以下我们就来拿小华做作业来举个栗子。

集成学习是结合多个单一估计器的预测结果对给定问题给出预测的一种算法,集成学习相对于单一的估计器来说会有更好的泛化能力和鲁棒性,教科书式的定义的确会让人头昏脑涨,以下我们就来拿小华做作业来举个栗子。

59.jpg

小华是个学渣,每次做作业都要抱学霸 A 的大腿,学霸A也不介意让他看作业,暂且不管背后是不是有什么XX交易,反正每次作业被批改后发下来得分还算过得去。但小华并不满足于此,他不是一个一般的学渣,它是一个有追求的学渣,他还想拿更高的分数。于是某天之后,小华又召集了班里的其他4个学霸 B、C、D、E 为他提供答案。有了5名学霸作业答案的小明一开始曾不知所措,因为当各个学霸的答案不一致时他不知道该抄谁的,于是他想到一个少数服从多数的原则来确定最后答案,之后小华的作业的得分果然更进一步。一段时间后,小华又总结出一个经验:学霸 B 一直是班级第一、年级前十的存在,无论是考试,还是作业,他的正确率总是比其他一般的学霸更高,所以当5位学霸的作业题答案出现分歧时,应该多考虑下学霸 B 的答案。小华这个参考同学作业的栗子就体现出了集成学习的思想。下面我们依次看下几个典型的集成学习:

Voting Classifier

Voting classifier 可能是思想最朴素的集成学习分类器了,它就是利用了上述小华同学想到的“少数服从多数的原则”或者是平均化多个分类器对于未知样本属于某个类别的概率的思想。下面我们用 SVM、逻辑回归、决策树和 kNN 来演示下该算法:


1、先引入一些必要的包和数据,并将数据可视化

60.jpg


2、分离训练集和测试集,实例化一个 KNN 模型,训练并打印其精度。

61.jpg

3、实例化一个逻辑回归模型,训练并打印模型精度。

62.jpg

4、实例化一个支持向量机模型,训练并打印模型精度。

63.jpg


5、实例化一个决策树模型,训练并打印模型精度。

64.jpg


6、传入上述的各个机器学习模型,实例化一个 VotingClassifier 模型,训练并打印模型精度。

65.jpg


在这一集成学习-- Voting Classifier 的例子中并没有取得比任一个单个分类器都更好的结果,与 SVM 和 KNN 算法相比,该集成学习算法的精度却下降了。原因之一就是我们在实例化上述 Voting Classifier 的过程中传入一个超参数 voting='hard',其含义是严格遵循少数服从多数的原则。严格遵循这个原则会导致多数人的暴政,就像上面的小华做作业的例子里,对于一道很难的题目,只有学霸B做对了,其他学霸都错了的情况下,小华因为采用“少数服从多数”的原则也跟着错了。这种情况下,可以为不同水平的分类器赋权重,或者对所有参与分类的分类器对未知样本属于某类得出一个概率,然后所有概率相加求平均来确定种类。对于这种情况,Voting Classifier 类只需将超参数 voting='soft' 即可,但上例中的 KNN 算法在分类时并不产生概率,所以就不调参演示了。

Random Forests(随机森林)

我们都知道森林是由树构成的(手动滑稽,QAQ),所以随机森林也不例外,随机森林里面的树叫做决策树。上次我们刚聊过决策树,相信小伙伴们还有些印象,决策树是由一系列节点构成的,每划分一个节点都要在所有的特征维度的每个特征可能取到的值上进行搜索,以取得信息熵的最小和,或最大的信息增益。随机森林里面的树的节点划分可能稍有些变化,随机森林算法的高明之处之一就是利用随机性,使得模型更鲁棒。假如森林中有 N 棵树,那么就随机取出 N 个训练数据集,对 N 棵树分别进行训练,通过统计每棵树的预测结果来得出随机森林的预测结果。

66.jpg


因为随机森林的主要构件是决策树,所以随机森林的超参数很多与决策树相同。除此之外,有2个比较重要的超参数值得注意,一个是 bootstrap,取 true 和 false,表示在划分训练数据集时是否采用放回取样;另一个是 oob_score,因为采用放回取样时,构建完整的随机森林之后会有大约 33% 的数据没有被取到过,所以当 oob_score 取 True 时,就不必再将数据集划分为训练集和测试集了,直接取未使用过的数据来验证模型的准确率。下面我们用代码演示下随机森林分类器:

67.jpg


Extremely Randomized Trees

随机森林的一大特点就是利用随机划分的数据集构建决策树,其实还有其他算法更是把“随机”二字心法发挥到更高水准,真是山外青山楼外楼。这就是 Extremely Randomized Trees 算法了,它不仅在构建数据子集时对样本的选择进行随机抽取,而且还会对样本的特征进行随机抽取(即在建树模型时,采用部分特征而不是全部特征进行训练)。换句话说,就是对于特征集 X,随机森林只是在行上随机,Extremely Randomized Trees是在行和列上都随机,下面我们调用演示下 scikit-learn 中的 Extremely Randomized Trees 的分类器:

68.jpg


AdaBoost

Boosting 是一族将弱学习器提升为强学习器的一种算法。这族算法的工作机制类似:首先是根据初始训练集训练出一个基学习器,然后根据基学习器的表现调整样本分布,使得让基学习器犯错的样本再对下一个学习器训练时得到更大的权重,使得下一个学习器提高其在使上一个分类器犯错的样本集中的表现;然而该学习器仍会犯错,我们就将该步骤反复进行,直到达到某个指标。


我们继续来拿上面小华参考同学作业的情况来打比方。小华经过观察后发现,原来学霸 A、B、C、D、E 们都有错题本,尤其是学霸 B,他的错题本比牛津高阶词典还厚,错题本当然是用来收集学霸们各次模拟考试、平时作业的错题,在期末考试前一个月,学霸 B 会把原来的错题本上的错题重新做一遍,并把这次又做错的题目放到一个新的错题本上。隔几天后,学霸 B 会把新的错题本再做一遍,再次重新整理错题......就是这样,不断重复这个步骤,学霸 B 班级第一的地位经历大大小小无数次模拟考试而无人撼动。那么我们刚刚讲到的 Boosting 算法是不是跟学霸 B 的学习方法一模一样呢?!?!AdaBoost 正是将 Boosting 算法学习过程中学到的各个模型线性组合起来!

69.jpg


下面我们来看下 scikit-learn 中 AdaBoost 分类器的调用:

0.png


以上所有的算法在具体演示时都是使用了其相应的分类器,其实他们都可以用来解决回归问题的,由于篇幅问题就不具体展开了。


下图是 scikit-learn 官网贴出的 机器学习算法小抄,如果你还是机器学习的算法小白,可以从 START 点开始,根据图示的步骤结合你的数据和需求来选择合适的算法。这是这个系列的最后一篇了,希望小伙伴们都学的开心。

70.jpg



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