zoukankan      html  css  js  c++  java
  • adaBoost

    算法概述

    初始化权重,一般初始化是均分布,构造弱分类器,进行分类,然后给这个分类器一个权重。

    改变数据集的权值分布,将分类错误的数据集分更大的权重,分类正确的数据分较小的权重,使用弱分类器进行分类,给这个训练好的弱分类器一个权重。

    重复执行上述过程,预测时,根据训练好的多个弱分类器及其权值,决定要预测测试样本的标签。

    算法原理

    adaboost是一种加法模型,先讲下加法模型的损失函数:

     

    这里的Ft-1(xi)是前面训练好的提升分类器,h(xi)是新添加的若分类器,αt是弱分类器的权值,也叫学习的步长。E就是经过弱分类器h(xi)提升的强分类器在数据集上的错误率,即损失函数。

    接着我们开始介绍adaboost算法:

    假设经过m-1次迭代已经得到m-1个弱分类器的线性组合:

     

    我们想通过下次迭代产生一个弱分类器,将其原分类器扩展为更好的提升分类器:

     

    定义损失函数如下:

     

    我们假定yi取-1和+1,那么当分类正确时:

     

    因此对损失函数改写为:

     

     

    将损失函数对αm求导,并使等式为0,可以求解αm

     

    定义加权误差率:

     

    所以:

     

    设训练数据集T={(x1,y1), (x2,y2)…(xN,yN)}

    初始化训练数据的权值分布:

     

    使用具有权值分布Dm的训练数据集学习,得到基本分类器

     

    计算Gm(x)在训练数据集上的分类误差率

     

    计算Gm(x)的系数(该分类器的权值)

     

    更新训练数据集的权值分布

     

    这里,Zm是规范化因子, 它的目的仅仅是使Dm+1成为一个概率分布

     

    构建基本分类器的线性组合

     

    得到最终分类器

     

    调参

    from sklearn.ensemble import AdaBoostClassifier

    AdaBoostClassifier(base_estimator=None,  n_estimators=50,  learning_rate=1.0,  algorithm='SAMME.R',  random_state=None)

    1)弱学习器的数量由参数 n_estimators 来控制。 learning_rate 参数用来控制每个弱学习器对 最终的结果的贡献程度(其实应该就是控制每个弱学习器的权重修改速率,这里不太记得了,不确定)。

     

    2) 弱学习器默认使用决策树。不同的弱学习器可以通过参数 base_estimator 来指定。 获取一个好的预测结果主要需要调整的参数是 n_estimators 和 base_estimator的复杂度 (例如:对于弱学习器为决策树的情况,树的深度 max_depth 或叶子节点的最小样本数 min_samples_leaf 等都是控制树的复杂度的参数)

     

  • 相关阅读:
    arcgis使用python,做arctoolbox,渔网裁剪gdb里的要素,四等分
    arcgis计算中心点的质心XY,并根据属性Label进行标注。
    arcpy对要素类每个图斑批量出图。
    python安装模块wheel步骤
    arcgis中shp文件的字符串string型字段转换为日期型Date格式。如“20190426”转为“2019/4/26”
    .tar.gz海量遥感影像解压
    python压缩解压文件(天地图切片批量解压缩)
    python读取多层嵌套文件夹中的文件(zip文件嵌套在不同层级的文件夹中)
    使用Binding时关于数据更新的注意事项
    滑动列表底部自动加载下一页。修改旧代码ing
  • 原文地址:https://www.cnblogs.com/yongfuxue/p/10039020.html
Copyright © 2011-2022 走看看