Scikit learn 为什么我从Scikit学习API和XGBoost学习API中得到的结果不同?

Scikit learn 为什么我从Scikit学习API和XGBoost学习API中得到的结果不同?,scikit-learn,xgboost,rapids,Scikit Learn,Xgboost,Rapids,我使用了XGBoost的Scikit学习API(python)。我的准确率约为68%。我使用了相同的参数集,并使用XGBoost的学习API;我的准确率约为60%。我的理解是,Scikit学习API是学习API的包装器,因此他们应该给我相同的结果。我不明白为什么我从这两个API得到不同的结果 cores=16 随机状态=0 参数={ “n_估计数”:100, “学习率”:0.1, “最大深度”:3, “最小儿童体重”:1.0, “子样本”:1.0, “gamma”:0.0, “tree_方法”:

我使用了XGBoost的Scikit学习API(python)。我的准确率约为68%。我使用了相同的参数集,并使用XGBoost的学习API;我的准确率约为60%。我的理解是,Scikit学习API是学习API的包装器,因此他们应该给我相同的结果。我不明白为什么我从这两个API得到不同的结果

cores=16
随机状态=0
参数={
“n_估计数”:100,
“学习率”:0.1,
“最大深度”:3,
“最小儿童体重”:1.0,
“子样本”:1.0,
“gamma”:0.0,
“tree_方法”:“gpu精确”,
“colsample_bytree”:1.0,
“alpha”:0.0,
“lambda”:1.0,
“nthread”:核心,
“目标”:“二进制:逻辑”,
“助推器”:“gbtree”,
“种子”:随机_状态,
“预计到达时间”:0.1,
“无声”:1
}
模型=XGBClassifier(**参数)
r=模型配合(X\U系列、y\U系列)
打印(模型)
#对测试数据进行预测
y_pred=模型预测(X_检验)
预测=[y_pred中值的四舍五入(值)]
#评估预测
准确度=准确度得分(y检验、预测)
打印(“精度:%.2f%%”%(精度*100.0))
结果:

XGBClassifier(alpha=0.0, base_score=0.5, booster='gbtree',
       colsample_bylevel=1, colsample_bytree=1.0, eta=0.1, gamma=0.0,
       lambda=1.0, learning_rate=0.1, max_delta_step=0, max_depth=3,
       min_child_weight=1.0, missing=None, n_estimators=100, n_jobs=1,
       nthread=16, objective='binary:logistic', random_state=0,
       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=1,
       subsample=1.0, tree_method='gpu_exact')
准确率:68.32%

dtrain=xgb.DMatrix(X列车,标签=y列车)
dvalid=xgb.DMatrix(X_检验,label=y_检验)
#拟合模型无训练数据
型号=xgb.列车(参数=参数,数据列车=数据列车)
#对测试数据进行预测
y_pred=模型预测(dvalid)
预测=[y_pred中值的四舍五入(值)]
#评估预测
准确度=准确度得分(y检验、预测)
打印(“精度:%.2f%%”%(精度*100.0))
结果:

XGBClassifier(alpha=0.0, base_score=0.5, booster='gbtree',
       colsample_bylevel=1, colsample_bytree=1.0, eta=0.1, gamma=0.0,
       lambda=1.0, learning_rate=0.1, max_delta_step=0, max_depth=3,
       min_child_weight=1.0, missing=None, n_estimators=100, n_jobs=1,
       nthread=16, objective='binary:logistic', random_state=0,
       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=1,
       subsample=1.0, tree_method='gpu_exact')

准确率:60.25%

我认为区别在于您没有在(xgb.train())中指定助推轮数。因此,它使用默认值10

“n_估计量”是一个专门的术语


此外,与上面给出的注释相反,当在同一系统上多次运行时,该特定算法预计是确定性的。

这些算法是非确定性的。你不能保证他们会给你完全相同的表现。我尝试了你的建议,但不幸的是,这并没有解决问题。为了进一步了解,我需要完全复制你的例子。请用数据发布整个脚本。如有必要,可以使用sklearn数据集生成器。