使用 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



相关文章
|
8天前
|
机器学习/深度学习 算法 数据挖掘
从菜鸟到大师:Scikit-learn库实战教程,模型训练、评估、选择一网打尽!
【9月更文挑战第13天】在数据科学与机器学习领域,Scikit-learn是不可或缺的工具。本文通过问答形式,指导初学者从零开始使用Scikit-learn进行模型训练、评估与选择。首先介绍了如何安装库、预处理数据并训练模型;接着展示了如何利用多种评估指标确保模型性能;最后通过GridSearchCV演示了系统化的参数调优方法。通过这些实战技巧,帮助读者逐步成长为熟练的数据科学家。
40 3
|
13天前
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
28 1
|
18天前
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
28 4
|
19天前
|
机器学习/深度学习 算法 数据挖掘
|
22天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
21天前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
27 1
|
2天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
8 0
|
21天前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
44 0
|
21天前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
32 0
|
21天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
全面解析TensorFlow Lite:从模型转换到Android应用集成,教你如何在移动设备上轻松部署轻量级机器学习模型,实现高效本地推理
【8月更文挑战第31天】本文通过技术综述介绍了如何使用TensorFlow Lite将机器学习模型部署至移动设备。从创建、训练模型开始,详细演示了模型向TensorFlow Lite格式的转换过程,并指导如何在Android应用中集成该模型以实现预测功能,突显了TensorFlow Lite在资源受限环境中的优势及灵活性。
49 0