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

Jc님의 프로필 이미지
Jc

작성한 질문수

비트코인 알고리즘 트레이딩 봇 개발

거래전략 및 백테스트(역추세 매매 기법)

베이지안에서 질문있습니다.

작성

·

190

0


pbounds = {
    'revenue_rate' : (0.005,0.015),
    'max_loss_rate' : (0.05,0.3),
    'increase_rate' : (0.1,0.4),
    'buy_cnt_limit' : (5,20),
    'buy_amt_unit' : (10,20)
}


여기서 buy_cnt_limit은 사실 정수가 나와야 하는데. 베이지안 최적화 후에 반올림하여 수정하는 방법밖에 없을까요?

 

답변 2

0

멀티코어님의 프로필 이미지
멀티코어
지식공유자

안녕하세요 Jc님

베이지안 함수에서는 기본적으로 소수점 단위로 데이터를 반환합니다.

정수로 사용하고 싶을 실 경우 데이터를 활용하는 run_test 함수에서 반올림하셔야 합니다.

제공해 드린 예제를 보시면 반올림(round)해서 사용하는 부분을 확인하실 수 있습니다.

감사합니다.

def black_box_function....

revenue = run_test(config_data)

def run_test(config):

set_wma_s = list_wma_s [int(round(config['wma_s'],0))]

0

안녕하세요, 인프런 AI 인턴이에요.

베이지안 최적화를 사용해야하는 목적이 알려져 있다면, buy_cnt_limit 값을 정수로 설정하려는 것이 이해됩니다.
베이지안 최적화는 연속적인 값을 최적화하는데 주로 사용되기 때문에 정수 값을 최적화하기가 어려울 수 있습니다.

buy_cnt_limit 값을 정수로 설정하려면 반올림을 사용하는 방법이 있을 것입니다. 예를 들어, 반올림 함수인 round()를 사용하면 됩니다.
다음은 베이지안 최적화 결과를 반올림하여 정수로 변환하는 예시 코드입니다.

from bayes_opt import BayesianOptimization

# 최적화 함수
def target_func(revenue_rate, max_loss_rate, increase_rate, buy_cnt_limit, buy_amt_unit):
    # buy_cnt_limit를 반올림하여 정수로 변환
    buy_cnt_limit = round(buy_cnt_limit)

    # 최적화하고자 하는 로직 수행
    # ...

    # 결과 반환
    return optimized_result

# 범위 설정
pbounds = {
    'revenue_rate' : (0.005,0.015),
    'max_loss_rate' : (0.05,0.3),
    'increase_rate' : (0.1,0.4),
    'buy_cnt_limit' : (5,20),
    'buy_amt_unit' : (10,20)
}

# 최적화 수행
optimizer = BayesianOptimization(target_func, pbounds)
optimizer.maximize()

# 최적화 결과 출력
buy_cnt_limit = round(optimizer.max['params']['buy_cnt_limit'])
print("Optimized buy_cnt_limit:", buy_cnt_limit)

위의 코드는 베이지안 최적화 라이브러리인 BayesianOptimization을 사용하는 예시입니다.
target_func 함수에서 buy_cnt_limit를 반올림하여 정수로 변환한 후 최적화 로직을 수행하고, 최적화 결과를 출력합니다.
다른 최적화 라이브러리를 사용한다면 해당 라이브러리의 문서를 참고하여 반올림하는 방법을 찾아보시기 바랍니다.

반올림을 통해 buy_cnt_limit 값을 정수로 변환할 수 있습니다. 하지만 정수로 변환되지 않은 값으로 최적화를 수행하고 그 결과를 반올림하는 방법도 고려할 수 있습니다. 따라서 결과와 유의미한 값을 산출하는 방식을 선택하시면 될 것 같습니다.

추가적으로, 해당 질문은 베이지안 최적화에 관한 것이며 프로그래밍 관련 질문이므로 답변을 드릴 수 있었습니다.
더 궁금한 점이 있다면 언제든지 물어보세요!

Jc님의 프로필 이미지
Jc

작성한 질문수

질문하기