集成学习

集成学习

Voting Classifier

每个算法的最终预测的结果都不同,评分也不同。那么哪个算法算是最合理呢?集成学习就是统计每个算法预测结果,选择多数算法预测出相同的结果。

scikit-learn

from sklearn.ensemble import VotingClassifier

#estimators要做决策的算法  voting='hard'少数服从多数
voting_clf = VotingClassifier(estimators=[
    ('log_clf', LogisticRegression()), 
    ('svm_clf', SVC()),
    ('dt_clf', DecisionTreeClassifier(random_state=666))],
                             voting='hard')

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

Soft Voting Classifer

和上面集成学习算法类似,但是最终决策不是由少数服从多数来决定。而是由每个算法得出的概率相加除以算法个数得出概率值。

scikit-learn

voting_clf2 = VotingClassifier(estimators=[
    ('log_clf', LogisticRegression()), 
    ('svm_clf', SVC(probability=True)),#SVM算法本身不支持概率,使用probability会间接计算出概率
    ('dt_clf', DecisionTreeClassifier(random_state=666))],
                             voting='soft')

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

Bagging 使用更多个模型投票

虽然有很多机器学习算法可以用来投票,但是仍然不够,我们需要更多的模型来进行投票,但是每个模型都必须不同。可以用算法创建多个子模型,每个子模型只用样本数据或特征的一部分来训练,这样训练出来的模型保证了会存在差异性。

取样分为

  1. 放回取样 Bagging

     from sklearn.tree import DecisionTreeClassifier
     from sklearn.ensemble import BaggingClassifier
     # n_estimators 集成几个模型  max_samples每个模型用多少样本训练 bootstrap是否放回样本
     bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                                n_estimators=500, max_samples=100,
                                bootstrap=True)
     bagging_clf.fit(X_train, y_train)
     bagging_clf.score(X_test, y_test)
    
  2. 不放回取样 Pasting

     from sklearn.tree import DecisionTreeClassifier
     from sklearn.ensemble import BaggingClassifier
     
     bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                                n_estimators=5000, max_samples=100,
                                bootstrap=True)
     bagging_clf.fit(X_train, y_train)
     bagging_clf.score(X_test, y_test)
    

OOB

使用放回取样时,有可能有一部分会随机获取从来没使用过。这类数据就是OOB,我们可以把这类数据用来做测试数据。

scikit-learn

使用多核,特征随机以及OOB的案例

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
# oob_score 使用OOB  max_features随机特征数,bootstrap_features是否使用随机特征 n_jobs使用核
bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100,
                               bootstrap=True, oob_score=True,
                               max_features=1, bootstrap_features=True,n_jobs=-1)
bagging_clf.fit(X, y)

bagging_clf.oob_score_

随机森林

使用决策树算法,随机样本和随机特诊生成多个小的模型,构建出随机森林

scikit-learn

from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=500, oob_score=True,  max_leaf_nodes=16,random_state=666, n_jobs=-1)
rf_clf.fit(X, y)

随机森林拥有决策树和BaggingClassifier的所有参数

Extra-Trees

决策树在节点划分上,使用随机的特征和随机的阈值

scikit-learn

from sklearn.ensemble import ExtraTreesClassifier

et_clf = ExtraTreesClassifier(n_estimators=500, bootstrap=True, oob_score=True, random_state=666, n_jobs=-1)
et_clf.fit(X, y)

et_clf.oob_score_

回归问题

from sklearn.ensemble import BaggingRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import ExtraTreesRegressor

AdaBoosting

将样本数据增加权重进行训练,训练完成后,得出再对训练效果不好的数据增加权重再次进行训练,如此循环。每个模型都在尝试增强(Boosting)整体的效果。

scikit-learn

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier

ada_clf = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=2), n_estimators=500)
ada_clf.fit(X_train, y_train)

ada_clf.score(X_test, y_test)

Gradient Boosting

训练一个模型m1,产生错误e1,针对e1训练第二个模型m2,产生错误e2。针对e2训练第三个模型m3,产生错误e3,最终结果为m1+m2+m3....

scikit-learn

from sklearn.ensemble import GradientBoostingClassifier

gb_clf = GradientBoostingClassifier(max_depth=2, n_estimators=30)
gb_clf.fit(X_train, y_train)

Boosting解决回归问题

from sklearn.ensemble import AdaBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor

Stacking

类似神经网络,将多模型计算出来的结果再次进行建模

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 假设你去随机问很多人一个很复杂的问题,然后把它们的答案合并起来。通常情况下你会发现这个合并的答案比一个专家的答案要...
    城市中迷途小书童阅读 2,733评论 0 1
  • (第一部分 机器学习基础)第01章 机器学习概览第02章 一个完整的机器学习项目(上)第02章 一个完整的机器学习...
    SeanCheney阅读 5,382评论 1 18
  • About 个人同时在简书和自制个人博客两个地方同时更新文章,有兴趣的话可以来我的博客玩呀,一般而言排版会好不少。...
    DeamoV阅读 3,000评论 0 1
  • 问题:Matlab中的images 可以轻松方便的把相似度矩阵之类的展示出来,但是python中好像并没有类似的矩...
    Aerio_不要坐井观天阅读 1,165评论 0 0
  • 日精进打卡 姓名:熊艳红 公司:宁波蓝天白云供应链管理有限公司 【日精进打卡第111天】 【知~学习】 听书 【...
    熊熊Lv阅读 125评论 0 0