adaboost提升树

Adaboost是一种结合多个弱分类器形成强分类器的算法,它通过不断调整分类器权重避免过拟合,并能自动进行特征选择。适用于分类和特征选择任务。在sklearn库中, AdaBoostClassifier和AdaBoostRegressor提供了实现,可通过调整n_estimators和learning_rate等参数进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

adaboost 是一种通过多个弱分类器相互协作,从而得出强分类器的一种方式。简单的说就是三个臭皮匠敌得过一个诸葛亮。

优势

  1. 可以通过各种弱分类器组合强分类器
  2. 多种分类器权重的不断调整,不会有过拟合现象
  3. 通过权重自动更改不需做特征筛选,同时这个性质也能选出特征值,能够应用与特征选择

应用

  1. 分类
  2. 特征选择

公式推导

注:相关公式推导,请看李航《统计学习方法》提升树,本文以实用性向大家介绍。

类库介绍

sklearn 有AdaBoostClassifier和AdaBoostRegressor两种提升树方式

  1. base_estimator 弱分类器选择器,可以选择机会所有的分类器,但一般为决策树CART和神经网络(MLP)
  2. n_estimators 分类器数量,默认50,太大会过拟合,太小会欠拟合
  3. lerning_rate 学习率,一般为

注:可以利用GridSearchCV 方式进行n_estimators和learning_rate的超参选择

案例代码




import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles
from sklearn.model_selection import GridSearchCV


def get_data():
    # 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征,协方差系数为2
    X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500, n_features=2,n_classes=2, random_state=1)
    # 生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3,协方差系数为2
    X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5,n_samples=400, n_features=2, n_classes=2, random_state=1)
    #讲两组数据合成一组数据
    X = np.concatenate((X1, X2))
    y = np.concatenate((y1, - y2 + 1))
    return X ,y
def print_best_score(gsearch,param_test):
     # 输出best score
    print("Best score: %0.3f" % gsearch.best_score_)
    print("Best parameters set:")
    # 输出最佳的分类器到底使用了怎样的参数
    best_parameters = gsearch.best_estimator_.get_params()
    for param_name in sorted(param_test.keys()):
        print("\t%s: %r" % (param_name, best_parameters[param_name]))

def model(X,Y):
    bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),
                            algorithm="SAMME",
                            )
    param_test ={
        'n_estimators': range(200,300,100),
        'learning_rate': [0.5,0.6]
    }
    gsearch = GridSearchCV( bdt , param_grid = param_test, scoring='roc_auc', cv=5 )
    gsearch.fit(X,Y)
    
    print_best_score(gsearch,param_test)
# 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.arange(x_min, x_max, 0.02),
#                      np.arange(y_min, y_max, 0.02))
 
# Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])
# Z = Z.reshape(xx.shape)
# cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
# plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)
# plt.show()
if __name__ == "__main__":
    x,y = get_data()
    model(x,y)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值