当前位置: 首页 > 面试题库 >

如何使用Scikit-Learn包装器获得XGBoost和XGBoost的预测以进行匹配?

路裕
2023-03-14
问题内容

我是Python的XGBoost的新手,所以我很抱歉,如果答案是显而易见的,但是我尝试使用panda数据框并以Python的形式获取XGBoost,以提供与使用Scikit-
Learn包装器相同时得到的相同预测行使。到目前为止,我一直无法做到这一点。举个例子,在这里我拿波士顿数据集,转换为熊猫数据框,训练该数据集的前500个观察值,然后预测最后6个。我先使用XGBoost,然后使用Scikit-
Learn包装器和即使将模型的参数设置为相同,我也会得到不同的预测。具体而言,数组预测看起来与数组预测2完全不同(请参见下面的代码)。任何帮助将非常感激!

from sklearn import datasets
import pandas as pd
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
from xgboost.sklearn import XGBRegressor

### Use the boston data as an example, train on first 500, predict last 6 
boston_data = datasets.load_boston()
df_boston = pd.DataFrame(boston_data.data,columns=boston_data.feature_names)
df_boston['target'] = pd.Series(boston_data.target)


#### Code using XGBoost
Sub_train = df_boston.head(500)
target = Sub_train["target"]
Sub_train = Sub_train.drop('target', axis=1)

Sub_predict = df_boston.tail(6)
Sub_predict = Sub_predict.drop('target', axis=1)

xgtrain = xgb.DMatrix(Sub_train.as_matrix(), label=target.tolist())
xgtest = xgb.DMatrix(Sub_predict.as_matrix())

params = {'booster': 'gblinear', 'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1, 'n_estimators': 500,    'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'reg_alpha': 1}

model = xgb.train(dtrain=xgtrain, params=params)

predictions = model.predict(xgtest)

#### Code using Sk learn Wrapper for XGBoost
model = XGBRegressor(learning_rate =.1, n_estimators=500,
max_depth=2, min_child_weight=3, gamma=0, 
subsample=.8, colsample_bytree=.7, reg_alpha=1, 
objective= 'reg:linear')

target = "target"

Sub_train = df_boston.head(500)
Sub_predict = df_boston.tail(6)
Sub_predict = Sub_predict.drop('target', axis=1)

Ex_List = ['target']

predictors = [i for i in Sub_train.columns if i not in Ex_List]

model = model.fit(Sub_train[predictors],Sub_train[target])

predictions2 = model.predict(Sub_predict)

问题答案:

请在这里看这个答案

xgboost.trainxgboost.XGBRegressor接受时将忽略参数n_estimators
。在xgboost.train中,增强迭代(即n_estimators)由num_boost_round(默认值:10)控制

建议n_estimators从提供给xgb.train它的参数中删除并替换为num_boost_round

因此,像这样更改您的参数:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}

像这样训练xgb.train:

model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)

您将获得相同的结果。

或者,保持xgb.train不变,并像这样更改XGBRegressor:

model = XGBRegressor(learning_rate =.1, n_estimators=10,
                     max_depth=2, min_child_weight=3, gamma=0, 
                     subsample=.8, colsample_bytree=.7, reg_alpha=1, 
                     objective= 'reg:linear')

然后,您也将获得相同的结果。



 类似资料:
  • 什么是 xgboost? XGBoost :eXtreme Gradient Boosting 项目地址:https://github.com/dmlc/xgboost 是由 Tianqi Chenhttp://homes.cs.washington.edu/~tqchen/最初开发的实现可扩展,便携,分布式 gradient boosting (GBDT, GBRT or GBM) 算法的一个库

  • XGBoost是"极端梯度提升"(eXtreme Gradient Boosting)的简称。XGBoost 源于梯度提升框架,但是更加高效,秘诀就在于算法能并行计算、近似建树、对稀疏数据的有效处理以及内存使用优化,这使得 XGBoost 至少比现有梯度提升实现有至少 10 倍的速度提升。 XGBoost 支持在多台机器上进行分布式训练,包括 AWS,GCE,Azure 和 Yarn 集群。可以与

  • 我们可以通过包装器将Sequential模型(仅有一个输入)作为Scikit-Learn工作流的一部分,相关的包装器定义在keras.wrappers.scikit_learn.py中 目前,有两个包装器可用: keras.wrappers.scikit_learn.KerasClassifier(build_fn=None, **sk_params)实现了sklearn的分类器接口 keras.

  • 我们可以通过包装器将Sequential模型(仅有一个输入)作为Scikit-Learn工作流的一部分,相关的包装器定义在keras.wrappers.scikit_learn.py中 目前,有两个包装器可用: keras.wrappers.scikit_learn.KerasClassifier(build_fn=None, **sk_params)实现了sklearn的分类器接口 keras.

  • 本文向大家介绍XGBOOST和GDBT的区别?相关面试题,主要包含被问及XGBOOST和GDBT的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: GDBT在函数空间中利用梯度下降法进行优化而XGB在函数空间中使用了牛顿法进行优化。即GDBT在优化中使用了一阶导数信息,而XGB对损失函数进行了二阶泰勒展开,用到了一阶和二阶倒数信息。XGB在损失函数中加入了正则项(树叶子节点个数,每个叶

  • 本文向大家介绍python机器学习库xgboost的使用,包括了python机器学习库xgboost的使用的使用技巧和注意事项,需要的朋友参考一下 1.数据读取 利用原生xgboost库读取libsvm数据 使用sklearn读取libsvm数据 使用pandas读取完数据后在转化为标准形式 2.模型训练过程 1.未调参基线模型 使用xgboost原生库进行训练 使用XGBClassifier进行