zoukankan      html  css  js  c++  java
  • 集成学习

    集成学习

    基本思想

    集成学习主要思想是:通过构建并结合多个机器学习来完成任务,通过一定的策略将各学习器结合。主要有两类:一类是Boosting,另一类是Bagging

    Boosting:同质学习器,存在信赖关系,往往是串行的,根据误差调节样本权重,代表AdaBoost和Boost tree;

    Bagging:学习器之间不存在信赖,代表算法是bagging或随机森林。

    集成学习策略

    1. 平均法

    2. 投票法

    3. 学习法

      对学习器的结果再加上一层学习器

    Adaboost

    Adaboost过程:先训练一个学习器1,根据误差更新训练样本权重,使得之前弱学习器1学习误差率高的样本权重变高,使得这些误差率高的在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练样本训练学习器2,如此重复进行。

    需要确定的几个问题:

    1)如何计算学习误差e?

    2)如何得到弱学习器权重系数(alpha)?

    3)如何更新样本权重D?

    4)使用何种结合策略

    Adaboost算法思路

    分类问题

    假设训练集为

    [T={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} ]

    训练集在第k个学习器的输出权重为

    [M(k)=(w_{k1},w_{k2},...,w_{km})qquad w_{ki}=frac{1}{m}quad i=1,2,...,m ]

    学习误差

    以分类问题为例,假设问题为二元分类问题,输出为{-1,1},则第k个弱分类器(G_k(x))在训练集上的加权误差为

    [e_k=P(G_k(x_i) e y_i)=sum_{i=1}^mw_{ki}I(G_k(x_i) e y_i) ]

    学习器权重系数

    对于二元分类问题,第k个弱分类器(G_k(x))的权重系数为

    [alpha_k=frac{1}{2}log frac{1-e_k}{e_k} ]

    可以看出,如果分类误差(e_k)越大,刚对应的弱分类器权重系数(alpha_k)越小。

    样本权重系数

    假设第k个弱分类器的样本权重系数为(D(k)=(w_{k1},w_{k2},...,w_{km})),则对应的第k+1个弱分类器的样本权重系数为

    [w_{k+1}=frac{w_{ki}}{Z_K}exp (-alpha_ky_iG_k(x_i)) ]

    这里(Z_k)是规范化因子

    [Z_k=sum_{i=1}^mw_{ki}exp(-alpha_ky_iG_k(x_i)) ]

    (w_{k+1})可以看出,如果第i个样本分类错误,则(y_iG_k(x_i)lt 0),导致样本权重在第k+1个弱分类器中增大,如分类正确,则权重在第k+1个弱分类器中减少。

    集合策略

    Adaboost使用加权表决法,最终分类器为

    [f(x)=sign(sum_{k=1}^Kalpha_kG_k(x)) ]

    回归问题

    略。。

    Adaboost损失函数、算法流程、正则化

    参见刘建平博客

    Adaboost小结

    使用最广泛的弱学习器就是神经网络和决策树

    Adaboost优点:

    1. 分类精度高
    2. 可以使用各类回归、分类算法,使用灵活
    3. 二分类时,构建简单,可理解
    4. 不易发生过拟合

    Adaboost缺点:

    对异常样本敏感,异常样本在迭代中可能获得较高的权重,影响学习。

    sklearn Adaboost类库使用

    sklearn Adaboost类库

    在sklearn中Adaboost有两个类库AdaBoostClassifier和AdaBoostRegressor,分别用于实现分类和回归。

    主要参数

    base_estimator

    弱分类器,默认是决策树,使用CART分类树DecisionTreeClassifier。

    algorithm

    主要是两种分类算法选择SAMME和SAMME.R,两者主要区别在于学习器权重的度量。

    loss

    回归时loss度量

    n_estimator

    学习器最大迭代次数,n太小容易欠拟合,n太大容易过拟合。默认50

    learning_rate

    每个弱学习器的权重系数,较小的系数意味着较多次的迭代,所以一般两个参数n_estimator和learning_rate一起进行调参。

    分类器DecisionTreeClassifier参数

    max_features

    最大特征数,默认是None,考虑所有特征数。

    max_depth

    决策树最大深度

    min_samples_split

    内部节点再划分所需最小样本数

    min_samples_leaf

    叶节点最小样本数

    min_weight_fraction_leaf

    叶节点最小样本权重和

    max_leaf_nodes

    最大节点数

    AdaBoost实例

    from sklearn.ensemble import AdaBoostRegressor
    from sklearn.ensemble import AdaBoostClassifier
    from sklearn.tree import DecisionTreeClassifier
    
    bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),
                             algorithm='SAMME', n_estimators=200, learning_rate=0.8)
    bdt.fit(x,y)
    print(bdt.score(x,y))
    
  • 相关阅读:
    CSS3的[att$=val]选择器
    CSS3的[att^=val]选择器
    CSS3的[att*=val]选择器
    CSS3的[att=val]选择器
    web报表工具finereport常用函数的用法总结(数组函数)
    web报表工具finereport常用函数的用法总结(数组函数)
    人性多面性的终极教材——北漂18年(4)
    第23章 MYSQL结构
    11g OS文件移动到ASM
    Oracle 10g TAF配置
  • 原文地址:https://www.cnblogs.com/guesswhy/p/12882753.html
Copyright © 2011-2022 走看看