Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'numpy.random.mtrand.RandomState' object has no attribute 'integers' #179

Closed
john-zeng112 opened this issue Nov 26, 2021 · 8 comments

Comments

@john-zeng112
Copy link

I encountered a AttributeError: 'numpy.random.mtrand.RandomState' object has no attribute 'integers' at the hyperopt/fmin.py in run(self, N, block_until_done). My numpy and sklearn version are 1.19.2 and 1.0.1, respectively.

@taylor-schneider
Copy link

@john-zeng112 I am seeing the same issue on 1.19.5 and 1.0.1. My stack trace is as follows:

best_hyperparameters = hyperopt.fmin(
  fn = foobar,
  space = space,
  algo = hyperopt.tpe.suggest,
  max_evals = 200,
  trials = spark_trials,
  loss_threshold = 0.05,
  rstate = numpy.random.RandomState(42))

==================================================

Total Trials: 10: 10 succeeded, 0 failed, 0 cancelled.

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-71c168d86476> in <module>
      6   trials = spark_trials,
      7   loss_threshold = 0.05,
----> 8   rstate= numpy.random.RandomState(42))

c:\program files\python36\lib\site-packages\hyperopt\fmin.py in fmin(fn, space, algo, max_evals, timeout, loss_threshold, trials, rstate, allow_trials_fmin, pass_expr_memo_ctrl, catch_eval_exceptions, verbose, return_argmin, points_to_evaluate, max_queue_len, show_progressbar, early_stop_fn, trials_save_file)
    553             show_progressbar=show_progressbar,
    554             early_stop_fn=early_stop_fn,
--> 555             trials_save_file=trials_save_file,
    556         )
    557 

c:\program files\python36\lib\site-packages\hyperopt\spark.py in fmin(self, fn, space, algo, max_evals, timeout, loss_threshold, max_queue_len, rstate, verbose, pass_expr_memo_ctrl, catch_eval_exceptions, return_argmin, show_progressbar, early_stop_fn, trials_save_file)
    259         except BaseException as e:
    260             logger.debug("fmin thread exits with an exception raised.")
--> 261             raise e
    262         else:
    263             logger.debug("fmin thread exits normally.")

c:\program files\python36\lib\site-packages\hyperopt\spark.py in fmin(self, fn, space, algo, max_evals, timeout, loss_threshold, max_queue_len, rstate, verbose, pass_expr_memo_ctrl, catch_eval_exceptions, return_argmin, show_progressbar, early_stop_fn, trials_save_file)
    255                 show_progressbar=show_progressbar,
    256                 early_stop_fn=early_stop_fn,
--> 257                 trials_save_file="",  # not supported
    258             )
    259         except BaseException as e:

c:\program files\python36\lib\site-packages\hyperopt\fmin.py in fmin(fn, space, algo, max_evals, timeout, loss_threshold, trials, rstate, allow_trials_fmin, pass_expr_memo_ctrl, catch_eval_exceptions, verbose, return_argmin, points_to_evaluate, max_queue_len, show_progressbar, early_stop_fn, trials_save_file)
    584 
    585     # next line is where the fmin is actually executed
--> 586     rval.exhaust()
    587 
    588     if return_argmin:

c:\program files\python36\lib\site-packages\hyperopt\fmin.py in exhaust(self)
    362     def exhaust(self):
    363         n_done = len(self.trials)
--> 364         self.run(self.max_evals - n_done, block_until_done=self.asynchronous)
    365         self.trials.refresh()
    366         return self

c:\program files\python36\lib\site-packages\hyperopt\fmin.py in run(self, N, block_until_done)
    277                     # processes orchestration
    278                     new_trials = algo(
--> 279                         new_ids, self.domain, trials, self.rstate.integers(2 ** 31 - 1)
    280                     )
    281                     assert len(new_ids) >= len(new_trials)

AttributeError: 'numpy.random.mtrand.RandomState' object has no attribute 'integers'

I had a look through the hyperopt search code. The SparkTrials behaves differently than the normal base.Trials object. The SparkTrials object is expecting an instance of numpy.random.default_rng(SEED)). We can see an example of this in hyperopt/mix.py on line 28 - 34.

I adjusted my code and saw success with:

best_hyperparameters = hyperopt.fmin(
  fn = foobar,
  space = space,
  algo = hyperopt.tpe.suggest,
  max_evals = 200,
  trials = spark_trials,
  loss_threshold = 0.05,
  rstate = numpy.random.default_rng(42))

I guess we can either mark this as solved or ask @jaberg if the difference between the interfaces of the Trials objects was intentional. I would argue that the same type of seed should be used for ALL classes of Trials. If there is a technical limitation then I'd suggest documenting SparkTrials as the black sheep and providing an example.

@aspfohl
Copy link

aspfohl commented Dec 8, 2021

Seeing the same issue with hpsklearn=0.1.0, numpy=1.21.4, hyperopt=0.2.7, Python 3.9.6. I'm running something very simple, straight from the main readme:

from hpsklearn import HyperoptEstimator, svc
estim = HyperoptEstimator(classifier=svc('mySVC'))
estim.fit(X_train, Y_train)

Stack trace:

AttributeError                            Traceback (most recent call last)
      1 from hpsklearn import HyperoptEstimator, svc
      2 estim = HyperoptEstimator(classifier=svc('mySVC'))
----> 3 estim.fit(X_train, Y_train)

~/.venv/lib/python3.9/site-packages/hpsklearn/estimator.py in fit(self, X, y, EX_list, valid_size, n_folds, cv_shuffle, warm_start, random_state, weights)
    744             increment = min(self.fit_increment,
    745                             adjusted_max_evals - len(self.trials.trials))
--> 746             fit_iter.send(increment)
    747             if filename is not None:
    748                 with open(filename, 'wb') as dump_file:

~/.venv/lib/python3.9/site-packages/hpsklearn/estimator.py in fit_iter(self, X, y, EX_list, valid_size, n_folds, cv_shuffle, warm_start, random_state, weights, increment)
    646             #       latest hyperopt.fmin() on master does not match PyPI
    647             if 'rstate' in inspect.getargspec(hyperopt.fmin).args:
--> 648                 hyperopt.fmin(fn_with_timeout,
    649                               space=self.space,
    650                               algo=self.algo,

~/.venv/lib/python3.9/site-packages/hyperopt/fmin.py in fmin(fn, space, algo, max_evals, timeout, loss_threshold, trials, rstate, allow_trials_fmin, pass_expr_memo_ctrl, catch_eval_exceptions, verbose, return_argmin, points_to_evaluate, max_queue_len, show_progressbar, early_stop_fn, trials_save_file)
    538 
    539     if allow_trials_fmin and hasattr(trials, "fmin"):
--> 540         return trials.fmin(
    541             fn,
    542             space,

~/.venv/lib/python3.9/site-packages/hyperopt/base.py in fmin(self, fn, space, algo, max_evals, timeout, loss_threshold, max_queue_len, rstate, verbose, pass_expr_memo_ctrl, catch_eval_exceptions, return_argmin, show_progressbar, early_stop_fn, trials_save_file)
    669         from .fmin import fmin
    670 
--> 671         return fmin(
    672             fn,
    673             space,

~/.venv/lib/python3.9/site-packages/hyperopt/fmin.py in fmin(fn, space, algo, max_evals, timeout, loss_threshold, trials, rstate, allow_trials_fmin, pass_expr_memo_ctrl, catch_eval_exceptions, verbose, return_argmin, points_to_evaluate, max_queue_len, show_progressbar, early_stop_fn, trials_save_file)
    584 
    585     # next line is where the fmin is actually executed
--> 586     rval.exhaust()
    587 
    588     if return_argmin:

~/.venv/lib/python3.9/site-packages/hyperopt/fmin.py in exhaust(self)
    362     def exhaust(self):
    363         n_done = len(self.trials)
--> 364         self.run(self.max_evals - n_done, block_until_done=self.asynchronous)
    365         self.trials.refresh()
    366         return self

~/.venv/lib/python3.9/site-packages/hyperopt/fmin.py in run(self, N, block_until_done)
    277                     # processes orchestration
    278                     new_trials = algo(
--> 279                         new_ids, self.domain, trials, self.rstate.integers(2 ** 31 - 1)
    280                     )
    281                     assert len(new_ids) >= len(new_trials)

AttributeError: 'numpy.random.mtrand.RandomState' object has no attribute 'integers'

Having install requirements would make debugging this a lot easier (#180)

@B0Gec
Copy link

B0Gec commented Jan 6, 2022

For me this issue was solved by changing hyperopt to version 0.2.5
(pip install hyperopt==0.2.5) as suggested in the issue hyperopt/hyperopt#829

My (linux) setup:
Python 3.9.2
hpsklearn 0.0.3
hyperopt 0.2.5
numpy 1.22.0

For me it worked in both ways of installing: with pip install git+url (newest version) and pip install hpsklearn (2017 version)

@rottentomato13
Copy link

For me this issue was solved by changing hyperopt to version 0.2.5 (pip install hyperopt==0.2.5) as suggested in the issue hyperopt/hyperopt#829

My (linux) setup: Python 3.9.2 hpsklearn 0.0.3 hyperopt 0.2.5 numpy 1.22.0

For me it worked in both ways of installing: with pip install git+url (newest version) and pip install hpsklearn (2017 version)

when I pip install git+url it said Invalid requirement: 'git+url' donno why

@Preranapagar
Copy link

Preranapagar commented Feb 9, 2024

Facing same issue for hyperopt (0.2.7)

@z4668640
Copy link

z4668640 commented Apr 3, 2024

The problem still exists

@mandjevant
Copy link
Contributor

This is an issue with hyperopt. Not hyperopt-sklearn.

Downgrading to hyperopt v0.2.5 solves it for most.

hyperopt/hyperopt#829

@MrVtR
Copy link

MrVtR commented Apr 14, 2024

This is an issue with hyperopt. Not hyperopt-sklearn.

Downgrading to hyperopt v0.2.5 solves it for most.

hyperopt/hyperopt#829

This didn't work with sparse data, instead of:
AttributeError: 'numpy.random.mtrand.RandomState' object has no attribute 'integers'

Now I have:
ValueError: zero-dimensional arrays cannot be concatenated

This error is mentioned in #105 as completed, but I'm with this same error on hyperopt 0.2.5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants