python - 在某些情况下,Python 中 xgb.train 和 xgb.XGBRegressor 之间的差异是值

标签 python machine-learning scikit-learn regression xgboost

我注意到 Python 中的 XGBoost 有两种可能的实现,如所讨论的 herehere

当我尝试通过两种可能的实现运行相同的数据集时,我注意到结果不同。

代码

import xgboost as xgb
from xgboost.sklearn import XGBRegressor
import xgboost
import pandas as pd
import numpy as np
from sklearn import datasets

boston_data = datasets.load_boston()
df = pd.DataFrame(boston_data.data,columns=boston_data.feature_names)
df['target'] = pd.Series(boston_data.target)

Y = df["target"]
X = df.drop('target', axis=1)

#### Code using Native Impl for XGBoost
dtrain = xgboost.DMatrix(X, label=Y, missing=0.0)
params = {'max_depth': 3, 'learning_rate': .05, 'min_child_weight' : 4, 'subsample' : 0.8}
evallist = [(dtrain, 'eval'), (dtrain, 'train')]

model = xgboost.train(dtrain=dtrain, params=params,num_boost_round=200)

predictions = model.predict(dtrain)

#### Code using Sklearn Wrapper for XGBoost
model = XGBRegressor(n_estimators = 200, max_depth=3, learning_rate =.05, min_child_weight=4, subsample=0.8 )

#model = model.fit(X, Y, eval_set = [(X, Y), (X, Y)], eval_metric = 'rmse', verbose=True)
model = model.fit(X, Y)

predictions2 = model.predict(X)

print(np.absolute(predictions-predictions2).sum())

使用 sklearn boston 数据集的绝对差和

62.687134

当我对 sklearn 糖尿病数据集等其他数据集运行相同的操作时,我发现差异要小得多。

使用 sklearn 糖尿病数据集的绝对差和

0.0011711121

最佳答案

确保随机种子相同

对于两种方法设置相同的种子

param['seed'] = 123

编辑:然后有一些不同的事情。 首先n_estimators也是200吗?您是否也将第二个数据集中的缺失值归为 0?其他默认值是否也相同(对于这个,我认为是的,因为它是一个包装器,但检查其他两件事)

关于python - 在某些情况下,Python 中 xgb.train 和 xgb.XGBRegressor 之间的差异是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59395651/

相关文章:

python - pandas 过滤日期最近 3 个月

python - 为什么需要lambda来嵌套defaultdict?

java - 获取deeplearning4j java中每一层的输入和输出大小

pandas - 如何处理这样的缺失值和回归的日期格式?

python - 运行时错误 : working outside of application context

javascript - Django - 使用 Ajax 重新加载数据表

r - 支持向量机的训练和测试

c# - 需要帮助将一些 F# 代码转换为 C#

python - xgb.train 和 xgb.XGBRegressor(或 xgb.XGBClassifier)有什么区别?

machine-learning - 如何使用 scikit-learn RandomForestClassifier 实现稳定性?