GithubHelp home page GithubHelp logo

Hyperactive returns integer parameters as float in best_para when search space has both int and float parameters about hyperactive HOT 4 CLOSED

simonblanke avatar simonblanke commented on May 16, 2024
Hyperactive returns integer parameters as float in best_para when search space has both int and float parameters

from hyperactive.

Comments (4)

SimonBlanke avatar SimonBlanke commented on May 16, 2024 1

After this problem was fixed in GFO I tested the same thing for Hyperactive. The same error occurred so I merged the pull request #35, added some small fixes and added the test.

Thanks to @0liu for fixing this bug.

from hyperactive.

SimonBlanke avatar SimonBlanke commented on May 16, 2024

Hello @0liu,

I am grateful for your continuing interest in Hyperactive, but we should focus on identifying the error first. I took the code from issue 15 of GFO and converted it to Hyperactive to validate your concerns about this problem:

from hyperactive import Hyperactive

search_space = dict(my_para=range(100, 200, 10))

def obj_func(para):
    score = 1
    my_para = para["my_para"]
    for i in range(my_para):
        pass
    return score

hyper = Hyperactive()
hyper.add_search(obj_func, search_space, n_iter=100)
hyper.run()

This small test script runs fine. Could you provide a small but complete example to replicate the problem you are encountering?

from hyperactive.

0liu avatar 0liu commented on May 16, 2024

Hi Simon,

I missed the key information in this issue's description but mentioned it in my PR: This happens when search space contains both integer and float type parameters. In this way, numpy will convert integer parameter value to float. I updated the title and first post.

By your example, if we have two parameters for the obj_func:

from hyperactive import Hyperactive

search_space = dict(my_para=range(100, 200, 10), my_para_2=[0.1, 0.2, 0.3])

def obj_func(para):
    score = 1
    my_para = para["my_para"]
    for i in range(my_para):
        pass
    return score

hyper = Hyperactive()
hyper.add_search(obj_func, search_space, n_iter=100)
hyper.run()

The results are:

Results: 'obj_func'
Best score: 1
Best parameter set:
'my_para' : 130.0
'my_para_2' : 0.3
Best iteration: 0

We can see my_para in the returned best para is 130.0 instead of 130. This is fine for human reading or manual post-processing, but in an automated process, if passing the returned results to evaluate model on validation / test data sets, there could be a problem. That's why I thought it's more like a API design concern instead of a bug.

from hyperactive.

SimonBlanke avatar SimonBlanke commented on May 16, 2024

Hello @0liu,

now I see! Thank you for the explanation. This should be classified as a bug. But I think this bug originates in GFO. I reopened your original issue in GFO, because the error occurs only when the search space contains int and float. We missed this in the original issue.

GFO also has the int to float converted parameter, if you extract the best parameter with opt.best_para. Therefore I think those problems (one within the objective function and one with .best_para) are related and both originate in GFO.

When we fix the problem in GFO and the problem persists in Hyperactive, then we continue our efforts here. Until then we should focus on fixing the problem in GFO.

from hyperactive.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.