更具体地说,numpy:
In [24]: a=np.random.RandomState(4)
In [25]: a.rand()
Out[25]: 0.9670298390136767
In [26]: a.get_state()
Out[26]:
('MT19937',
array([1248735455, ..., 1532921051], dtype=uint32),
2,0,0.0)
Run Code Online (Sandbox Code Playgroud)
八度:
octave:17> rand('state',4)
octave:18> rand()
ans = 0.23605
octave:19> rand('seed',4)
octave:20> rand()
ans = 0.12852
Run Code Online (Sandbox Code Playgroud)
Octave声称执行相同的算法(Mersenne Twister,周期为2 ^ {19937-1})
谁知道为什么会有区别?
有没有办法让numpy中的随机数生成器生成与Matlab相同的随机数,给定相同的种子?
我在Matlab中尝试了以下内容:
>> rng(1);
>> randn(2, 2)
ans =
0.9794 -0.5484
-0.2656 -0.0963
Run Code Online (Sandbox Code Playgroud)
以及与Numpy的iPython中的以下内容:
In [21]: import numpy as np
In [22]: np.random.seed(1)
In [23]: np.random.randn(2, 2)
Out[23]:
array([[ 1.624, -0.612],
[-0.528, -1.073]])
Run Code Online (Sandbox Code Playgroud)
两个数组中的值都不同.
或者有人建议比较Matlab和Python中使用随机数生成的相同算法的两个实现是个好主意.
谢谢!
我在工作中使用的 xgboost 有这个问题。我的任务是将当前在 R 中运行的一段代码移植到 python。
代码的作用: 我的目标是使用 XGBoost 来确定增益最大的特征。我确保 XGBoost 的输入在 R 和 python 中是相同的。XGBoost 运行大约 100 次(在不同的数据上),每次我通过增益提取 30 个最佳特征。
我的问题是:R 和 python 中的输入是相同的。然而,python 和 R 输出了截然不同的特征(无论是每轮的特征总数,还是选择了哪些特征)。它们只共享大约 50% 的功能。我的参数是一样的,我没有使用任何样本,所以没有随机性。
另外,我注意到的另一件事 - 与具有相同参数的 R 相比,XGBoost 在 python 中速度较慢。这是一个已知问题吗?
我一直试图环顾四周,但没有发现任何人有类似的问题。我不能分享数据或代码,因为它是机密的。有人知道为什么功能差异如此之大吗?
R 版本:3.4.3
XGBoost R 版本:0.6.4.1
蟒蛇版本:3.6.5
XGBoost python 版本:0.71
在 Windows 上运行。