XGBoost参数调优—以鸢尾花数据集分类任务为例

XGBoost(Extreme Gradient Boosting)是一种集成学习算法,属于3类常用的集成方法(bagging、boosting、stacking)中的boosting算法类别。

另外,XGBoost属于梯度提升决策树(gradient boosting decision tree,GBDT)模型的范畴,如果能找到模型的较为优质的参数进行训练,就可以让模型在梯度下降过程中,更快地收敛,以及更好找到更小的损失值。

下面只是针对参数调优进行的实验,因此我们选择小一点的鸢尾花数据集,具体Python示例如下:

from sklearn import datasets
from sklearn.model_selection import train_test_split  # 导入数据分割接口
from sklearn.model_selection import GridSearchCV  # 导入网格搜索接口
import xgboost as xgb

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

'''
由于逻辑回归的分类标签只能在[0,1],所以我们选取鸢尾花前两个类别的数据进行试验
注意:鸢尾花数据集的分类数据是有序的
- 第1个样本到第50个属于第0类,对应 setosa(山鸢尾)
- 第51到第100个样本属于第1类,对应 versicolor(杂色鸢尾)
- 第101个样本到150个样本属于第2类,对应 virginica(维吉尼亚鸢尾)
'''
# 方式一:
X_select = X[y != 2, :]
y_select = y[y != 2]

# 方式二:
# X_s = X[:100,:]
# y_s = y[:100]

# 数据分割:测试集占30%
X_train,X_test,y_train,y_test = train_test_split(X_select,y_select,test_size=0.3,random_state=0)

# 定义交叉验证函数
def model_cv(model, X, y, cv_folds=5, early_stopping_rounds=50, seed=0):
    '''
    :param model: 模型估计器
    :param X: 训练集特征数组
    :param y: 训练集目标数组
    :param cv_folds: 交叉验证的份数
    :param early_stopping_rounds: 在多少次迭代 metrics 没有变好的情况下提前结束
    :param seed: 随机种子
    :return: 此参数组下最佳的迭代次数(n_estimators)
    '''
    # 获取 xgboost 特定参数
    xgb_param = model.get_xgb_params()

    # 构建XGBoost中使用的数据矩阵 data matrix
    # DMatrix 是 XGBoost 使用的内部数据结构,它针对内存效率和训练速度进行了优化
    xgb_train = xgb.DMatrix(data=X, label=y)

    # 在给定的参数下进行交叉验证,xgboost.cv()函数返回交叉验证的评价历史信息
    '''
    xgboost.cv()函数的参数
     num_boost_round ---> boosting 迭代的次数
     metric ---> 评价指标
     callback ---> 在每次迭代结束时应用的回调函数列表。 可以通过使用 Callback API 来使用预定义的回调。
     例如:[xgb.callback.LearningRateScheduler(custom_rates)。
     这里xgb.callback.EvaluationMonitor()函数的作用是打印每次迭代的评估结果

    '''
    cv_result = xgb.cv(params=xgb_param, dtrain=xgb_train, metrics='auc'
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是使用Python搭建XGBoost模型进行鸢尾花数据集分类任务的示例代码: ```python # 导入所需库 import xgboost as xgb from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 data = load_iris() X = data.data y = data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义模型参数 params = { 'objective': 'multi:softmax', # 多分类问题 'num_class': 3, # 类别数量 'max_depth': 3, # 决策树最大深度 'eta': 0.1, # 学习率 'subsample': 0.7, # 随机采样训练样本 'colsample_bytree': 0.7, # 随机采样特征 'seed': 42 # 随机种子 } # 将数据转换为DMatrix格式 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test) # 训练模型 model = xgb.train(params, dtrain) # 预测 y_pred = model.predict(dtest) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("准确率:", accuracy) ``` 这段代码首先导入了所需的库,然后加载鸢尾花数据集并划分为训练集和测试集。接下来,定义了XGBoost模型的参数,包括目标函数、类别数量、决策树最大深度、学习率等。然后,将训练集数据转换为DMatrix格式,用于训练模型。训练完成后,使用测试集数据进行预测,并计算准确率。 注意:在运行代码之前,请确保已经安装了XGBoost库和Scikit-learn库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值