精品课程网站建设摘要,wordpress发布文章空白,石家庄网站建设网站,做餐饮网站的目的与意义XGboost#xff08;extreme gradient boosting#xff09;:高效实现了GBDT算法并进行了算法和工程上的许多改进。
XGboost的思路#xff1a;
目标#xff1a;建立k个回归树#xff0c;使得树群的预测尽量接近真实值#xff08;准确率#xff09;而且有尽量大的泛化能力…
XGboostextreme gradient boosting:高效实现了GBDT算法并进行了算法和工程上的许多改进。
XGboost的思路
目标建立k个回归树使得树群的预测尽量接近真实值准确率而且有尽量大的泛化能力。
目标函数
i表示第i个样本表示第i个样本的预测误差误差越小越好表示树的复杂度的函数越小复杂度越低泛化能力越强 T叶子的个数
w的L2模平方
目标要求预测尽量小叶子节点尽量少节点数值尽量不极端回归树的参数1选取哪个特征分裂节点2节点的预测值。间接解决这两个参数的方法贪心策略最优化二次最优化
1选取哪个特征分裂节点最简单的是枚举选择loss function效果最好的那个
2确立节点的w以及最小的loss function采用二次函数的求最值
步骤选择一个feature分裂计算loss function最小值然后再选一个feature分列又得到一个loss function最小值枚举完成后找一个效果最好的把树分裂在分裂的时候每次节点分裂loss function被影响的只有这个节点的样本因而每次分裂计算分裂的增益只需要关注打算分裂的那个节点的样本。接下来继续分裂按照上述方法形成一棵树再形成一棵树每次在上一次的预测基础上取最优进一步分裂/建树。
停止条件
①当引入的分裂带来的增益小于一个阈值的时候可以剪掉这个分裂所以并不是每一次分裂lossfunction整体都会增加的有点预剪枝的意思阈值参数为正则项里叶子节点数T的系数。
②当数达到最大深度时则停止建立决策树设置一个超参数max_depth树太深很容易出现过拟合。
③当样本权重和小于设定阈值时则停止建树一个叶子节点样本太少时终止避免过拟合。 constant常数对于XGboost利用泰勒展开三项做一个近似表示其中一颗回归树。
XGBoost与GBDT有什么不同
1、GBDT是机器学习算法XGboost是该算法的工程实现
2、在使用CART作为及分类器时XGboost显式地加入了正则项来控制模型的复杂度有利于防止过拟合从而提高模型的泛化能力
3、GBDT在模型训练时只是用来代价函数的一阶导数信息XGboost对代价函数进行二阶泰勒展开可以同时使用一阶和二阶导数
4、传统的GBDT采用CART作为基分类器XGboost支持多种类型的基分类器比如线性分类器
5、传统的GBDT在每轮迭代时使用全部的数据XGboost则采用了与随机森林相似的策略支持对数据进行采样
6、传统的GBDT没有设计对缺失值的处理而XGboost能够自动学习出缺失值的处理策略。
使用xgboost库中的XGBRegressor类来创建XGboost模型
import xgboost as xgb
xgb_clfxgb.XGBRegressor(max_depth8,learning_rate0.1,objectivereg:linear,eval_metricrmse, n_estimators3115,colsample_bytree0.6, reg_alpha3, reg_lambda2, gamma0.6,subsample0.7, silent1, n_jobs-1)
XGBRegressor中的参数介绍
max_depth树的最大深度增加这个值可以使模型更加复杂并提高队训练数据的拟合程度但可能会导致过拟合。通常需要通过交叉验证来调整这个参数。
learning_rate学习率用于控制每次迭代更新权重时的步长。
objective定义了学习任务和相应的损失函数“reg:linear” 表示我们正在解决一个线性回归问题。
eval_metric评估指标用于在训练过程中对模型的表现进行评估‘rmse’ 表示均方根误差Root Mean Squared Error它是回归问题中常用的性能指标。
n_estimators森林中树的数量值越大模型越复杂训练时间也会相应增加。通常需要通过交叉验证来调整这个参数。
colsample_bytree构建每棵树时对特征进行采样的比例。较小的值可以减少过拟合提高模型的泛化能力。
reg_alphaL1正则化项的权重增加这个值同样也可以增加模型的正则化强度。
gamma树的叶子节点进一步分裂所需的最小损失减少量。较大值会导致模型更保守可能会导致模型的过拟合。
subsample用于训练每棵树的样本占整个训练集的比例。
silent设置为1可以关闭在运行时的日志信息。
n_jobs并行运行的作业数。 基本模型
import pandas as pd
import xgboost as xgb
import pandas
import numpy as np# 将pandas数据框加载到DMatrix
data_train pandas.DataFrame(np.arange(12).reshape((4,3)), columns[a, b, c])
label_train pandas.DataFrame(np.random.randint(2, size4))
dtrain xgb.DMatrix(data_train, labellabel_train, missingnp.NaN) # 缺失值可以用构造函数中的默认值替换DMatrixdata_test pandas.DataFrame(np.arange(12, 24).reshape((4,3)), columns[a, b, c])
label_test pandas.DataFrame(np.random.randint(2, size4))
dtest xgb.DMatrix(data_test, labellabel_test, missingnp.NaN) # 缺失值可以用构造函数中的默认值替换DMatrix# # 将CSV文件加载到DMatrix
# # label_column specifies the index of the column containing the true label
# dtrain xgb.DMatrix(train.csv?formatcsvlabel_column0)
# dtest xgb.DMatrix(test.csv?formatcsvlabel_column0)
# # XGBoost 中的解析器功能有限。当使用Python接口时建议使用pandasread_csv或其他类似的实用程序而不是XGBoost的内置解析器。param {max_depth: 2, eta: 1, objective: binary:logistic}
param[nthread] 4
param[eval_metric] [auc, ams0] # 指定多个评估指标
# 指定验证集以观察性能
evallist [(dtrain, train), (dtest, eval)]# 训练
num_round 20
bst xgb.train(param, dtrain, num_round, evallist, early_stopping_rounds10) # 返回最后一次迭代的模型而不是最好的模型
# early_stopping_rounds10作用如果模型在10轮内没有改善则训练将提前停止如果设置多个指标则最后一个指标将用于提前停止
# 训练完成后保存模型
bst.save_model(test_xgboost/0001.model)
# 模型转储到文本文件中
bst.dump_model(test_xgboost/dump.raw.txt)
# 加载模型
bst xgb.Booster({nthread: 4}) # 初始化模型将线程数设置为4
bst.load_model(test_xgboost/0001.model) # 加载模型
# 如果训练期间启动提前停止可以从最佳迭代中获得预测
ypred bst.predict(dtest, iteration_range(0, bst.best_iteration 1))
ypred pd.DataFrame(ypred)
ypred.to_csv(test_xgboost/xgb_predict.csv, indexFalse) 使用scikit-learn的方法
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_splitimport xgboost as xgbX, y load_breast_cancer(return_X_yTrue) # 加载数据
X_train, X_test, y_train, y_test train_test_split(X, y, stratifyy, random_state94)
# stratifyy按目标变量分层划分确保训练集和测试集中目标变量的比例与原始数据集相同
# random_state94: 设置随机种子保证每次划分的结果相同# 使用hist来构建树并启用早期停止
early_stop xgb.callback.EarlyStopping(rounds2, metric_namelogloss, data_namevalidation_0, save_bestTrue
)
clf xgb.XGBClassifier(tree_methodhist, callbacks[early_stop])
clf.fit(X_train, y_train, eval_set[(X_test, y_test)])
# 保存模型
clf.save_model(test_xgboost/clf.json)
https://xgboost.readthedocs.io/en/latest/python/index.html