Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Scikit学习包装器来匹配XGBoost和XGBoost的预测?_Python_Scikit Learn_Xgboost - Fatal编程技术网

Python 如何使用Scikit学习包装器来匹配XGBoost和XGBoost的预测?

Python 如何使用Scikit学习包装器来匹配XGBoost和XGBoost的预测?,python,scikit-learn,xgboost,Python,Scikit Learn,Xgboost,我不熟悉Python中的XGBoost,因此如果这里的答案很明显,我很抱歉,但我正在尝试使用panda数据帧并获得Python中的XGBoost,以提供我在使用Scikit学习包装器进行相同练习时得到的相同预测。到目前为止,我还不能这样做。举个例子,这里我以波士顿数据集为例,转换成熊猫数据帧,对数据集的前500个观测值进行训练,然后预测最后6个。我首先使用XGBoost,然后使用Scikit学习包装器,我得到了不同的预测,尽管我已经将模型的参数设置为相同的。具体来说,数组预测看起来与数组预测2非

我不熟悉Python中的XGBoost,因此如果这里的答案很明显,我很抱歉,但我正在尝试使用panda数据帧并获得Python中的XGBoost,以提供我在使用Scikit学习包装器进行相同练习时得到的相同预测。到目前为止,我还不能这样做。举个例子,这里我以波士顿数据集为例,转换成熊猫数据帧,对数据集的前500个观测值进行训练,然后预测最后6个。我首先使用XGBoost,然后使用Scikit学习包装器,我得到了不同的预测,尽管我已经将模型的参数设置为相同的。具体来说,数组预测看起来与数组预测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.train
将忽略参数n_估值器,而
xgboost.XGBRegressor
接受。在xgboost.train中,提升迭代次数 (即n_估计器)由num_boost_round控制(默认值:10)

它建议从提供给
xgb.train
的参数中删除
n\u估计器
,并将其替换为
num\u boost\u round

因此,如下更改您的参数:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}
model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)
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')
然后训练xgb。训练方式如下:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}
model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)
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')
你会得到同样的结果

或者,保持xgb.train不变,并按如下方式更改xgb回归器:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}
model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)
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.train
将忽略参数n_估值器,而
xgboost.XGBRegressor
接受。在xgboost.train中,提升迭代次数 (即n_估计器)由num_boost_round控制(默认值:10)

它建议从提供给
xgb.train
的参数中删除
n\u估计器
,并将其替换为
num\u boost\u round

因此,如下更改您的参数:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}
model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)
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')
然后训练xgb。训练方式如下:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}
model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)
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')
你会得到同样的结果

或者,保持xgb.train不变,并按如下方式更改xgb回归器:

params = {'objective': 'reg:linear', 
      'max_depth': 2, 'learning_rate': .1,    
      'min_child_weight': 3, 'colsample_bytree': .7,
      'subsample': .8, 'gamma': 0, 'alpha': 1}
model = xgb.train(dtrain=xgtrain, params=params,num_boost_round=500)
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')

然后你也会得到同样的结果。

非常感谢!我使用您建议的第一组更改重新运行代码,现在数组(预测和预测2)完全匹配。@VivekKumar:请问,如何从xgb.train在XGBRespressor中重新生成num_boost_round=500?同样,如何在xgb.train中指定您将使用分类器或回归器的事实?目标函数可以做到这一点,但您可以在XGBRegressionor中指定任何组合,如binary:logistic,我想这不是用于此的参数。谢谢。@AndoJurai您需要使用n_估计数=500来计算。但我不明白你问题的第二部分。请详细解释你想要什么?@AndoJurai检查这里:。如果仍然不满意,请用相关信息开始一个新问题。@AndoJurai您是否在链接页面上查看了目标参数。所有选项都有效<代码>“reg:linear”用于回归。请参阅标题:“学习任务参数”,非常感谢!我使用您建议的第一组更改重新运行代码,现在数组(预测和预测2)完全匹配。@VivekKumar:请问,如何从xgb.train在XGBRespressor中重新生成num_boost_round=500?同样,如何在xgb.train中指定您将使用分类器或回归器的事实?目标函数可以做到这一点,但您可以在XGBRegressionor中指定任何组合,如binary:logistic,我想这不是用于此的参数。谢谢。@AndoJurai您需要使用n_估计数=500来计算。但我不明白你问题的第二部分。请详细解释你想要什么?@AndoJurai检查这里:。如果仍然不满意,请用相关信息开始一个新问题。@AndoJurai您是否在链接页面上查看了目标参数。所有选项都有效<代码>“reg:linear”用于回归。请参阅标题:“学习任务参数”