【问题标题】:How to create random float number (between a range) for param_grid如何为 param_grid 创建随机浮点数(范围之间)
【发布时间】:2021-09-17 13:56:42
【问题描述】:

我想在param_grid 内创建介于 (0.2, 0.3) 之间的浮点数。我有代码

    test_size = (0.2, 0.3)
    param_iters = 2
    param_grid = {
        "test_size": uniform(test_size[0], test_size[1]),
    }
    sampler = list(ParameterSampler(param_grid, n_iter=param_iters))
    args = [Namespace(**{**args, **dict(params=params)}) for params in sampler]

但是我发现 train_size 是0.38974229192297480.4852142919229748。这意味着我正在超出范围 (0.2, 0.3)

我也尝试使用下面的代码

    param_grid = {
        "test_size": round(random.uniform(test_size[0], test_size[1]), 2),
    }

但在下一行出现错误

Parameter value is not iterable or distribution (key='test_size', value=0.24)

如何将 train_size 限制在 param_grid 内的 (0.2, 0.3) 之间?

【问题讨论】:

  • 为什么是numpy 标签?
  • @hpaulj 我使用了numpy,因为我们可以使用numpy创建一个随机数
  • @hpaulj 不,这个rand(random.uniform), 2) 代表stats。但是,我试过了,np.random.uniform(test_size[0], test_size[1]),我得到了同样的错误Parameter value is not iterable or distribution
  • 你需要把imports和tags搞清楚。否则我们会(或者至少我)会假设uniform来自np.random或pythonrandom。无论哪种情况,它都会产生一个随机数。总体而言,您的代码不可重现。

标签: python python-3.x numpy random


【解决方案1】:

基于@mb4329,我想稍微改变一下。这里你必须使用param_iters 而不是1。否则,你只会得到1test_size。

    param_grid = {
        "test_size": np.random.uniform(test_size[0], test_size[1], param_iters)
    }

输出

{'test_size': array([0.23745401, 0.29507143])}
[{'test_size': 0.23745401188473625}, {'test_size': 0.2950714306409916}]

【讨论】:

    【解决方案2】:

    我认为您只需要在第二个示例中返回一个列表而不是浮点数

    test_size = (0.2, 0.3)
    x = np.random.uniform(test_size[0], test_size[1], 1)
    print(x)
    >> [0.2100939]
    

    【讨论】:

    • 不,它们不是随机的。等间距!
    • 谢谢,我已经试过了。当我在sampler 内部使用时,我得到了Parameter value is not iterable or distribution (key='test_size', value=0.24)
    • 嗯,它看起来像是在寻找一个可迭代的,即 [0.21] 而不是 0.21,指定随机函数返回一个列表而不是浮点数可能会起作用
    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2014-03-31
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多