XGBoost_学习记录

原理

xgboost的原理没你想像的那么难 - 简书 (jianshu.com)

使用

以波士顿房价预测为例的大致模板:

#下载数据集
boston = load_boston()

#修正数据集
data = pd.DataFrame(boston.data)
data.columns = boston.feature_names
data['PRICE'] = boston.target

#构建训练集与测试集
X, y = data.iloc[:, :-1], data.iloc[:, -1]
data_dmatrix = xgb.DMatrix(data = X, label = y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 123)

#建模并训练模型
xg_reg = xgb.XGBRegressor(objective ='reg:linear', colsample_bytree = 0.3, learning_rate = 0.1,
                max_depth = 5, alpha = 10, n_estimators = 10)
xg_reg.fit(X_train, y_train)

#对测试集进行预测
preds = xg_reg.predict(X_test)

#进行性能评估
rmse = np.sqrt(mean_squared_error(y_test, preds))

XGboost Python 教程:带有代码示例的 Sklearn 回归分类器 - DataCamp

参数

model = xgb.XGBClassifier()    #参数在此进行指定
model.fit(X_train, y_train)

参考:XGBoost 重要参数(调参使用) - Timcode - 博客园 (cnblogs.com)

XGBoost的参数一共分为三类:

1. 通用参数:宏观函数控制

2. Booster参数:调控模型的效果和计算代价。调参很大程度上都是在调整booster参数

3. 学习目标参数:控制训练目标的表现。对于问题的划分主要体现在学习目标参数上。比如要做分类还是回归,做二分类还是多分类,这些都是目标参数所提供的

官方文档:

XG​​​​​​Boost Parameters — xgboost 2.0.0-dev documentation

过拟合与欠拟合:

欠拟合:模型由于学习能力不足,无法学习到数据集中的一般规律,导致泛化能力弱

过拟合:模型学习能力太强,以至于将训练集单个样本的特点作为一般规律,泛化能力下降

区别:

1. 欠拟合在训练集和测试集上的性能都较差,而过拟合往往在训练集上的性能较好,在测试集上的性能较差

2. 欠拟合主要表现为输出结果的高偏差,过拟合主要表现为输出结果的高方差

通用参数

1. booster

指定弱学习器的类型,默认值为 ‘gbtree’,表示使用基于树的模型进行计算

Booster参数

1. n_estimators

代表弱学习器(树)的个数。n_estimators太小,容易欠拟合,n_estimators太大,模型会过于复杂。一般需要调参选择一个适中的数值

2. learning_rate [default = 0.3]

learning_rate控制每个弱学习器的权重缩减系数,较小的learning_rate意味着需要更多的弱学习器。所以n_estimators和learning_rate往往要一起调参才有效果

3. max_depth [default = 6]

树的最大深度。max_depth越大,模型越复杂,越容易过拟合

4. subsample [default = 1]

每棵树所使用的样本占总样本的比例。选择小于1的比例可以减少方差,即防止过拟合,但会增加样本拟合偏差,因此取值不能太低

5. colsample_bytree [default = 1]

代表整棵树的特征采样比例。默认值为1,即不做采样,使用所有的特征建树

6. gamma [default = 0] 

指定节点分裂所需的最小损失函数下降值。值越大,模型越保守

7. reg_alpha [default = 0]

叶节点权重的L1正则化项。在很高维度的情况下,可以使得算法的速度更快

8. reg_lambda [default = 0]

叶节点权重的L2正则化项,用来控制XGBoost的正则化部分,有助于减少过拟合

学习目标参数

1. objective [default = 'reg:linear' ]

指定要使用的损失函数(详见官方文档)

2. eval_metric

指定评估指标(详见官方文档)

调参 

参考:

XGBoost调参指南 - 简书 (jianshu.com)​​​​​​​​​​​​

XGBoost 参数调优(python) — 问道 (wuhuhu800.github.io)

大致步骤总结:

1. 先选择一个较大的n_estimators,其余参数可以先使用较常用的值或默认值。然后使用XGBoost自带的cv方法中的early_stop_rounds找到最佳n_estimators

2. 在第一步的基础上调参max_depth和min_child_weight

3. 调节gamma。调完之后,在这些参数的基础上可以再次执行第一步,重新确定最佳的的n_estimators

4. 调节subsample和colsample_bytree

5. 调节正规化参数

6. 重复上面的步骤继续微调

你可能感兴趣的:(python,机器学习)