虽然有很多机器学习的算法,但从投票的角度看,仍然不够多
创建更多的子模型,集成更多子模型的意见
子模型之间不能一致,子模型之间要有差异性
如果创建差异性?

解决方法:
每个子模型只看样本数据的一部分。
每个子模型不太需要太高的准确率。只要子模型足够多,准确率就会提高。
例如500个子模型,每个子模型的准确率是60%,最终准确率能达到99.9%

取样方法:

  • 放回取样 bagging(bootstrap)
  • 不放回取样 pasting
    bagging更常用,优点:
  1. 没有那么依赖随机
  2. 数据量要求没那么高

使用13-1中的数据

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),n_estimators=500, max_samples=100, bootstrap=True)
# 决策树这种非参数的算法更容易产生差异较大的子模型
# 所有集成学习如果要集成成百上千个子模型,通常首先决策树
# n_estimators:子模型数
# max_samples:每个子模型看的样本树
# bootstrap:放回取样

bagging_clf.fit(X_train, y_train)
bagging_clf.score(X_test, y_test)

输出:0.912

bagging_clf2 = BaggingClassifier(DecisionTreeClassifier(),n_estimators=1000, max_samples=100, bootstrap=True)
bagging_clf2.fit(X_train, y_train)
bagging_clf2.score(X_test, y_test)

输出:0.92