6. 集成学习&随机森林

1. 集成学习

  • 思想:基于不同算法,算出不同的结果,对每一个值投票选择多数的那个作为结果,比如对一个值预测三种算法分别为:0,1,0,此时选择0作为预测结果

1. hard voting: 少数服从多数,

from sklearn.ensemble import VotingClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

voting_clf = VotingClassifier(
    estimators=[
        ('logic', LogisticRegression()),
        ('svm', SVC()),
        ('dtc', DecisionTreeClassifier())
    ],
    voting='hard'
)

voting_clf.fit(x_train, y_train)
voting_clf.score(x_test, y_test)

2. soft voting:考虑权重、概率相加:

要求每一个模型都能估计概率 predict_proba

SVC中的probability

from sklearn.ensemble import VotingClassifier

voting_soft = VotingClassifier(
    estimators=[
        ('logic', LogisticRegression()),
        ('svm', SVC(probability=True)),   # 对于SVM需要开启probability概率
        ('dt', DecisionTreeClassifier(random_state=666))
    ],
    voting='soft'
)

voting_soft.fit(x_train, y_train)
voting_soft.score(x_test, y_test)

3. 子模型

  • 虽然机器学习方法很多,但是投票角度还是较少,需要更多的子模型,子模型准确率不需要太高,但是子模型之间不能一致,需要有差异性
  • 创建差异性:每个子模型是同一种模型的对不同样本数据处理,比如500个样本,每一个子模型随机(放回Bagging或不放回Pasting)抽取100个,
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

# 使用bagging创建子模型,传入模型方法,n_estimators为子模型个数,随机抽取的样本数量max_samples,放回的随机抽取为bootstrap=True, 使用n_jobs并行计算各个随机抽样
bagging_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=500, max_samples=100, bootstrap=True, n_jobs=-1)
bagging_clf.fit(x_train, y_train)
bagging_clf.score(x_test, y_test)
  • 但是对于放回的随机抽样,平均大约有37%的样本没有被取到,不单独划分测试数据集,直接使用剩下的没有取到的37%样本作为测试数据集,oob_score=True
bagging_clf3 = BaggingClassifier( DecisionTreeClassifier(), n_estimators=500, max_samples=100, bootstrap=True, oob_score=True )
bagging_clf3.fit(x, y)
bagging_clf3.oob_score_
  • 针对Bagging的深入:针对特征随机取样:max_features=10(最多的特征随机取样), bootstrap_features=True 特征也是放回采样

2. 随机森林和Extra-Trees

  • 随机森林:在决策树节点划分上,随机生成多个树
from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=500, bootstrap=True, oob_score=True, n_jobs=-1)
rf_clf.fit(x, y)
rf_clf.oob_score_
  • Extra-Trees: 决策树在节点划分上,使用随机的特征和随机的阈值,提供了额外的随机性,抑制过拟合,但增加了bias,具有更快的训练速度
from sklearn.ensemble import ExtraTreesClassifier

et_clf = ExtraTreesClassifier(n_estimators=500, bootstrap=True, oob_score=True, n_jobs=-1,max_leaf_nodes=16)
et_clf.fit(x, y)
et_clf.oob_score_

3. Boosting

集成多个模型,每一个模型都在增强Boosting整体的效果

  • Ada Boosting

每一轮都是对上一轮没有拟合好的数据赋值较高权重,使得在当前轮能够拟合上一轮没有拟合好的数据,不断的集成

  • Gradient Boosting

每一次训练都针对上次产生错误的数据子集训练

from sklearn.ensemble import GradientBoostingClassifier

gb_clf = GradientBoostingClassifier(n_estimators=500)
gb_clf.fit(x_train, y_train)
gb_clf.score(x_test, y_test)
  • 使用Boosting解决回归问题
from sklearn.ensemble import AdaBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页