(九)AdaBoost 中参数对于决策边界复杂度分析

怎么评估一个对象的边界很复杂?代码与指标 通过对象的形状指标来计算对象的复杂度 阅读详情

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


(一)机器学习中的集成学习入门

(二)bagging 方法

(三)使用Python进行交易的随机森林算法

(四)Python中随机森林的实现与解释

(五)如何用 Python 从头开始实现 Bagging 算法

(六)如何利用Python从头开始实现随机森林算法

(七)AdaBoost 简介

(八)Python 中的 AdaBoost 分类器实例

(九)AdaBoost 中参数对于决策边界复杂度分析


文本探索了众所周知的AdaBoost M1算法,该算法结合了几种弱分类器来创建更好的整体分类器。 该文包括三个主要部分:

  • 回顾Adaboost M1算法及其内部工作的直观可视化
  • Python中的一个实现,使用Sklearn决策树桩作为弱分类器
  • 关于学习率与弱分类器参数数量之间权衡的讨论

AdaBoost 算法的直观解释

AdaBoost 回顾

假设 G m ( x ) G_m(x) Gm​(x) m=1,2,3…M 是弱分类器的序列,我们的目标是构建以下内容:
G ( x ) = sign ⁡ ( α 1 G 1 ( x ) + α 2 G 2 ( x ) + … α M G M ( x ) ) = sign ⁡ ( ∑ m = 1 M α m G m ( x ) ) G(x)=\operatorname{sign}\left(\alpha_{1} G_{1}(x)+\alpha_{2} G_{2}(x)+\ldots \alpha_{M} G_{M}(x)\right)=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right) G(x)=sign(α1​G1​(x)+α2​G2​(x)+…αM​GM​(x))=sign(m=1∑M​αm​Gm​(x))

  • 最终预测是通过加权多数投票来组合所有分类器的预测
  • 系数 α m \alpha_m αm​ 由boosting算法完成,该系数对每个 G m ( x ) G_m(x) Gm​(x) 进行加权。效果是对序列中更准确的分类器产生更大的影响
  • 在每一个 boosting 步骤中,通过将权重 w1,w2,…,wN 应用到每个训练样本来修改数据的分布。在步骤 m,我们先将分类错误的样本的权重提高,将正确分类的样本的权重降低
  • 注意,在第一步 m=1 时,权重需要平均初始化 wi = 1/N

具体算法为:

  1. 初始化所有的权重 w i = 1 / N w_i = 1/N wi​=1/N

  2. For m = 1,2,3, … ,M

    1. 计算加权误差:
      E r r m = ∑ i − 1 N w i I ( y ( i ) ≠ G m ( x ( i ) ) ∑ i = 1 N w i E r r_{m}=\frac{\sum_{i-1}^{N} w_{i} I\left(y^{(i)} \neq G_{m}\left(x^{(i)}\right)\right.}{\sum_{i=1}^{N} w_{i}} Errm​=∑i=1N​wi​∑i−1N​wi​I(y(i)̸​=Gm​(x(i))​

    2. 计算系数:
      α m = log ⁡ ( 1 − e r r m e r r m ) \alpha_{m}=\log \left(\frac{1-e r r_{m}}{e r r_{m}}\right) αm​=log(errm​1−errm​​)

    3. 更新权重:
      w i ← w i exp ⁡ [ α m I ( y ( i ) ≠ G m ( x ( i ) ) ) ] w_{i} \leftarrow w_{i} \exp \left[\alpha_{m} \mathcal{I}\left(y^{(i)} \neq G_{m}\left(x^{(i)}\right)\right)\right] wi​←wi​exp[αm​I(y(i)̸​=Gm​(x(i)))]

  3. 输出:
    G ( x ) = sign ⁡ [ ∑ m = 1 M α m G m ( x ) ] G(x)=\operatorname{sign}\left[\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right] G(x)=sign[m=1∑M​αm​Gm​(x)]

简单例子

假设我们使用一个如下最简单的数据集来测试我们的 AdaBoost 模型。迭代次数 M = 10,弱分类器是深度为1和2的决策树。数据是下图的红色点和蓝色点,很明显这是一个非线性的分类,但是我们的模型应该能很好地工作。

在这里插入图片描述

可视化弱分类器的序列模型和样本权重

前 6 个弱学习器 m =1,2,3,4,5,6 如下所示。在每次迭代时根据它们各自的样本权重来缩放散点。

在这里插入图片描述

第一次迭代
  • 因为我们是弱分类器,所以决策边界非常简单(线性方式)
  • 正如预期的那样,所有点的大小都相同
  • 6个蓝点位于红色区域,并且被错误分类
第二次迭代
  • 线性决策边界已经改变
  • 之前错误分类的蓝色点现在更大(更大的 sample_weight)并影响了决策边界
  • 9个蓝点现在被错误分类
10次迭代后的最终结果

所有分类器在不同位置具有线性决策边界。前 6 次迭代 α m \alpha_m αm​ 的系数为:([1.041, 0.875, 0.837, 0.781, 1.04 , 0.938…

正如预期的那样,第一次迭代具有最大的系数,因为它是错误分类最少的系数。

从头开始实现 AdaBoost M1

导入库

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
import seaborn as sns
sns.set_style('white')

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

数据集和适用的可视化函数

#Toy Dataset
x1 = np.array([.1,.2,.4,.8, .8, .05,.08,.12,.33,.55,.66,.77,.88,.2,.3,.4,.5,.6,.25,.3,.5,.7,.6])
x2 = np.array([.2,.65,.7,.6, .3,.1,.4,.66,.77,.65,.68,.55,.44,.1,.3,.4,.3,.15,.15,.5,.55,.2,.4])
y = np.array([1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])
X = np.vstack((x1,x2)).T

def plot_decision_boundary(classifier, X, y, N = 10, scatter_weights = np.ones(len(y)) , ax = None ):
    '''Utility function to plot decision boundary and scatter plot of data'''
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid( np.linspace(x_min, x_max, N), np.linspace(y_min, y_max, N))

    
    #Check what methods are available
    if hasattr(classifier, "decision_function"):
        zz = np.array( [classifier.decision_function(np.array([xi,yi]).reshape(1,-1)) for  xi, yi in zip(np.ravel(xx), np.ravel(yy)) ] )
    elif hasattr(classifier, "predict_proba"):
        zz = np.array( [classifier.predict_proba(np.array([xi,yi]).reshape(1,-1))[:,1] for  xi, yi in zip(np.ravel(xx), np.ravel(yy)) ] )
    else :
        zz = np.array( [classifier(np.array([xi,yi]).reshape(1,-1)) for  xi, yi in zip(np.ravel(xx), np.ravel(yy)) ] )
            
    # reshape result and plot
    Z = zz.reshape(xx.shape)
    cm_bright = ListedColormap(['#FF0000', '#0000FF'])
    
    #Get current axis and plot
    if ax is None:
        ax = plt.gca()
    ax.contourf(xx, yy, Z, 2, cmap='RdBu', alpha=.5)
    ax.contour(xx, yy, Z,  2, cmap='RdBu')
    ax.scatter(X[:,0],X[:,1], c = y, cmap = cm_bright, s = scatter_weights * 40)
    ax.set_xlabel('$X_1$')
    ax.set_ylabel('$X_2$')

sklearn adaboost 和决策边界

boost = AdaBoostClassifier( base_estimator = DecisionTreeClassifier(max_depth = 1, max_leaf_nodes=2), 
                            algorithm = 'SAMME',n_estimators=10, learning_rate=1.0)
boost.fit(X,y)
plot_decision_boundary(boost, X,y, N = 50)#, weights)
plt.show()

boost.score(X,y)

1.0

在这里插入图片描述

python实现

def AdaBoost_scratch(X,y, M=10, learning_rate = 1):
    #Initialization of utility variables
    N = len(y)
    estimator_list, y_predict_list, estimator_error_list, estimator_weight_list, sample_weight_list = [], [],[],[],[]

    #Initialize the sample weights
    sample_weight = np.ones(N) / N
    sample_weight_list.append(sample_weight.copy())

    #For m = 1 to M
    for m in range(M):   

        #Fit a classifier
        estimator = DecisionTreeClassifier(max_depth = 1, max_leaf_nodes=2)
        estimator.fit(X, y, sample_weight=sample_weight)
        y_predict = estimator.predict(X)

        #Misclassifications
        incorrect = (y_predict != y)

        #Estimator error
        estimator_error = np.mean( np.average(incorrect, weights=sample_weight, axis=0))
        
        #Boost estimator weights
        estimator_weight =  learning_rate * np.log((1. - estimator_error) / estimator_error)

        #Boost sample weights
        sample_weight *= np.exp(estimator_weight * incorrect * ((sample_weight > 0) | (estimator_weight < 0)))

        #Save iteration values
        estimator_list.append(estimator)
        y_predict_list.append(y_predict.copy())
        estimator_error_list.append(estimator_error.copy())
        estimator_weight_list.append(estimator_weight.copy())
        sample_weight_list.append(sample_weight.copy())
        


    #Convert to np array for convenience   
    estimator_list = np.asarray(estimator_list)
    y_predict_list = np.asarray(y_predict_list)
    estimator_error_list = np.asarray(estimator_error_list)
    estimator_weight_list = np.asarray(estimator_weight_list)
    sample_weight_list = np.asarray(sample_weight_list)

    #Predictions
    preds = (np.array([np.sign((y_predict_list[:,point] * estimator_weight_list).sum()) for point in range(N)]))
    print('Accuracy = ', (preds == y).sum() / N) 
    
    return estimator_list, estimator_weight_list, sample_weight_list

运行代码

Accuracy = 100% - 结果跟 Sklearn 实现一样。

estimator_list, estimator_weight_list, sample_weight_list  = AdaBoost_scratch(X,y, M=10, learning_rate = 1)
Accuracy =  1.0

adaboost_scratch 可视化

def plot_AdaBoost_scratch_boundary(estimators,estimator_weights, X, y, N = 10,ax = None ):
    
    def AdaBoost_scratch_classify(x_temp, est,est_weights ):
        '''Return classification prediction for a given point X and a previously fitted AdaBoost'''
        temp_pred = np.asarray( [ (e.predict(x_temp)).T* w for e, w in zip(est,est_weights )]  ) / est_weights.sum()
        return np.sign(temp_pred.sum(axis = 0))
    
    
    '''Utility function to plot decision boundary and scatter plot of data'''
    x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
    y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
    xx, yy = np.meshgrid( np.linspace(x_min, x_max, N), np.linspace(y_min, y_max, N))


    zz = np.array( [AdaBoost_scratch_classify(np.array([xi,yi]).reshape(1,-1), estimators,estimator_weights ) for  xi, yi in zip(np.ravel(xx), np.ravel(yy)) ] )
            
    # reshape result and plot
    Z = zz.reshape(xx.shape)
    cm_bright = ListedColormap(['#FF0000', '#0000FF'])
    
    if ax is None:
        ax = plt.gca()
    ax.contourf(xx, yy, Z, 2, cmap='RdBu', alpha=.5)
    ax.contour(xx, yy, Z,  2, cmap='RdBu')
    ax.scatter(X[:,0],X[:,1], c = y, cmap = cm_bright)
    ax.set_xlabel('$X_1$')
    ax.set_ylabel('$X_2$')

绘制决策边界

plot_AdaBoost_scratch_boundary(estimator_list, estimator_weight_list, X, y, N = 50 )

在这里插入图片描述

查看 AdaBoost 中弱分类器的决策边界

  • M=10 迭代
  • 散点的大小与 sample_weights 的比例成正比

例如,在左上图 m = 0,6个蓝色点被错误分类。在下一个方差 m = 1 中,它们的样本权重增加,散点图显示也变大。

estimator_list, estimator_weight_list, sample_weight_list  = AdaBoost_scratch(X,y, M=10, learning_rate = 1)

fig = plt.figure(figsize = (14,14))
for m in range(0,9):
    fig.add_subplot(3,3,m+1)
    s_weights = (sample_weight_list[m,:] / sample_weight_list[m,:].sum() ) * 40
    plot_decision_boundary(estimator_list[m], X,y,N = 50, scatter_weights =s_weights )
    plt.title('Estimator decision boundary, m = {}'.format(m))
    
Accuracy =  1.0

在这里插入图片描述

学习率和迭代次数之间的直观解释

这篇文章基于 AdaBoost 算法类似于 M1 或者 SAMME 实现的假设,可以按如下方式进行分类:

设 G m ( x ) G_m(x) Gm​(x) m = 1,2,…,M 是弱分类器的序列,我们的目标是:
G ( x ) = sign ⁡ ( α 1 G 1 ( x ) + α 2 G 2 ( x ) + … α M G M ( x ) ) = sign ⁡ ( ∑ m = 1 M α m G m ( x ) ) G(x)=\operatorname{sign}\left(\alpha_{1} G_{1}(x)+\alpha_{2} G_{2}(x)+\ldots \alpha_{M} G_{M}(x)\right)=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right) G(x)=sign(α1​G1​(x)+α2​G2​(x)+…αM​GM​(x))=sign(m=1∑M​αm​Gm​(x))

AdaBoost M1
  1. 初始化权重: w i = 1 / N w_i = 1/N wi​=1/N

  2. For m = 1,2,3,….,M

    1. 计算加权误差:$ Err_m = \frac{\sum_{i-1}^N w_i \mathcal{I}(y^{(i)} \neq G_m(x^{(i)}) )}{\sum_{i=1}^N w_i}$

    2. 计算估算系数:
      α m = L log ⁡ ( 1 − e r r m e r r m ) \alpha_{m}=L \log \left(\frac{1-e r r_{m}}{e r r_{m}}\right) αm​=Llog(errm​1−errm​​)
      其中, L ≤ 1 L\leq 1 L≤1 是学习率

    3. 更新数据权重:
      w i ← w i exp ⁡ [ α m I ( y ( i ) ≠ G m ( x ( i ) ) ) ] w_{i} \leftarrow w_{i} \exp \left[\alpha_{m} \mathcal{I}\left(y^{(i)} \neq G_{m}\left(x^{(i)}\right)\right)\right] wi​←wi​exp[αm​I(y(i)̸​=Gm​(x(i)))]

​ 4. 为避免数值不稳定,请在每一步进行标准化权重:

  1. w i ← w 1 ∑ i = 1 N w i w_{i} \leftarrow \frac{w_{1}}{\sum_{i=1}^{N} w_{i}} wi​←∑i=1N​wi​w1​​

  2. 输出:
    G ( x ) = sign ⁡ [ ∑ m = 1 M α m G m ( x ) ] G(x)=\operatorname{sign}\left[\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right] G(x)=sign[m=1∑M​αm​Gm​(x)]

学习率 L 与弱分类器 M 的影响

从上面的算法我们可以直观的理解:

  • 降低学习速率 L 使得系数 α m \alpha_m αm​ 更小,这见笑了每一步的 sample_weights 的幅度,因为 w i ← w i e α m I … w_{i} \leftarrow w_{i} e^{\alpha_{m} \mathcal{I} \ldots} wi​←wi​eαm​I… 。这转化为加权数据点的变化变小,因此弱分类器决策边界之间的差异较小
  • 增加弱分类器 M 的数量会增加迭代次数,并允许样本权重获得大的幅度变化。这将得到,1)在最后迭代更弱的分类器将会组合。2)这些分类器的决策边界将有更多变化。这两个影响放到一起往往会导致更复杂的整体决策边界。

从这种直觉来看,在参数 L 和 M 之间进行权衡是非常有意义的。增加一个或者减少一个将直接对最终结果产生很大影响。

一个简单数据集

下图展示了一个简单数据集。并且绘制了 L 和 M 的不同值的最终决策边界表明两者之间存在一些直观的关系。

在这里插入图片描述

  • 太小的 L 或者 M 导致过度简化决策边界,左边图
  • 制作一个大的参数和一个小的参数,倾向于中间的图
  • 使得两者的参数大小差不多,那么倾向于右图
代码
fig = plt.figure(figsize = (15,10))
for k,l in enumerate([0.1,0.5,1]):
    fig.add_subplot(2,3,k+1)
    fig.subplots_adjust(hspace=0.4, wspace=0.4)
    estimator_list, estimator_weight_list, sample_weight_list = AdaBoost_scratch(X,y, M=10, learning_rate = l)
    plot_AdaBoost_scratch_boundary(estimator_list,estimator_weight_list, X, y, N = 50,ax = None )
    plt.title('Adaboost boundary: M = 10,  L = {}'.format(l))
    print(estimator_weight_list)

for k,m in enumerate([1,3,10]):
    fig.add_subplot(2,3,k+4)
    fig.subplots_adjust(hspace=0.4, wspace=0.4)
    estimator_list, estimator_weight_list, sample_weight_list = AdaBoost_scratch(X,y, M=m, learning_rate = 1)
    plot_AdaBoost_scratch_boundary(estimator_list,estimator_weight_list, X, y, N = 50,ax = None )
    plt.title('Adaboost boundary: M = {},  L = 1'.format(m))
    print(estimator_weight_list)
Accuracy =  0.7391304347826086
[0.10414539 0.09373085 0.08435776 0.07592199 0.06832979 0.06149681
 0.05534713 0.0549876  0.05308348 0.05268687]
Accuracy =  0.8695652173913043
[0.52072694 0.26823221 0.34353197 0.2425222  0.31806477 0.3092209
 0.31967048 0.29344342 0.25530824 0.30996101]
Accuracy =  1.0
[1.04145387 0.87546874 0.83739679 0.78053386 1.03993142 0.93832294
 0.62863165 0.8769354  0.77916076 1.05526061]
Accuracy =  0.7391304347826086
[1.04145387]
Accuracy =  0.8695652173913043
[1.04145387 0.87546874 0.83739679]
Accuracy =  1.0
[1.04145387 0.87546874 0.83739679 0.78053386 1.03993142 0.93832294
 0.62863165 0.8769354  0.77916076 1.05526061]

在这里插入图片描述

AdaBoost原理深度解析:从指数损失到错误加权的可解释集成 AdaBoost是一种基于指数损失函数的自适应集成学习算法,其核心原理是通过动态调整样本权重,使后续弱分类器聚焦于前序误判样本,从而构建强分类器。该机制不依赖梯度下降,而是由数学可证的权重更新公式驱动,具备天然的可解释性与可干预性。技术价值在于提供细粒度错误归因能力——每轮迭代的权重变化、基学习器贡献度(alpha)、误判样本定位均可量化追踪。典型应用场景包括金融风控中的高置信误判排查、医疗影像中罕见病灶召回优化,以及教学场景下集成逻辑的透明化演示。本文深入剖析其数学本质与工程实现细节,覆盖二分类与多类(S 阅读详情

相关推荐

AdaBoost原理与实战:自适应权重调整与弱分类器协同进化

AdaBoost是一种经典的集成学习算法,其核心在于通过自适应权重调整机制,驱动弱分类器在错误样本上持续迭代优化。它并非简单加权投票,而是基于每轮加权错误率动态校准模型权重,体现‘错误驱动’的增量式学习原理。这种机制赋予了AdaBoost强可解释性与决策透明性,但也使其对标签噪声、类别不平衡和特征质量高度敏感。因此,它特别适用于基学习器稳定略优于随机猜测、且错误模式具备可学习规律的场景,如金融风控中的边缘欺诈识别、工业质检中的细微缺陷检测等。理解其权重更新公式与样本惩罚逻辑,是规避过拟合、实现稳健部署的关键

weixin_34168880的博客 446

【项目实战】Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取。 1.项目背景 AdaBoost是最优秀的Boosting算法之一, 有着坚实的理论基础, 在实践中得到了很好的推广和应用。算法能够将比随机猜测略好的弱分类器提升为分类精度高的强分类器, 为学习算法的设计提供了新的思想和新的方法。AdaBoost算法的特点是对不同的样本赋予不同的权重。Ada,就是adaptive,翻译过来也就是自适应。AdaBoost是给不...

张陈亚的博客 1万+

Python 实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测(含模型描述及示例代码)

本项目旨在通过结合支持向量机(SVM)和AdaBoost算法,构建一个多输入单输出的回归预测模型。SVM在处理非线性数据时表现优异,而AdaBoost通过集成多个弱学习器提升模型的鲁棒性和抗噪能力。项目目标包括优化模型在高维非线性数据上的性能,提升泛化能力,并在多个应用领域(如能源管理、金融分析、医疗诊断等)验证其效果。项目挑战包括数据复杂性、模型融合、超参数调优和计算成本等。项目创新点在于首次将SVM与AdaBoost结合,设计模块化框架,增强模型鲁棒性,并引入多指标评估。通过Python实现,项目展示了

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 683

【集成算法】AdaBoost算法决策边界Python展示分析与Sklearn使用示例

【代码】【集成算法】AdaBoost算法决策边界展示分析与Sklearn使用示例。

weixin_62100318的博客 678

ThinkBook 16 2024 Ubuntu驱动全攻略:从无线网卡到触控板

本文详细介绍了ThinkBook 16 2024在Ubuntu系统下的驱动问题解决方案,涵盖无线网卡、蓝牙、显卡和触控板等关键硬件的驱动修复步骤。通过具体命令和配置指南,帮助用户快速解决兼容性问题,提升Ubuntu在ThinkBook上的使用体验。

weixin_29200741的博客 829

【DICOM后处理】qt+vs 实现DICOM数据四视图显示

方法用于 设置 2D 视图的“向上”方向,即定义图像在屏幕坐标系中的朝向。该方法直接影响影像的显示方向,尤其在多平面重建(MPR)或非标准切面显示时至关重要。:方法用于 设置渲染窗口在屏幕上的显示位置(以像素为单位)。它控制的是 VTK 渲染窗口的左上角在屏幕坐标系中的坐标位置。DICOM四视图通常指同时显示医学影像的四个不同平面或视角,用于全面分析三维数据(如CT、MRI等)。:基于 标量值 设置不透明度(控制不同组织的显示),显示骨骼or显示高密度流体等。默认朝向原点 (0, 0, 0)

weixin_41804847的博客 1326

8线排

文章目录8.0 第二段 第三段 8.1排序算法的下界决策树模型图8-1第二段最坏情况的下界8.2计算排序计排的基本思想计排的代码图8-2计数排序时间代价多少呢?总结8.3基数排序8.4桶排序 8.0 已介绍能在O(nlogn)O(nlogn)O(nlogn)时间内排序nnn个数的算法。 归排和堆排达到了最坏情况下的上界 快排在平均情况下达到该上界 且对这些算法中的每一个,我们都能给出nn...

fgh123的博客 666

海鸥派OpenEuler开发板实战:从烧写到SSH连接的完整指南

本文提供海鸥派OpenEuler开发板从开箱到SSH远程连接的完整实战指南。详细介绍了基于海思SD3403/SS928芯片的算力开发板系统烧写、存储扩容、网络配置等关键步骤,帮助开发者快速上手这款AI边缘计算设备,并实现高效的远程开发与管理。

ruby5的博客 1121

Python集成学习:自己编写构建AdaBoost分类模型可视化决策边界及sklearn包调用比较

原文链接:http://tecdat.cn/?p=24421 原文出处:拓端数据部落公众号 AdaBoost是? Boosting指的是机器学习元算法系列,它将许多 "弱 "分类器的输出合并成一个强大的 "集合",其中每个弱分类器单独的错误率可能只比随机猜测好一点。 AdaBoost这个名字代表了自适应提升,它指的是一种特殊的提升算法,在这种算法中,我们适合一连串的 "树桩"(有一个节点和两个叶子的决策树),并根据它们预测的准确程度对它们的最终投票进行加权。在每个迭代之后,我们对数据集进行重新.

大数据部落 2252

基于Java的高校校园点餐系统

本文介绍了一个基于Java技术开发的高校校园点餐系统,该系统以B/S结构为基础,采用MySQL作为数据库,实现了一个高效、便捷的在线点餐平台。系统主要面向三类用户:管理员、用户和食堂工作人员,提供包括用户管理、食堂管理、菜单管理、订单管理等在内的多项功能。通过系统的具体测试,验证了其可行性和有效性,为高校师生提供了一个科学化、系统化的点餐服务。高校校园点餐系统的开发和实现,不仅提高了校园餐饮服务的效率和质量,也为师生提供了一个更加便捷的点餐体验。

a632341031的博客 841

小波变换(Wavelet Transform)原理及介绍

小波变换是一种多分辨率时频分析工具,克服了傅里叶变换无法定位时间信息的缺陷。通过可伸缩平移的母小波,它能同时捕捉信号的高频细节(短时特征)和低频轮廓(整体趋势)。其核心原理是利用不同尺度的小波基与信号进行内积运算,生成时频域系数矩阵。小波变换具有动态分辨率特性,高频部分时间精度高,低频部分频率分辨率好。主要应用包括瞬态事件检测、信号降噪、数据压缩(如JPEG2000)和压缩感知(如快速MRI)。

qq_42758052的博客 5495

Adaboost算法总结

1. Boosting算法基本原理 Boosting算法是一种由原始数据集生成不同弱学习器的迭代算法,然后把这些弱学习器结合起来,根据结合策略生成强学习器。 如上图,Boosting算法的思路: (1)样本权重表示样本分布,对特定的样本分布生成一个弱学习器。 (2)根据该弱学习器模型的误差率e更新学习器权重α。 (3)根据上一轮的学习器权重α来更新下一轮的样本权重。 (4)重复步骤(1)(2)(...

weixin_41940752的博客 1844

6.4 实战项目:基于Agent内核构建Code Review智能体

本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。

yonggeit的博客 3114

AdaBoost和XGBoost有什么区别

**XGBoost**:引入了更复杂的优化策略,包括基于梯度的优化、特征分裂策略、正则化项和剪枝等,使得模型更稳健且具有更好的泛化能力。它允许用户自定义损失函数,并通过一阶和二阶导数(梯度和海森矩阵)进行优化。- **XGBoost**:由于其高效的优化策略和并行处理能力,特别适合处理复杂的结构化数据和大规模数据集,广泛应用于数据竞赛和工业界的各种机器学习任务中。- **XGBoost**:通过引入正则化项和复杂的特征选择机制,能够有效控制模型复杂度,提高模型的泛化能力,对噪声和异常值的影响相对较小。

2301_80680974的博客 499

Python数据分析全流程指南:从数据采集到可视化呈现的实战解析

在数字化转型浪潮中,数据分析已成为企业决策的核心驱动力。Python凭借其丰富的生态库和简洁的语法,成为数据分析师的首选工具。本文将以实战案例为脉络,拆解数据分析全流程的关键环节,通过具体代码和场景说明如何用Python完成从数据采集到可视化呈现的完整链路。

这家伙很懒,什么都没有留下 1681

【2024遥感应用组一等奖】基于风云四号卫星的小时级大气气溶胶和颗粒物监测

最后,比较AGRI观测反射率和查找表计算的反射率反演得到的1小时分辨率AOD数据。然后,使用广泛应用的MODIS DT和DB产品进行对比,图 5显示了它们逐像元尺度的对比,AGRI LaGA算法可以捕捉亚洲地区AOD高低值空间分布格局,比如南亚次大陆、中南半岛、塔克拉玛干沙漠和华北平原是AOD高值区域(平均AOD高于0.3),中国西北、中国南方、中国东北和韩国地区为AOD中值地区(平均AOD在0.2到0.3之间),北纬45度以上以及日本地区为AOD低值区域(平均AOD小于0.2),与全球平均AOD值接近。

JData_Engineer的博客 375

AdaBoost 与决策树桩:10轮迭代可视化权重变化与错误率收敛分析

本文深入解析了AdaBoost算法与决策树桩在10轮迭代中的权重动态变化与错误率收敛特性。通过可视化分析和实证数据,揭示了样本权重调整机制、错误率下降规律及决策边界演化过程,为机器学习实践者提供了算法优化和工程落地的关键见解。

weixin_34210740的博客 318

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Adaboost权重更新机制全解析:从原理到实战应用

集成学习是机器学习中提升模型性能的核心技术之一,其基本思想是通过结合多个弱学习器的预测结果来构建一个更强大的模型。在众多集成方法中,Boosting算法通过串行训练弱分类器并自适应调整样本权重,使后续模型能够聚焦于之前模型分类错误的样本,从而逐步提升整体性能。Adaboost作为Boosting家族的代表性算法,其核心在于动态的权重更新机制,通过计算每个弱分类器的加权错误率并赋予相应的话语权,实现了对复杂非线性数据的高效建模。这种机制不仅赋予了模型强大的分类能力,也使其在数学建模竞赛和实际业务场景中,成为处

cuibinmo3519的博客 411

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Adaboost和GBDT的区别以及xgboost和GBDT的区别

Adaboost和GBDT的区别以及xgboost和GBDT的区别 以下内容转自 https://blog.youkuaiyun.com/chengfulukou/article/details/76906710 ,本文主要用作记录收藏 AdaBoost VS GBDT 和AdaBoost一样,Gradient Boosting每次基于先前模型的表现选择一个表现一般的新模型并且进行调整。不同的是...

weixin_30391339的博客 215

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

随机森林、AdaBoost 和 XGBoost 三者之间的主要区别

随机森林、AdaBoost 和 XGBoost 三者之间的主要区别

叶庭云 成为自己的光 1852

Adaboost实战精要:金融风控中的错误矫正与权重调优

Adaboost是一种基于错误加权迭代的集成学习算法,其核心原理是通过动态调整样本权重,驱动后续弱学习器聚焦于前序模型判错的难例,从而构建具备强泛化能力的级联决策系统。该机制赋予模型天然的偏差修正能力与业务可解释性,在信贷审批、反欺诈、保险核保等高敏感风控场景中展现出独特技术价值。区别于Bagging或随机森林的并行平均策略,Adaboost的序列式‘错题重做’逻辑更契合真实业务中对误判样本的持续归因与响应需求。本文结合37轮生产级调参经验,深入解析权重更新公式、树桩设计哲学、特征重要性重定义及线上推理稳定

diankui6178的博客 321

adaboost和GBDT的区别以及xgboost和GBDT的区别

AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注,于是,分类问题就被一系列的弱分类器“分而治之”。至于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率较大的弱分类器

chengfulukou的博客 1万+

关于adaboost、GBDT、xgboost之间的区别与联系

AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注,于是,分类问题就被一系列的弱分类器“分而治之”。至于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率较大的弱分类器...

IT届的小学生 7790

【集成学习解惑】AdaBoost 如何调整样本权重来提升分类边界?

AdaBoost 如何调整样本权重来提升分类边界?

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 426

Adaboost与XGBoost深度对比:何时该用哪个提升算法?

本文深度对比了Adaboost与XGBoost两大提升算法。Adaboost通过动态调整样本权重,专注于错分样本,适合快速原型与教学;而XGBoost则通过二阶梯度优化与正则化,在预测精度和工程效率上表现卓越,尤其适用于复杂、大规模的结构化数据任务。文章提供了清晰的选型指南,帮助读者根据具体场景选择最合适的算法。

palm99的专栏 376

Adaboost vs 随机森林:5个实际案例帮你选对集成学习算法

本文通过5个实际案例对比Adaboost与随机森林在集成学习中的表现,帮助数据科学家根据具体场景选择最优算法。详细解析了两种算法的核心机制、适用场景及调优策略,特别适用于高维特征选择、类别不平衡和实时预测等机器学习任务。

weixin_29161719的博客 92
上一篇: (八)Python 中的 AdaBoost 分类器实例
下一篇: (十)stacking 简介
coderpai
博客等级 码龄10年 1082粉丝 469原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值