《统计学习方法》之AdaBoost代码实现

    AdaBoost是boosting方法的一种,boosting的思路就是通过在训练过程中改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,从而提高分类性能。这里的改变训练样本的权重,其实本质上改变的是错误率的计算,也就是加大权重大的样本对错误率的影响,也就是常说的使得分类错误的样本得到更多的关注。
    整个算法概括为以下步骤:

  1. 初始化样本权重,一开始每个样本权重都为 1 n \frac{1}{n} n1,n为样本个数
  2. 训练基分类器(正确率不高的弱分类器),训练完成后计算错误率(这里的错误率是和样本权重有关的),根据错误率计算alpha
  3. 使用alpha更新样本权重,并将alpha作为当前基学习器在最后的集成模型中的权重
  4. 判断是否停止迭代,这里的停止条件可以是集成模型预测正确率为100%时停止,也可以设置最大迭代次数。

代码运行结果(书中的例子):
运行结果
完整代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Created on 2019/12/25 17:03
@author: phil
"""
import numpy as np


class Adaboost:
    def __init__(self, max_base_model_num=10, print_out=False):
        # 基学习器的权重
        self.alpha = []
        # 基学习器, 每个学习器都有predict方法
        self.base_models = []
        # 基学习器数量的最大值
        self.max_base_model_num = max_base_model_num
        # 是否输出训练过程中的中间结果
        self.print_out = print_out

    def fit(self, X, y):
        # 使用数据X,y训练模型
        # 类型均为ndarray, shape为(n,)
        n = len(X)
        # 初始化权重
        w = np.ones((n,)) / n

        for i in range(
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值