인프런 커뮤니티 질문&답변

hyukjae.jang님의 프로필 이미지
hyukjae.jang

작성한 질문수

처음하는 파이썬 머신러닝 부트캠프 (쉽게! 실제 캐글 문제 풀며 정리하기) [데이터분석/과학 Part3]

하이퍼 파라미터 튜닝 기법 적용하기1 (XGBoost 실습)

Bayesian Optimization XGBoost 적용 실행시 오류

작성

·

657

0

'Bayesian Optimization XGBoost 적용' 코드 실행시 아래처럼 iteration이 진행되다가 10번 이후에 에러가 납니다.
|   iter    |  target   | colsam... |   gamma   | learni... | max_depth | min_ch... | n_esti... | subsample |
-------------------------------------------------------------------------------------------------------------
|  1        |  0.817    |  0.7085   |  3.602    |  0.01006  |  5.116    |  1.468    |  183.1    |  0.5931   |
|  2        |  0.8283   |  0.6728   |  1.984    |  0.274    |  5.934    |  6.852    |  284.0    |  0.9391   |
|  3        |  0.8272   |  0.5137   |  3.352    |  0.2145   |  6.911    |  1.404    |  278.3    |  0.9004   |
|  4        |  0.8081   |  0.9841   |  1.567    |  0.3492   |  9.135    |  8.946    |  176.5    |  0.5195   |
|  5        |  0.8114   |  0.5849   |  4.391    |  0.05819  |  5.948    |  9.579    |  579.8    |  0.8459   |
|  6        |  0.8249   |  0.6578   |  3.433    |  0.419    |  3.128    |  7.501    |  990.0    |  0.8741   |
|  7        |  0.8081   |  0.6402   |  3.946    |  0.06058  |  6.135    |  9.086    |  364.3    |  0.6439   |
|  8        |  0.816    |  0.565    |  0.09683  |  0.3426   |  4.481    |  2.655    |  542.4    |  0.5267   |
|  9        |  0.8306   |  0.7871   |  0.7336   |  0.2988   |  7.898    |  1.023    |  472.7    |  0.8472   |
|  10       |  0.8171   |  0.7071   |  0.2498   |  0.2726   |  7.647    |  5.149    |  950.1    |  0.7933   |
 
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
File /usr/local/lib/python3.9/site-packages/bayes_opt/bayesian_optimization.py:179, in BayesianOptimization.maximize(self, init_points, n_iter, acq, kappa, kappa_decay, kappa_decay_delay, xi, **gp_params)
    178 try:
--> 179     x_probe = next(self._queue)
    180 except StopIteration:

File /usr/local/lib/python3.9/site-packages/bayes_opt/bayesian_optimization.py:25, in Queue.__next__(self)
     24 if self.empty:
---> 25     raise StopIteration("Queue is empty, no more objects to retrieve.")
     26 obj = self._queue[0]

StopIteration: Queue is empty, no more objects to retrieve.

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
Input In [22], in <module>
     36 optimizer = BayesianOptimization( f=xgboost_hyper_param, pbounds=pbounds, random_state=1)
     37 # init_points: 초기 랜덤 포인트 갯수
     38 # acq='ei': Expected Improvement 
     39 # xi=0.01: exploration(불확실성이 가장 높은 점 근처에 최적값이 존재할 것이라는 가정으로 계산된 값) 강도 (보통 0.01) 
---> 40 optimizer.maximize(init_points=10, n_iter=100, acq='ei', xi=0.01)

File /usr/local/lib/python3.9/site-packages/bayes_opt/bayesian_optimization.py:182, in BayesianOptimization.maximize(self, init_points, n_iter, acq, kappa, kappa_decay, kappa_decay_delay, xi, **gp_params)
    180 except StopIteration:
    181     util.update_params()
--> 182     x_probe = self.suggest(util)
    183     iteration += 1
    185 self.probe(x_probe, lazy=False)

File /usr/local/lib/python3.9/site-packages/bayes_opt/bayesian_optimization.py:131, in BayesianOptimization.suggest(self, utility_function)
    128     self._gp.fit(self._space.params, self._space.target)
    130 # Finding argmax of the acquisition function.
--> 131 suggestion = acq_max(
    132     ac=utility_function.utility,
    133     gp=self._gp,
    134     y_max=self._space.target.max(),
    135     bounds=self._space.bounds,
    136     random_state=self._random_state
    137 )
    139 return self._space.array_to_params(suggestion)

File /usr/local/lib/python3.9/site-packages/bayes_opt/util.py:65, in acq_max(ac, gp, y_max, bounds, random_state, n_warmup, n_iter)
     62     continue
     64 # Store it if better than previous minimum(maximum).
---> 65 if max_acq is None or -res.fun[0] >= max_acq:
     66     x_max = res.x
     67     max_acq = -res.fun[0]

TypeError: 'float' object is not subscriptable

답변 2

0

https://stackoverflow.com/questions/71460894/bayesianoptimization-fails-due-to-float-error

동일한 에러를 겪고 있고, 근본적인 이유는 scipy 가 1.8.0으로 버전업이 되면서 -res.fun[0] 대신 -np.squeeze(res.fun) 로 변경되면서 발생한 문제인 것 같습니다.

제시된 해결방법을 적용할 수 없었지만 참고차 남깁니다.

1. scipy 1.7.0 사용

2. https://github.com/fmfn/BayesianOptimization/issues/300 을 참고하여 아래와 같이 bayesian optimization 재설치

pip install git+https://github.com/fmfn/BayesianOptimization

0

안녕하세요. 해당 코드가 아마 다음 코드로 보이는데 맞는 것이죠?

이것도 기존 문의처럼, 해당 코드 시간이 상당히 걸려서요.  실제로 에레 메세지가 사용하시는 PC에서는 성능상의 이슈로 코드 실행이 버거워서 그런 것 같아요. ㅠㅠ n_iter 값을 10 정도까지가 현 PC 에서는 가능한 범위 같아보여서, 10으로 바꿔보시면 어떠실까요? 더 많이 실행하면할수록 아주 조금씩은 개선된 값이 나올 가능성이 높아지겠지만, 이 부분이 전체 최종 예측 성능에 크게 영향을 주는 부분은 아니라서, 사용법을 익혀보신다고 생각해보셔도 좋지 않을까 합니다. 

감사합니다.

 

 

hyukjae.jang님의 프로필 이미지
hyukjae.jang

작성한 질문수

질문하기