机器学习算法实现(3):手写AdaBoost与GBDT

本文作为机器学习算法实现系列的一部分,探讨了如何手动实现AdaBoost和GBDT。AdaBoost作为二分类方法,通过调整样本和基分类器权重来提升决策树性能。而GBDT虽类似,但使用回归树,适用于不同的损失函数。文章详细阐述了两种算法的实现过程。
摘要由CSDN通过智能技术生成

【系列开头】开这个系列是因为最近学习某些算法纸上谈兵太久,算法流程背的再熟,没有实现过就没法真正的理解算法的细节。这个系列要实现算法的顺序为逻辑回归、决策树(CART)、AdaBoost、GBDT。其他算法根据后续学习情况进行添加。

AdaBoost是一种二分类的方法,实现起来十分简单,却能大大提升决策树的性能,不得不说十分神奇,至于为什么会有这种效果,书上都有证明,这里只给出算法实现。

代码的步骤主要就是计算样本权重和基分类器的权重。

  1. 初始化
import numpy as np
from sklearn.tree import DecisionTreeClassifier

class AdaBoostClassifier:
    def __init__(self, n_estimators=5):
        self.n_estimators = n_estimators
        self.estimators_ = [DecisionTreeClassifier(max_depth=1) for _ in range(self.n_estimators)]
        self.estimators_weights_ = [None] * self.n_estimators
  1. 更新参数
    def __update_w(self, w, y_true, y_pred):
        weight_err = np.sum(w * (y_true != y_pred)) / np.sum(w)
        alpha = np.log(1 / weight_err - 1)
        w = w * np.exp(alpha * (y_true != y_pred))
        w = w / np.sum(w)

        return w, alpha
  1. 拟合与预测
    def fit(self, X_train, y_train):
        y_train[y_train == 0] = -1
        n_samples, n_features = X_train.shape
        w = np.array([1 / n_samples
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值