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

뮤지컬월드* 흥미로운 뮤지컬이야기님의 프로필 이미지
뮤지컬월드* 흥미로운 뮤지컬이야기

작성한 질문수

캐글 Advanced 머신러닝 실전 박치기

Bayesian Optimization 개요 및 실습

최적화 함수 에러

작성

·

385

0

안녕하세요 선생님

 

코랩에서

베이지안 설치 잘되었고 버전 확인도 잘 되었습니다.

그러나 최적화 함수 구동중에 계속 numpy 에러라고 입력변수가 float가 문제가 있다고 나오고 있습니다. 챗gpt에 문의해도 코드 에러는 없다고 합니다 .무엇이 원인일까요?

 

(아레 에러 설명 메세지는 np.float는 없어졌으니 float을 쓰라고 되어 있어서 pbounds 구간에 float도 써보고 float 64도 해보고 다해 봤습니다.

 

강의 내용중에 코랩에 문제가 있을수 있다는 말씀이 그말씀이실까요? 저는 코드 library를 모두 코랩에 저장하고 있어서 주피터 보다는 코랩에서 실습을 해보고 싶은데 반드시 주피터에서 해야 하는 건가요? 의견 부탁 드립니다.

 

!pip install bayesian-optimization==1.1.0
# Bayesian optimization 은 넓은 범위의 입력값들을 이 함수에 입력했을 때 어떤 입력값이 이 함수를 최대화 하는지 추론.
def black_box_function(x, y):
    return -x ** 2 - (y - 1) ** 2 + 1

# 입력 파라미터들의 범위(공간)
import numpy as np
pbounds = {'x': (2.0, 4.0), 'y': (-3.0, 3.0)} # 범위는 정수가 아니라 실수

# Create the Bayesian Optimization object
optimizer = BayesianOptimization(
    f=black_box_function,
    pbounds=pbounds,
    random_state=2024
)

# Maximize the function
optimizer.maximize(
    init_points=2,
    n_iter=3,
)

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-31-e3170102c931> in <cell line: 10>()
      8 
      9 # Create the Bayesian Optimization object
---> 10 optimizer = BayesianOptimization(
     11     f=black_box_function,
     12     pbounds=pbounds,

2 frames
/usr/local/lib/python3.10/dist-packages/numpy/__init__.py in __getattr__(attr)
    317 
    318         if attr in __former_attrs__:
--> 319             raise AttributeError(__former_attrs__[attr])
    320 
    321         if attr == 'testing':

AttributeError: module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

 

답변 4

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

Numpy가 upgrade되면서 발생한 사항 같습니다. bayesian optimization에서 float32, float64로 명확하게 코딩이 되어 있어야 하는데, float으로 되어 있어서 이게 numpy 가 upgrade되면서 과거 float을 더이상 허용하지 않아서 발생하는 것 같습니다.

일단 pip install "numpy<1.24" 로 1.24 이전 버전을 재 설치 하시는게 제일 좋을 것 같습니다.

numpy 재 설치후에는 코랩 메뉴에서 런타임 -> 세션 다시 시작을 하신 후 numpy 버전이 과거 버전으로 되는 지 확인후 다시 수행 부탁드립니다.

안되면 다시 글 부탁드립니다.

 

0

pip install --upgrade bayesian-optimization numpy scipy

이 코드를 추가하니 해결되었습니다. 감사합니다.
권 철민님의 프로필 이미지
권 철민
지식공유자

이전에 질문주신 Lightgbm과 연관된 bayesian 질문을 찾아보니, 이미 달아주신 질문과 답변이 있군요. 좋은 정보 감사합니다.

0

앞으로 튜닝을 베이지안으로 하실것 같은데 이부분을 해결하지 않고 그냥 넘어가도 될지 모르겠어서 계속 문의드리는 점 양해 부탁 드립니다. ^^

0

선생님 말씀대로 했으나 아쉽게도 에러 발생합니다.
결론부터 말씀드리면 optimizer.maximize까지에서
init_points의 iteration은 돌았으나
n_iter가 돌지 않으면서 에러가 발생한 것입니다.
(다음의 하이퍼파라미터라면 5번의 iteration이 돌아야함)

!pip install bayesian-optimization==1.1.0

pip install "numpy<1.24"
pip install scipy
from bayes_opt import BayesianOptimization

# Bayesian optimization은 넓은 범위의 입력값들을 이 함수에 입력했을 때 어떤 입력값이 이 함수를 최대화하는지 추론합니다.
def black_box_function(x, y):
    return -x ** 2 - (y - 1) ** 2 + 1

# 입력 파라미터들의 범위(공간)
pbounds = {'x': (float(2.0), float(3.2)), 'y': (float(-3.1), float(3.1))} # 범위는 정수가 아니라 실수

# Bayesian Optimization 객체 생성
optimizer = BayesianOptimization(
    f=black_box_function,
    pbounds=pbounds,
    random_state=2024
)


# 함수 최대화 실행
optimizer.maximize(
    init_points=2,
    n_iter=3,
)
|   iter    |  target   |     x     |     y     |
-------------------------------------------------
|  1        | -6.375    |  2.706    |  1.234    |
|  2        | -18.61    |  2.226    | -2.828    |
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/bayes_opt/bayesian_optimization.py in maximize(self, init_points, n_iter, acq, kappa, xi, **gp_params)
    168             try:
--> 169                 x_probe = next(self._queue)
    170             except StopIteration:


5 frames


StopIteration: Queue is empty, no more objects to retrieve.
During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
    531 
    532     if x0.ndim != 1:
--> 533         raise ValueError("'x0' must only have one dimension.")
    534 
    535     if x0.dtype.kind in np.typecodes["AllInteger"]:

ValueError: 'x0' must only have one dimension.

 

뮤지컬월드* 흥미로운 뮤지컬이야기님의 프로필 이미지
뮤지컬월드* 흥미로운 뮤지컬이야기

작성한 질문수

질문하기