【机器学习】Xgboost的使用及参数详解

Xgboost的安装

由于Xgboost底层是C++实现的,所以需要先安装Microsoft Visual C++,安装 2015-2019任意一个版本就行;安装完毕后可以在控制面板查看安装结果:
在这里插入图片描述

然后命令行执行pip install xgboost即可

Xgboost的使用

Xgboost的原生库

使用Xgboost的原生库进行学习的流程大致如下:

读取数据
xgboost.Dmatrix()
设置参数
param={}
训练模型
bst=xgboost.train(param)
预测结果
bst.predict()

下面按照图示流程讲解每一步的参数

读取数据

原生库的数据必须封装在DMatrix中才能进行训练;Dmatrix是Xgboost自定义的一个数据矩阵类,用于封装数据,这种定义方式可以优化存储和运算速度,其参数如下:

  • data:训练数据(注意Dmatrix要求数据类型只能是int、float、bool之一,所以数据中如果有字符串类型需提前进行编码)
  • label:训练数据的标签(注意Dmatrix要求数据类型只能是int、float、bool之一,所以数据中如果有字符串类型需提前进行编码)
  • weight:样本的权重
  • base_margin:样本偏置,是一个N*1的数组,N为样本数
  • missing:float型,输入数据中如果有缺失值则以该值替代,默认为np.nan
  • silent:在计算过程中是否要输出信息,True表示不输出,默认为False
  • feature_names:特征名称
  • feature_types:特征类型
  • nthread:加载数据时的线程数,-1代表使用所有可用线程

类方法有以下几个(还有一些不常用的参考文末官方文档):

  • feature_names():获取特征名
  • feature_types():获取特征类型
  • get_base_margin():获取样本的偏置
  • get_label():获取标签
  • get_weight():获取权重
  • num_col():获取特征数
  • num_row():获取样本数
  • save_binary(fname, silent=True):储存Dmatrix,fname为存储路径,silent控制是否输出信息;储存的数据可以通过xbgoost.Dmatrix(fname)取出

设置参数

一般参数
  • booster:弱评估器,可以是gbtree,gblinear,dart,默认是gbtree
  • disable_default_eval_metric:是否禁用默认的(验证集的)评估指标,注意如果你要用自定义的评估指标,需要将这一项设为True
  • nthread:训练模型时用的并行线程数
  • verbosity:控制训练过程中输出信息的多少,取值为0, 1, 2, 3,默认为1
  • validate_parameters:是否检查参数
弱评估器参数

基于树的弱评估器(gbtree, dart)的参数主要有以下几个:

  • eta:学习率,默认为0.3
  • gamma:叶节点继续分裂所需的最小损失函数下降值,默认为0,即不断增加树的深度直到损失函数不再下降
  • max_depth:树的最大深度,默认为6
  • min_child_weight:叶节点继续分裂所需的最小样本权重, 默认为1
  • subsample:训练样本的采样率,默认为1,即每次都用所有样本做提升
  • sampling_method:样本采样方法,默认为均匀采样
  • colsample_bytree, colsample_bylevel, colsample_bynode:特征采样率,colsample_bytree决定构建每一棵树的时候的采样率,colsample_bylevel决定树的深度每增加一层时的采样率,colsample_bynode决定每次叶节点分裂时的采样率,这三个参数默认都为1;在训练模型时三个参数的作用是累积的,例如数据共128个特征,colsample_bytree=colsample_bylevel=colsample_bynode=0.5,那么每个叶节点分裂时用到的特征数就是16
  • lambda:L2正则化系数,默认为1
  • alpha:L1正则化系数,默认为0
  • tree_method:构建树采用的算法,可选值有:auto, exact, approx, hist, gpu_hist,默认为auto

如果你选的弱评估器为dart,注意它在训练时会采用dropout方法,即随机丢掉一部分树以防止过拟合,因而此时会有如下额外的参数:

  • sample_type:树模型的采样算法,默认均匀采样
  • normalize_type:树的权重的归一化算法,具体公式见文末官方文档
  • rate_drop:删除率,默认是0
  • one_drop:开启这个功能将保证每次dropout至少会删除一棵树,默认为0(关闭)
  • skip_drop:在一次迭代中不做dropout的概率,该参数优先于rate_dropone_drop,默认为0

线性弱评估器(gblinear)的参数如下:

  • lambda:L2正则化系数,默认为0
  • alpha:L1正则化系数,默认为0
  • updater:拟合线性模型的算法,默认为shotgun算法
  • feature_selector:特征选择方法,默认依次选择特征(cyclic)
任务参数
  • objective:学习目标,默认为reg:squarederror,即以平方损失为损失函数的回归模型;除此之外还有:
    参数对应的学习目标
    reg:squaredlogerror以均方对数损失为损失函数的回归模型
    reg:logistic逻辑回归模型
    binary:logistic二分类逻辑回归模型(输出为概率,即Sigmoid函数值)
    binary:logitraw二分类逻辑回归模型(输出为 w T x w^Tx wTx,即Sigmoid函数的参数)
    binary:hinge使用合页损失函数(hinge loss)的二分类模型(输出为0或1)
    multi:softmax使用softmax作为目标函数的多分类模型
  • base_score:所有样本的初始偏置值,默认0.5
  • eval_metric:验证数据集的评估指标,分类问题默认为对数损失函数,回归问题默认为均方根损失函数
  • seed:随机数种子

训练模型

原生Xgboost库既可以用来处理分类问题,也可以用来处理回归问题,实现方法都是调用train()函数;该函数参数如下:

  • params:上一步定义的参数列表
  • dtrain:第一步读取的训练数据
  • num_boost_round:迭代次数
  • evals:验证数据集,该参数必须是由(Dmatrix, string)构成的列表,第二个string参数是用于输出的,可以任意设置
  • obj:自定义目标函数
  • feval:自定义评估函数;该参数起作用需要evals非空,并且将一般参数中的disable_default_eval_metric设为True
  • maximize:是否要最大化feval
  • early_stopping_rounds:控制训练速度;如果在验证数据集上迭代early_stopping_rounds次后损失函数没有下降就停止训练;要求evals参数不能为空
  • verbose_eval:控制评估模型过程中的输出数量,bool类型或int类型,默认为True,即每个提升阶段都输出相应信息;要求evals参数非空
  • xgb_model:加载模型(传入文件路径)
  • callbacks:回调函数(列表),在每轮迭代结束后调用

预测结果

上一步train()函数返回的是一个Booster类,我们可以调用这个类的predict()方法进行预测,该函数常用的两个参数如下:

  • data:测试集数据
  • ntree_limit:预测时使用的树的数量,默认为0(使用所有树)

示例代码

示例1
from sklearn.datasets import load_boston, load_iris
from sklearn.metrics import mean_squared_error, accuracy_score
from sklearn.model_selection import train_test_split
import xgboost as xgb

## 使用原生xgboost解决回归问题
# 读取数据
boston_data = load_boston()
X = boston_data.data
y = boston_data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 设置参数
params = {
    'eta': 0.1,
    'reg_alpha': 0.01,
    'reg_lambda': 0.01,
    'max_depth': 10
}

# 训练模型
bst = xgb.train(
    params=params,
    dtrain=dtrain,
    num_boost_round=20
)

# 预测结果
ypred = bst.predict(dtest)
print('MSE of prediction on boston dataset:', mean_squared_error(y_test, ypred))
print('\n')

## 使用原生xgboost解决分类问题
# 读取数据
iris_data = load_iris()
X = iris_data.data
y = iris_data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 设置参数
params = {
    'objective': 'multi:softmax',
    'num_class': 3,
    'eta': 0.1,
    'reg_alpha': 0.01,
    'reg_lambda': 0.01,
    'max_depth': 8
}

# 训练模型
bst = xgb.train(
    params=params,
    dtrain=dtrain,
    num_boost_round=20,
    evals=[(dtrain, 'train'), (dtest, 'test')] # 将训练数据和测试数据都作为验证集,可以实时监督训练情况,是否过拟合
)

# 预测结果
result = bst.predict(
    dtest,
    ntree_limit=10
)
print('Accuracy of prediction on iris dataset:', accuracy_score(y_test, result))

输出:
在这里插入图片描述

注意objective参数如果不设置的话其实不会影响学习效果,因为该模型会根据数据判断当前问题是分类问题还是回归问题,如下所示:

iris_data = load_iris()
X = iris_data.data
y = iris_data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 设置参数
params = {
    # 'objective': 'multi:softmax',
    'num_class': 3,
    'eta': 0.1,
    'reg_alpha': 0.01,
    'reg_lambda': 0.01,
    'max_depth': 8
}

# 训练模型
bst = xgb.train(
    params=params,
    dtrain=dtrain,
    num_boost_round=20,
    evals=[(dtrain, 'train'), (dtest, 'test')]
)

# 预测结果
result = bst.predict(
    dtest,
    ntree_limit=10
)
print('Accuracy of prediction on iris dataset(objective unspecified):', accuracy_score(y_test, result))

输出:
在这里插入图片描述
与第一段代码运行结果对比可以发现是一样的

示例2
from sklearn.datasets import load_wine
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import xgboost as xgb
import matplotlib.pyplot as plt

# 读取数据
wine_data = load_wine()
X = wine_data.data
y = wine_data.target
features = wine_data.feature_names
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 设置参数
params = {
    'num_class': 3,
    'eta': 0.1,
    'reg_alpha': 0.01,
    'reg_lambda': 0.01,
    'max_depth': 8
}

# 训练模型
bst = xgb.train(
    params=params,
    dtrain=dtrain,
    num_boost_round=10,
    evals=[(dtrain, 'train'), (dtest, 'dtest')]
)

feature_score = bst.get_score(importance_type='gain') # 特征得分(特征重要性)
print(feature_score)

feature_importance = {}
for tag, score in feature_score.items():
    feature_importance[features[int(tag[1:])]] = score

plt.figure(figsize=(12, 8))
plt.bar(range(len(feature_importance)), feature_importance.values())
plt.xticks(range(len(feature_importance)), feature_importance.keys(), rotation=45)
plt.ylabel('Importance')
plt.show()

# 预测结果
result = bst.predict(
    dtest,
    ntree_limit=10
)
print('Accuracy of prediction on wine dataset:', accuracy_score(y_test, result))

输出:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

基于sklearnAPI的Xgboost

xgboost包已经封装了XGBRegressor,XGBClassifier,XGBRFRegressor,XGBRFClassifier等学习器,他们的调用方法和sklearn封装的学习器调用方法一样,下面分别介绍他们的参数

xgboost.XGBRegressor

这个类用于解决回归问题

参数
  • n_estimators:提升树的数量,即训练轮数,等价于原生库的num_boost_round
  • max_depth:树的最大深度
  • learning_rate:学习率,等价于原生库的eta
  • verbosity:控制学习过程中输出信息的多少,取值为0, 1, 2, 3
  • objective:学习目标及其损失函数,默认为reg:squarederror,即以平方损失为损失函数的回归模型
  • booster:弱评估器,可以是gbtree,gblinear或dart
  • n_jobs:训练时并行的线程数
  • gamma:叶节点继续分裂所需的最小损失函数下降值
  • min_child_weight:一个叶子节点上所需要的最小样本权重
  • max_delta_step:树的权重估计中允许的单次最大增量
  • subsample:对训练样本的采样比例
  • colsample_bytree, colsample_bylevel, colsample_bynode:参考上文原生库的弱评估器参数
  • reg_alpha:L1正则化系数
  • reg_lambda:L2正则化系数
  • base_score:所有样本的偏置
  • random_state:随机数种子
  • missing:缺失值的表达形式,默认为np.nan
  • importance_type:计算特征重要性的依据,可选项有“gain”, “weight”, “cover”, “total_gain”, “total_cover”,默认为“gain”
  • tree_method:构建树采用的算法,可选值有:auto, exact, approx, hist, gpu_hist,默认为auto
属性和方法
  • apply(X, ntree_limit=0)X为测试数据,维度为[n_samples, n_features];ntree_limit预测时使用的树的数量,默认为0(使用所有树);返回维度为[n_samples, n_trees]的数组,第i行第j列表示第i个数据在第j个树中的叶节点的下标
  • evals_result():返回验证集上的评估结果
  • feature_importances_:返回特征重要性
  • fit():用给定数据训练模型,其参数如下:
    参数含义
    X训练数据集x值
    y训练数据集y值
    sample_weight样本权重
    base_margin样本偏置
    eval_set验证数据集(以 ( X , y ) (X, y) (X,y)组成的列表)
    eval_metric评估指标
    early_stopping_rounds见上文原生库参数
    verbose控制训练过程中输出信息的多少
    xgb_model要预加载的模型(字符串类型,即文件路径)
    sample_weight_eval_set验证集样本权重
    callbacks回调函数
  • get_booster():返回模型的弱评估器(只能在fit()之后调用)
  • get_params():返回模型参数
  • predict():预测,参数如下:
    参数含义
    data测试集
    ntree_limit预测时使用的树的数量
    validate_features默认为True,将会检查测试数据和弱评估器的特征是否一致
    output_margin是否返回原始分数(对分类问题原始分数就是 w T x w^Tx wTx,对回归问题原始分数与预测结果一样),默认为False
  • save_model(fname):保存模型,fname为字符串类型,表示文件路径
  • load_model(fname):加载模型,fname为字符串类型,表示文件路径

xgboost.XGBClassifier

这个类用于解决分类问题,相比xgboost.XGBRegressor多了一个use_label_encoder参数,表示是否用sklearn的LabelEncoder对类别做编码,默认为True,但官方文档建议将其设为False;另外这个类的objective默认为binary:logistic,除此之外其他参数、属性和方法与xgboost.XGBRegressor相同

xgboost.XGBRFRegressor

这个类也是用于解决回归问题,不过在xgboost的基础上用随机森林算法做了集成,该类的学习率默认为1,subsample默认为0.8,colsample_bynode默认为0.8,reg_lambda默认为0.00001,除此之外其他参数、属性和方法与xgboost.XGBRegressor相同

xgboost.XGBRFClassifier

xgboost.XGBRFRegressor类似,该模型在xgboost的基础上用随机森林算法做了集成,它也有use_label_encoder参数,默认为True,官方文档建议将其设为False;该类的学习率默认为1,subsample默认为0.8,colsample_bynode默认为0.8,reg_lambda默认为0.00001,除此之外其他参数、属性和方法与xgboost.XGBRegressor相同

示例代码

from sklearn.datasets import load_boston, load_iris
from sklearn.metrics import mean_squared_error, accuracy_score
from sklearn.model_selection import train_test_split
from xgboost import XGBRegressor, XGBClassifier

# 使用skleanAPI xgboost解决回归问题
boston_data = load_boston()
X = boston_data.data
y = boston_data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

reg = XGBRegressor(
    n_estimators=20,
    learning_rate=0.1,
    max_depth=5)

reg.fit(X_train, y_train)
ypred = reg.predict(X_test)

print('MSE of prediction on boston dataset:', mean_squared_error(y_test, ypred))
print('\n')

# 使用sklearnAPI xgboost解决分类问题
iris_data = load_iris()
X = iris_data.data
y = iris_data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

xgbc = XGBClassifier(
    learning_rate=0.1,
    n_estimators=20,
    seed=27,
    verbosity=1
)

xgbc.fit(X_train, y_train)
result = xgbc.predict(X_test)

print('Accuracy of prediction on iris dataset:', accuracy_score(y_test, result))

输出:
在这里插入图片描述

Plotting API

xgboost包除了以上功能强大的学习器外还封装了几个非常好用的绘图函数

xgboost.plot_importance

参数
  • booster:弱评估器或xgboost模型实例
  • ax:matplotlib的Axes对象,默认为None,此时将创建一个新的图
  • grid:是否加上网格,默认为True
  • importance_type:特征重要性的计算方法,默认为"weight",即特征在树中出现的次数;其余可选项为“gain”和“cover”
  • max_num_features:图中显示的最大特征数,如果是None则显示所有特征(默认)
  • height:条形图的高度,默认0.2
  • xlim:元组类型,表示x的取值范围,默认为None
  • ylim:元组类型,表示x的取值范围,默认为None
  • title:图的名称,默认为"Feature importance"
  • xlabel:x轴名称,默认为"F score"
  • ylabel:y轴名称,默认为"Features"
  • show_values:是否在图中显示具体数值,默认为True

xgboost.plot_tree

参数
  • booster:弱评估器或xgboost模型实例
  • fmap:特征图的文件路径
  • num_trees:指定要画第几棵树,默认为0(第一棵)
  • ax:matplotlib的Axes对象,默认为None,此时将创建一个新的图

xgboost.to_graphviz

参数
  • booster:弱评估器或xgboost模型实例
  • fmap:特征图的文件路径
  • num_trees:指定要画第几棵树,默认为0(第一棵)
  • yes_color:满足节点条件的边的颜色,默认为’#0000FF’
  • no_color:不满足节点条件的边的颜色,默认为’#FF0000’
  • condition_node_params:非叶节点的参数,字典类型
  • leaf_node_params:叶节点的参数,字典类型

示例代码

from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import xgboost as xgb
import matplotlib.pyplot as plt

cancer_data = load_breast_cancer()
X = cancer_data.data
y = cancer_data.target
features = cancer_data.feature_names
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23)

xgbc = xgb.XGBRegressor(
    learning_rate=0.1,
    n_estimators=20,
    seed=27,
    verbosity=1
)

xgbc.fit(
    X_train, 
    y_train, 
    eval_set=[(X_train, y_train), (X_test, y_test)]
)

fea_imp = xgbc.feature_importances_
print(fea_imp)

输出:
在这里插入图片描述
接上文代码

# 由于并不是所有特征都能用上,所以这里统计一下用到的特征
used_features = []

for ind in range(len(features)):
    if fea_imp[ind]:
        used_features.append(features[ind])

fig = plt.figure(figsize=(10, 8))
ax = fig.add_axes([0,0,1,1])
xgb.plot_importance(xgbc, ax)
ax.set_yticklabels(used_features)

输出:
在这里插入图片描述
接上文代码

node_params = {
    'shape': 'box',
    'style': 'filled,rounded',
    'fillcolor': '#78bceb'
}

xgb.to_graphviz(xgbc, condition_node_params = node_params)

输出:
在这里插入图片描述
接上文代码

result = xgbc.predict(
    X_test,
    ntree_limit=10
)

# 预测结果是概率值,为了用accuracy_score计算准确率需要转换为类别
result = list(map(lambda x: 1 if x>0.5 else 0, result))
print('Accuracy of prediction on cancer dataset:', accuracy_score(y_test, result))

输出:
在这里插入图片描述

参考:官方文档

<think>好的,用户现在想了解XGBoost的超参数调优。之前他们问过关于R语言多线程和GPU加速的问题,可能是在进行机器学习模型训练时遇到了性能问题,现在想要优化模型效果。我需要先回顾XGBoost的基本概念和常用参数,然后分步骤解释调优方法。 首先,用户可能对XGBoost已经有基本了解,但需要指导如何调整参数来提升模型性能。我应该从参数分类开始,比如通用参数、Booster参数和学习目标参数,这样结构更清晰。接下来,可能需要介绍调优的方法,比如网格搜索、随机搜索和贝叶斯优化,特别是R中的具体实现,比如mlr3或tidymodels。 用户可能更关注实际应用,所以示例代码很重要。需要确保代码正确,并且用R语言展示,比如使用mlr3和paradox进行网格搜索。同时,用户可能对自动化工具感兴趣,比如AutoML,但也要提醒他们注意过拟合和计算资源的问题。 还要考虑用户可能的误区,比如盲目调参,应该先确保数据预处理正确,特征工程有效。另外,调参的顺序也很重要,比如先调整学习率,再树的结构参数,最后正则化参数。需要强调交叉验证的必要性,以及早停法的作用,防止过拟合。 最后,检查是否需要补充注意事项,比如计算资源、早停法使用,以及特征工程的重要性。可能用户需要实际案例,但如果没有具体场景,保持一般性的建议即可。确保回答结构清晰,步骤明确,帮助用户逐步进行调优。</think>好的!XGBoost(eXtreme Gradient Boosting)的超参数调优是提升模型性能的关键步骤。以下是系统化的调优方法及关键参数解析: --- ### **一、XGBoost核心超参数分类** #### **1. 通用参数** - `nthread`:并行线程数(需与硬件匹配) - `booster`:基模型类型(`gbtree`/`gblinear`/`dart`,默认`gbtree`) #### **2. Booster参数(树模型)** - **树结构**: - `max_depth`:单棵树最大深度(控制过拟合,常用3-8) - `min_child_weight`:子节点最小样本权重和(防止过拟合) - `gamma`(`min_split_loss`):分裂所需最小损失减少量 - **随机性**: - `subsample`:样本采样比例(0.6-1.0) - `colsample_bytree`:特征采样比例(0.6-1.0) - **正则化**: - `lambda`:L2正则化系数(默认1) - `alpha`:L1正则化系数(默认0) #### **3. 学习目标参数** - `eta`(`learning_rate`):学习率(常用0.01-0.3) - `n_estimators`(`num_round`):树的数量(与`eta`反向调节) - `objective`:损失函数(如`binary:logistic`、`reg:squarederror`) - `eval_metric`:评估指标(如`rmse`、`logloss`、`auc`) --- ### **二、调优方法** #### **1. 网格搜索(Grid Search)** - **适用场景**:参数组合少时精确搜索 - **R实现示例**(使用`mlr3`和`paradox`): ```r library(mlr3) library(mlr3learners) library(paradox) # 定义参数空间 params <- ps( max_depth = p_int(3, 8), eta = p_dbl(0.01, 0.3), subsample = p_dbl(0.6, 1) ) # 创建任务和学习器 task <- as_task_regr(iris, target = "Sepal.Length") learner <- lrn("regr.xgboost") # 网格搜索 instance <- tune( method = tnr("grid_search", resolution = 10), task = task, learner = learner, resampling = rsmp("cv", folds = 5), measure = msr("regr.rmse"), param_set = params ) # 获取最优参数 instance$result ``` #### **2. 随机搜索(Random Search)** - **优势**:高维参数空间更高效 - **R实现**(使用`tidymodels`): ```r library(tidymodels) library(xgboost) # 定义模型 xgb_spec <- boost_tree( tree_depth = tune(), learn_rate = tune(), loss_reduction = tune() ) %>% set_engine("xgboost") %>% set_mode("regression") # 参数范围 params <- parameters( tree_depth(range = c(3, 8)), learn_rate(range = c(-2, -1)), # 10^[-2, -1] loss_reduction(range = c(0, 0.3)) ) # 随机搜索 xgb_rs <- tune_grid( xgb_spec, preprocessor = recipe(Sepal.Length ~ ., iris), resamples = vfold_cv(iris, v = 5), grid = 20, # 随机生成20组参数 metrics = metric_set(rmse) ) show_best(xgb_rs, "rmse") ``` #### **3. 贝叶斯优化(Bayesian Optimization)** - **工具**:`mlr3mbo`或`ParBayesianOptimization` - **优势**:智能探索参数空间,减少计算量 --- ### **三、调优策略** #### **1. 优先级排序** ```mermaid graph LR A[学习率 eta] --> B[树数量 n_estimators] B --> C[树深度 max_depth] C --> D[样本/特征采样 subsample/colsample] D --> E[正则化 lambda/alpha] ``` #### **2. 经验法则** - **学习率与树数量**: $$ \text{低eta} \rightarrow \text{高n_estimators} \quad (\text{如} \ eta=0.01, \ n\_estimators=5000) $$ 使用`early_stopping_rounds`自动控制迭代次数 - **树深度**: 从`max_depth=3`开始逐步增加,观察验证集性能 - **正则化**: 若模型过拟合,优先增大`lambda`和`alpha` #### **3. 早停法(Early Stopping)** ```r # 在xgb.train中设置 watchlist <- list(train = dtrain, test = dtest) model <- xgb.train( params = list(eta = 0.1), data = dtrain, nrounds = 1000, watchlist = watchlist, early_stopping_rounds = 20 # 连续20轮无提升则停止 ) ``` --- ### **四、自动化工具** #### **1. AutoML框架** - `h2o.automl()`:自动完成超参数优化 - `autoxgb()`:专用于XGBoost的自动化调参 #### **2. 可视化工具** - **参数重要性分析**: ```r xgb.importance(model = model) %>% xgb.plot.importance() ``` - **学习曲线诊断**: ```r model$evaluation_log %>% ggplot(aes(iter, train_rmse)) + geom_line(color="blue") + geom_line(aes(y = test_rmse), color="red") ``` --- ### **五、注意事项** 1. **数据预处理**: 确保类别变量已编码,缺失值处理正确 2. **计算资源**: 调参时启用并行(如`nthread=8`) 3. **过拟合验证**: 始终使用交叉验证,避免依赖单一训练集结果 4. **参数交互**: `subsample`与`eta`可能存在协同效应,需组合调整 如果需要针对具体数据集(如分类/回归问题)的调优示例,可以补充说明任务类型!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值