3 回答

TA贡献1843条经验 获得超7个赞
我在获得匹配分数方面有类似的经验。
我的理解是,除非您修复ntree_limit
选项以匹配n_estimators
您在模型拟合期间使用的选项,否则评分可能会提前停止。
df['score']= xgclfpkl.predict(df[xg_features], ntree_limit=500)
开始使用后ntree_limit
,我开始获得匹配的分数。

TA贡献1911条经验 获得超7个赞
我有类似的经验,需要将 xgboost 评分代码从 R 提取到 SAS。
最初,我遇到了与您在这里相同的问题,即在较小的树中,R 和 SAS 的分数没有太大差异,一旦树的数量增加到 100 或更多,我开始观察差异.
我做了三件事来缩小差异:
确保丢失的组朝着正确的方向前进,您需要明确。否则 SAS 会将缺失值视为所有数字中的最小值。规则应该类似于 SAS 中的以下内容。
if sepal_width > 2.95000005 or missing(sepal_width) then state = 1;else state = 2;
或者if sepal_width <= 2.95000005 and ~missing(sepal_width) then state = 1;else state = 2;
我使用了一个叫做 R 包
float
来使分数有更多的小数位。as.numeric(float::fl(Quality))
确保 SAS 数据与您在 Python 中训练的数据具有相同的形状。
希望以上有帮助。

TA贡献1963条经验 获得超6个赞
几点——
首先,正则表达式叶返回值匹配并没有捕捉到垃圾堆里的“E-小数”科学记数法(默认)。显式示例(第二个是正确的修改!)-
s = '3:leaf=9.95066429e-09'
out = re.findall(r"[\d.-]+", s)
out2 = re.findall(r"-?[\d.]+(?:e-?\d+)?", s)
out2,out
(易于修复但不易发现,因为我的模型中只有一片叶子受到影响!)
其次,问题是关于二进制的,但在多类目标中,转储中的每个类都有单独的树,因此您T*C总共有树,其中T是提升轮C数,是类数。对于类c(在 {0,1,...,C-1} 中),您需要评估(并求和)树i*C +c的i = 0,...,T-1. 然后将其 softmax 以匹配来自 xgb 的预测。
添加回答
举报