python和R结果不一样

m
microsat
楼主 (北美华人网)
我和同事运行一个xgboost模型,他用python;我用R
数据一摸一样 xgboost模型和参数都一摸一样。
但是他的python得出的probability和我的probability却不一样,有的居然相差0.1。
请问,有什么办法,让python和R中的xgboost模型,在学习同一个数据,同xgboost参数,最终能得出一样的概率。
太阳城主
你自己看看manual来搞明白啊。 你不是要tenure了吗,这还不自己想办法搞定?不行就问ai也行啊。
H
High.eee
一般就是中间加输出点,看从哪开始有差别。
c
chainshore
一个dataframe从0开始一个从1开始,这个match对了吗
B
Banana.Republic
How are you setting up the random number seed?
w
wfmlover
底层的implementation都不一定一样 它们只是名字一样
m
microsat
wfmlover 发表于 2025-08-27 19:56
底层的implementation都不一定一样 它们只是名字一样

也许。
比如:这个随机数就不一样。 set.seed(42)产生不出np.random.seed(42)的随机数。
奇怪,xgboos难道不是一个公司编写的R和python包吗?
遇到python和R结果不一样,大家怎么办?
s
ss4me
报个bug给xgboost?
h
happymc
这部正好拿来验证statistical significance吗
m
microsat
chainshore 发表于 2025-08-27 19:48
一个dataframe从0开始一个从1开始,这个match对了吗

这个基本一致。极个别会出现不一样。比如0.49 和0.51.那么一个是0,一个是1.
但是我要的是probability值。

g
gokgs
0.1 很大吗? 你的程序是,determistic 的吗?你自己的程序每次运行结果都是一样的吗?
x
xiaohuihui
random seed 不一样。
m
microsat
gokgs 发表于 2025-08-28 10:40
0.1 很大吗? 你的程序是,determistic 的吗?你自己的程序每次运行结果都是一样的吗?

python每次运行结果都一样。
R每次运行结果都一样。
因为都设置了随机数。
但是R和python出来的结果不一样。 这就导致:python得出的模型参数,无法在R中使用和验证。
m
microsat
xiaohuihui 发表于 2025-08-28 10:41
random seed 不一样。

的确是一个原因。 而且这个还根本解决不了。
x
xiaohuihui
而且, 你同样的code在不同操作系统,结果也会不一样,因为产生随机数的机制不一样,而且你的并行计算线程数也得设置。
m
microsat
xiaohuihui 发表于 2025-08-28 10:46
而且, 你同样的code在不同操作系统,结果也会不一样,因为产生随机数的机制不一样,而且你的并行计算线程数也得设置。

请问有什么方法能解决这个问题呢?
S
SSBN826
把生成的随机数存成csv文件,用python和R同时使用相同数据比比看。
m
microsat
SSBN826 发表于 2025-08-28 10:49
把生成的随机数存成csv文件,用python和R同时使用相同数据比比看。

python和R使用的都是local 文件的数据。一模一样。
随机数无法存csv,因为xgb.train()内部如何生成随机数,我没有去查看代码。 外部就是一个radom state = 42可以控制这个随机数。
但是R和python无法调成一致。
q
qianqiuxue
microsat 发表于 2025-08-28 10:27
也许。
比如:这个随机数就不一样。 set.seed(42)产生不出np.random.seed(42)的随机数。
奇怪,xgboos难道不是一个公司编写的R和python包吗?
遇到python和R结果不一样,大家怎么办?

xgboost是算法,软件包都是不同的人contribute的 如果是随机数的问题,你就不用随机数呗 哪怕是不同的软件平台,同样算法,差别0.1显然是不可能的
q
qianqiuxue
microsat 发表于 2025-08-28 10:43
python每次运行结果都一样。
R每次运行结果都一样。
因为都设置了随机数。
但是R和python出来的结果不一样。 这就导致:python得出的模型参数,无法在R中使用和验证。

把python产生的随机数share到R里用一下