赞
踩
这些参数适用于 XGBoost 的核心算法,不特定于某个特定的弱学习器(如决策树)。
这些参数与特定的学习任务相关,如正则化、采样等。
描述: 返回一个一维 NumPy 数组,包含对 data 中每个样本的预测值。数组长度与 data 的行数相同。
kfold = KFold(n_splits=5, random_state=42, shuffle=True)
mse = 0
for fold, (train_index, val_index) in enumerate(kfold.split(x, y)):
logging.info(f'############ fold: {fold} ###########')
x_train, x_val, y_train, y_val = x.iloc[train_index], x.iloc[val_index], y.iloc[train_index], y.iloc[val_index]
trainset = Dataset(x_train, y_train)
valset = Dataset(x_val, y_val)
model = lgb.train(params_lgb, trainset, valid_sets=[trainset, valset], categorical_feature=["分"], callbacks=[lgb.log_evaluation(1000)])
model.save_model("../models/lgb_%d.txt" % fold)
model_lgb.append(model)
lgb_pred = Series(model.predict(x_val, num_iteration=model.best_iteration), index=y_val.index).fillna(0)
trainset = DMatrix(x_train, y_train, enable_categorical=True, nthread=-1)
valset = DMatrix(x_val, y_val, enable_categorical=True, nthread=-1)
model = xgb.train(params_xgb, trainset, evals=[(trainset, 'train'),(valset, 'eval')], num_boost_round=params_xgb["num_boost_round"], early_stopping_rounds=params_xgb["early_stopping_rounds"], verbose_eval=1000)
model.save_model("../models/xgb_%d.json" % fold)
model_xgb.append(model)
xgb_pred = Series(model.predict(valset, iteration_range=(0, model.best_ntree_limit)), index=y_val.index).fillna(0)
val_pred = (lgb_pred + xgb_pred) / 2
mse += mean_squared_error(y_val.fillna(0), val_pred)
rmse = np.sqrt(mse / kfold.n_splits)
score = 1 / (1 + rmse)
logging.info(f"--------------本地分数 {score}--------------")
在使用 XGBoost 原生接口时,首先要将数据转换为 xgboost.DMatrix 对象,它是 XGBoost 库专门设计的数据结构,能够高效地存储和处理大量数据,特别是对于稀疏矩阵。
DMatrix 支持多种构造参数,如:
objective
类型: str
描述: 指定目标函数,决定了模型优化的目标。对于回归任务,常见的选项有 ‘reg:squarederror’(均方误差)、‘reg:linear’(线性回归)、‘reg:logistic’(逻辑回归,常用于二分类问题)等。
booster
类型: str
描述: 指定使用的弱学习器类型。对于回归问题,通常选择 ‘gbtree’(基于树的提升),另一个选项是 ‘gblinear’(基于线性模型的提升)。
verbosity
类型: int
描述: 控制日志输出的详细程度。值越大,输出的信息越多。通常设为 0 或 1。
n_estimators / num_boost_round
类型: int
描述: 指定要构建的提升树(弱学习器)数量。增加该值通常可以提高模型的拟合能力,但可能会增加训练时间和过拟合风险。
eta / learning_rate
类型: float
描述: 学习率或步长,控制每一步迭代中单个新树对最终模型影响的大小。较小的值可以减缓学习速度,有助于防止过拟合,但可能需要更多的迭代次数;较大的值可以加速收敛,但可能导致模型不稳定。
gamma
类型: float
描述: 分裂节点所需的最小损失减少量。较高的值会限制树的复杂度,防止过拟合。
max_depth
类型: int
描述: 决策树的最大深度。限制树的生长高度,防止过拟合。值越大,模型可能更复杂,容易过拟合;值越小,模型可能欠拟合。
min_child_weight
类型: float
描述: 子节点所包含样本权重的最小和。较大值有助于防止模型学习到噪声或过于复杂的模式,避免过拟合。
subsample / colsample_bytree
类型: float (0, 1]
描述: 分别控制训练样本和特征的子采样比例。小于 1
的值可以引入随机性,有助于减少过拟合,类似于随机森林中的子采样。
lambda / reg_lambda / alpha / reg_alpha
类型: float
描述: L1 (reg_alpha) 和 L2 (reg_lambda) 正则化项的权重。非零值有助于简化模型,防止过拟合。
n_jobs / nthread
类型: int
描述: 并行计算时使用的 CPU 核数。设置为 -1 则使用所有可用核。增大此值可以加快训练速度。
max_delta_step
类型: float
描述: 控制每棵树的权重更新幅度。对于某些数据集(如不平衡数据),有助于稳定模型训练。
tree_method
类型: str
描述: 指定树构建算法。常见选项包括 ‘auto’(自动选择)、‘exact’(精确贪心)、‘approx’(近似贪心)、‘hist’(基于直方图的构建)等。
grow_policy
类型: str
描述: 决策树增长策略。 ‘depthwise’(深度优先)或 ‘lossguide’(损失导向)。
monotone_constraints
类型: str 或 list
描述: 对特征施加单调性约束。例如,要求某个特征与目标变量的关系为单调递增或递减。
scale_pos_weight
类型: float
描述: 仅对二分类任务有效,用于平衡正负类样本的权重。对于类别不平衡数据集,可以调整该参数来提高少数类样本的重要性。
base_score
类型: float
描述: 初始预测分数(基线分数)。仅在使用非零基线时有意义。
eval_metric
类型: str, callable, list/tuple of str or list/tuple of callable
描述: 指定评估模型性能的度量标准。内置指标包括 ‘rmse’、‘mae’、‘auc’、‘logloss’ 等。也可以自定义评估函数。
random_state / seed
类型: int, RandomState instance, or None
描述: 随机数生成器种子或实例,用于确定随机性行为,如特征和样本的子采样。设置一个固定值可以确保实验的可复现性。
missing
类型: float 或 str
描述: 缺失值标记。可以是浮点数或字符串(如 ‘nan’),用于指示数据中的缺失值。
disable_default_eval_metric
类型: bool
描述: 是否禁用目标函数默认的评估指标。设为 True 可以仅使用自定义的 eval_metric。
params (必需)
类型: dict
描述: 包含训练参数的字典。这些参数会影响模型的构建和优化过程。常见参数包括:
dtrain (必需)
类型: xgboost.DMatrix
描述: 包含训练数据和标签的 DMatrix 对象。这是 XGBoost 专为高效处理大规模数据设计的数据结构。
evals (可选)
类型: list of (xgboost.DMatrix, str) tuples
描述: 用于模型评估和早停的数据集列表。每个元素是一个元组,包含特征数据和对应的目标变量,以及一个名称标识符。
eval_names (可选)
类型: list of str
描述: 与 evals 中数据集对应的名称列表。如果提供,将用于打印评估结果的标签。如果不提供,将使用 evals 中的第二元素作为名称。
obj (可选)
类型: callable
描述: 自定义目标函数。当内置目标函数无法满足需求时,可以通过此参数提供一个自定义的目标函数。函数签名应为 func(preds, dtrain),其中 preds 是预测值,dtrain 是包含真实标签的 DMatrix。
feval (可选)
类型: callable
描述: 自定义评估函数。用于计算评估指标,特别是在内置评估指标不适用的情况下。函数签名应为 func(preds, dtrain),其中 preds 是预测值,dtrain 是包含真实标签的 DMatrix。
early_stopping_rounds (可选)
类型: int
描述: 当在 evals 中指定的评估指标在一定轮数内未提升时,提前终止训练。这对于防止过拟合和节省计算资源非常有用。例如,设置为 50 表示如果连续 50 轮后验证集上的性能没有提升,则停止训练。
verbose_eval (可选)
类型: bool 或 int
描述: 控制训练过程中输出详细信息的程度。如果为 True 或正整数,将在每个验证周期输出评估结果。当设为正整数时,表示每隔这么多轮输出一次。设为 False 则不显示任何中间输出。
callbacks (可选)
类型: list of xgboost.callback.TrainingCallback instances
描述: 用户定义的回调函数列表,这些函数将在训练过程中特定时刻被调用。可用于实现自定义的日志记录、模型保存等行为。
custom_metric (可选)
类型: callable
描述: 自定义评估指标,用于替代 feval 参数。在 XGBoost 1.6 及更高版本中,推荐使用 custom_metric 替代 feval。
描述: 返回一个一维或二维(取决于 pred_leaf 或 pred_contribs 是否启用)NumPy 数组,包含对 data 中每个样本的预测结果。数组形状和内容取决于所选参数。
booster: 已训练好的 XGBoost 模型对象。 importance_type: 特征重要性度量类型,可选 ‘weight’(基于节点分裂次数)、‘gain’(基于节点增益)、‘cover’(基于节点覆盖样本数)或 ‘total_gain’(总增益,仅限回归)。
max_num_features: 显示的最大特征数(默认为 None,即显示所有特征)。
height: 图形的高度(默认为 0…png`,即创建新的图形)。
xlabel: X 轴标签(默认为 ‘Features’)。
ylabel: Y 轴标签(默认为 ‘Importance’)。
title: 图形标题(默认为 ‘Feature Importance’)。
ax: matplotlib.axes.Axes 对象,用于绘制图形。如果不提供,将创建一个新的图形。
booster: 已训练好的 XGBoost 模型对象。
feature_names: 特征名称列表,用于标签化 X 轴。
max_bins: 每个特征的最大分箱数(默认为 30)。
ax: matplotlib.axes.Axes 对象,用于绘制图形。如果不提供,将创建一个新的图形。
booster: 已训练好的 XGBoost 模型对象。
num_trees: 要转换的树的索引(默认为 0,即第一棵树)。
rankdir: 图形的方向,同 plot_tree 函数。
hide_feature_names: 是否隐藏特征名称(默认为 False)。
precision: 浮点数表示的精度(默认为 3)。
import xgboost as xgb
import matplotlib.pyplot as plt
# 假设已有一个训练好的 XGBoost 模型:model
# 绘制第一个决策树
xgb.plot_tree(model, num_trees=0)
plt.show()
# 绘制特征重要性
xgb.plot_importance(model)
plt.show()
# 绘制特征分裂阈值直方图
# 注意:此处假设 `feature_names` 已知
xgb.plot_split_value_histogram(model, feature_names)
plt.show()
# 将第一个决策树转换为 Graphviz 格式
gviz = xgb.to_graphviz(model, num_trees=0)
# 使用 graphviz 库渲染图形(需先安装 graphviz)
from graphviz import Source
Source.from_file(gviz).view()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。