说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。
第六章集成学习和随机森林
假设你去随机问很多人一个很复杂的问题,然后把它们的答案合并起来。通常情况下你会发现这个合并的答案比一个专家的答案要好。这就叫做群体智慧。
如果合并一组分类器的预测(像分类或者回归),同样会得到一个比单一分类器更好的预测结果。这一组分类器就叫做集成。
因此,这个技术就叫做集成学习,一个集成学习算法就叫做集成方法。
例如,你可以训练一组决策树分类器,每一个都在一个随机的训练集上。为了去做预测,你必须得到所有单一树的预测值,然后通过投票(例如第六章的练习)来预测类别。例如一种决策树的集成就叫做随机森林,它除了简单之外也是现今存在的最强大的机器学习算法之一。
一般会在一个项目快结束的时候使用集成算法,一旦你建立了一些好的分类器,就把他们合并为一个更好的分类器。在机器学习竞赛中获得胜利的算法经常会包含一些集成方法。
本章中,教程讨论了几个著名的集成方法:bagging, boosting, stacking和其他一些算法。我们也会讨论随机森林。
源代码已经同步在github中
https://github.com/jwc19890114/-02-learning-file-100days
本章中理论多过实操,所以基本上是抄了,如果不喜欢的同学可以直接看github里面的源文档。
集成学习和随机森林
假设你去随机问很多人一个很复杂的问题,然后把它们的答案合并起来。通常情况下你会发现这个合并的答案比一个专家的答案要好。这就叫做群体智慧。
如果合并一组分类器的预测(像分类或者回归),同样会得到一个比单一分类器更好的预测结果。这一组分类器就叫做集成。
因此,这个技术就叫做集成学习,一个集成学习算法就叫做集成方法。
例如,你可以训练一组决策树分类器,每一个都在一个随机的训练集上。为了去做预测,你必须得到所有单一树的预测值,然后通过投票(例如第六章的练习)来预测类别。例如一种决策树的集成就叫做随机森林,它除了简单之外也是现今存在的最强大的机器学习算法之一。
一般会在一个项目快结束的时候使用集成算法,一旦你建立了一些好的分类器,就把他们合并为一个更好的分类器。在机器学习竞赛中获得胜利的算法经常会包含一些集成方法。
本章中,教程讨论了几个著名的集成方法:bagging, boosting, stacking和其他一些算法。我们也会讨论随机森林。
1. 投票分类
弱学习器:结果比瞎猜好一点点的学习器,准确率在51%。
强学习器:准确率高的学习器。
如果已经训练了若干分类器(logistic、SVM、KNN等),每一个都有80%的准确率,基于这些分类器创建一个更好的分类器的方法就是整合每一个分类器的预测,然后经过投票预测分类。这种分类器为硬投票分类器。
投票分类器得出的结果通常会比集成中单一最好的结果更好,即是说每一个分类器都是一个弱学习器,在集成后仍然是一个强学习器。
教程在这里举了一个掷硬币的大数定律,十次独立实验最终结果都会在51%上下浮动,看看就好。
前置准备
掷硬币
同样,如果生成多搁分类器的集成模型,正确率仅为51%,如果使用投票预测的话,可能会得到一个正确率很高的学习器。前提是所有的分类器都独立运行的很好、不会发生有相关性的错误的情况下才会这样,然而每一个分类器都在同一个数据集上训练,导致其很可能会发生这样的错误。他们可能会犯同一种错误,所以也会有很多票投给了错误类别导致集成的准确率下降。
下面的代码创建和训练了在sklearn中的投票分类器。这个分类器由三个不同的分类器组成训练集是第五章中的moons数据集,可以发现投票分类器表现要优于其他独立分类器。
如果所有分类器都能够预测类别的概率,可以让Sklearn以最高的类概率来预测这个类,平均在所有的分类器上,这就是软投票,效果比硬投票好,因为给予高自信的投票更大的权重。在这里重新训练一个投票学习器,通过将voting="hard"设置为voting="soft"来保证分类器可以预测类别概率。然而这不是 SVC 类的分类器默认的选项,所以你需要把它的probability hyperparameter设置为True。可以看到,软投票的正确率达到91%。
领取专属 10元无门槛券
私享最新 技术干货