python - 令人尴尬的是,并行助手对于不同的 'n_jobs' 参数没有返回相同的结果

标签 python scikit-learn

def test_n_jobs_parallel():
# Test to check the functioning of n_jobs parameter.
    for kernel in kernels:
        gpr1 = GaussianProcessRegressor(kernel=kernel, n_jobs=1,
                                        n_restarts_optimizer=5).fit(X, y)
        gpr2 = GaussianProcessRegressor(kernel=kernel, n_jobs=2,
                                        n_restarts_optimizer=5).fit(X, y)
        gpr3 = GaussianProcessRegressor(kernel=kernel, n_jobs=-1,
                                        n_restarts_optimizer=5).fit(X, y)
        y1, y1_cov = gpr1.predict(X, return_cov=True)
        y2, y2_cov = gpr2.predict(X, return_cov=True)
        y3, y3_cov = gpr3.predict(X, return_cov=True)

    # Successfully passed tests
        assert_almost_equal(y1, y2)
        assert_almost_equal(y1, y3)
        assert_almost_equal(y1_cov, y2_cov)
        assert_almost_equal(y1_cov, y3_cov)
    # Failing tests
        assert_almost_equal(gpr1.alpha_, gpr2.alpha_)
        assert_almost_equal(gpr1.alpha_, gpr3.alpha_)
        assert_almost_equal(gpr1.log_marginal_likelihood_value_,
                            gpr2.log_marginal_likelihood_value_)
        assert_almost_equal(gpr1.log_marginal_likelihood_value_,
                            gpr3.log_marginal_likelihood_value_)

我还尝试降低精度值(需要小数位)。仅少数内核会出现此问题。

最佳答案

我能想到的两件事可能会导致您的问题:

  1. 该算法使用随机种子
  2. 拟合期间内核超参数发生变化

我会尝试将随机种子设置为常量,然后重试。如果这不起作用,您介意分享哪些内核未通过测试吗?

(这更多的是评论,但我的权限没有那么高..)

关于python - 令人尴尬的是,并行助手对于不同的 'n_jobs' 参数没有返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41121096/

相关文章:

python - 使用 k-近邻,无需分成训练集和测试集

python - 相同长度音频剪辑的不同 FFT 信号长度

python - 在sklearn中学习SVM后如何使用dual_coef_param?

python - 具有不同基础的同一模块中的两个同名类?

python - 在Azure ML上开始训练模型

python - 平衡数据后 KNN 找不到类

python - 拆分测试集后如何使用 pandas 数据框?

python - 为什么我画图遇到除零错误?

python - requests.json 和 json.loads() JSONDecodeError : Expecting value: line 1 column 1 (char 0)

python - 如何使用 sklearn 并行拟合梯度提升模型?