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



相关文章
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
138 2
|
2月前
|
机器学习/深度学习 数据采集 数据处理
Scikit-learn Pipeline完全指南:高效构建机器学习工作流
Scikit-learn管道是构建高效、鲁棒、可复用的机器学习工作流程的利器。通过掌握管道的使用,我们可以轻松地完成从数据预处理到模型训练、评估和部署的全流程,极大地提高工作效率。
50 2
Scikit-learn Pipeline完全指南:高效构建机器学习工作流
|
2月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
2月前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
86 3
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
41 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
83 0
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
35 1
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
93 2
|
3月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
194 1
|
3月前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
43 4

热门文章

最新文章