베이즈 최적화 시리즈 (5) - 리얼한 실험으로 사용하고 싶다 -
이번에는 현실적인 실험에서 베이즈 최적화를 사용하는 방법을 소개합니다.
베이즈 최적화 시리즈(1)-베이즈 최적화의 가시화-
베이즈 최적화 시리즈 (2) - 앙상블 학습 (Voting) 최적화 -
베이즈 최적화 시리즈(3) -XGBoost의 하이퍼파라미터 탐색-
베이즈 최적화 시리즈(4)-게임의 공략-
현실적인 실험으로 베이즈 최적화
베이즈 최적화는 기계 학습의 파라미터 설정뿐만 아니라 화학 실험이나 물리 실험 등의 현실적인 실험에서도 위력을 발휘합니다.
이번에는 GPyOpt를 사용해, 리얼한 실험을 상정한 코드를 써 보았습니다.
실험 흐름
이번 상정하고 있는 실험의 흐름을 아래에 나타냅니다.
이번 상정하고 있는 실험의 흐름을 아래에 나타냅니다.
우선 코드를 복사해서 움직여 주시면 무엇을 하고 있는지 알 수 있을 것 같아요.
문제 설정
사실은, 피타고라 스위치적인 실험장치를 준비하고 싶었습니다만, 시간의 편리함에, 수치 계산으로 대체했습니다.
다음 y의 최소값을 찾는 문제를 고려하십시오.
y = x^2
GPyOpt에서 x가 제시되므로 y를 계산 후 입력하는 것입니다.
여러분이 실험할 때, 위의 식은 미지라고 생각하므로, x를 실험 조건, y를 실험 결과로 바꾸어 사용해 보세요.
코드
import GPy
import GPyOpt
import numpy as np
#予備実験のデータ
initial_x = np.array([-1, 0.5])
initial_y = np.array([1, 0.25])
initial_x = initial_x.reshape((-1,1))
initial_y = initial_y.reshape((-1,1))
#実験回数
exp_num = 5
try_ = 1
def f(x):
global try_
print("Try : " , try_ , " / {0} , next x is ".format(exp_num) , x)
score = float(input("Input y : "))
try_ += 1
return score
bounds = [{'name': 'a', 'type': 'continuous', 'domain': (-2,2)}]#実験条件の範囲
print("Bayesian Optimization")
#予備実験のデータを持っていない場合はinitial_design_numdataの値を変更
myBopt = GPyOpt.methods.BayesianOptimization(f=f,
domain=bounds,
X = initial_x,
Y = initial_y,
initial_design_numdata=0)
myBopt.run_optimization(max_iter=exp_num)
#最適なパラメータ
print("Best x is ",myBopt.x_opt)
베이즈 최적화 중에 전달할 변수는 여기 을 보면 알 수 있습니다.
결과
위의 코드를 실행하면 다음과 같은 결과가 됩니다.
덧붙여 Input y의 부분은 내가 손 계산해, 입력하고 있습니다.
Bayesian Optimization
Try : 1 / 5 , next x is [[0.60906033]]
Input y : 0.36
Try : 2 / 5 , next x is [[0.21945366]]
Input y : 0.0479
Try : 3 / 5 , next x is [[2.]]
Input y : 4
Try : 4 / 5 , next x is [[-0.087055]]
Input y : 0.0064
Try : 5 / 5 , next x is [[0.01745743]]
Input y : 0.000289
Best x is [0.01745743]
그래서 최적의 x는 "0.01745"로 요구되었습니다.
해석적으로는 「0」이 최적치이므로, 거의 도달할 수 있었을까 생각합니다.
일단 애니메이션으로 해 보았습니다.
파란 점은 예비 실험의 데이터이며, 빨간 점은 베이즈 최적화로 실험한 것입니다.
Reference
이 문제에 관하여(베이즈 최적화 시리즈 (5) - 리얼한 실험으로 사용하고 싶다 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinmura0/items/d932d4e6d7bf2fd86e11
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
y = x^2
import GPy
import GPyOpt
import numpy as np
#予備実験のデータ
initial_x = np.array([-1, 0.5])
initial_y = np.array([1, 0.25])
initial_x = initial_x.reshape((-1,1))
initial_y = initial_y.reshape((-1,1))
#実験回数
exp_num = 5
try_ = 1
def f(x):
global try_
print("Try : " , try_ , " / {0} , next x is ".format(exp_num) , x)
score = float(input("Input y : "))
try_ += 1
return score
bounds = [{'name': 'a', 'type': 'continuous', 'domain': (-2,2)}]#実験条件の範囲
print("Bayesian Optimization")
#予備実験のデータを持っていない場合はinitial_design_numdataの値を変更
myBopt = GPyOpt.methods.BayesianOptimization(f=f,
domain=bounds,
X = initial_x,
Y = initial_y,
initial_design_numdata=0)
myBopt.run_optimization(max_iter=exp_num)
#最適なパラメータ
print("Best x is ",myBopt.x_opt)
베이즈 최적화 중에 전달할 변수는 여기 을 보면 알 수 있습니다.
결과
위의 코드를 실행하면 다음과 같은 결과가 됩니다.
덧붙여 Input y의 부분은 내가 손 계산해, 입력하고 있습니다.
Bayesian Optimization
Try : 1 / 5 , next x is [[0.60906033]]
Input y : 0.36
Try : 2 / 5 , next x is [[0.21945366]]
Input y : 0.0479
Try : 3 / 5 , next x is [[2.]]
Input y : 4
Try : 4 / 5 , next x is [[-0.087055]]
Input y : 0.0064
Try : 5 / 5 , next x is [[0.01745743]]
Input y : 0.000289
Best x is [0.01745743]
그래서 최적의 x는 "0.01745"로 요구되었습니다.
해석적으로는 「0」이 최적치이므로, 거의 도달할 수 있었을까 생각합니다.
일단 애니메이션으로 해 보았습니다.
파란 점은 예비 실험의 데이터이며, 빨간 점은 베이즈 최적화로 실험한 것입니다.
Reference
이 문제에 관하여(베이즈 최적화 시리즈 (5) - 리얼한 실험으로 사용하고 싶다 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinmura0/items/d932d4e6d7bf2fd86e11
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Bayesian Optimization
Try : 1 / 5 , next x is [[0.60906033]]
Input y : 0.36
Try : 2 / 5 , next x is [[0.21945366]]
Input y : 0.0479
Try : 3 / 5 , next x is [[2.]]
Input y : 4
Try : 4 / 5 , next x is [[-0.087055]]
Input y : 0.0064
Try : 5 / 5 , next x is [[0.01745743]]
Input y : 0.000289
Best x is [0.01745743]
Reference
이 문제에 관하여(베이즈 최적화 시리즈 (5) - 리얼한 실험으로 사용하고 싶다 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shinmura0/items/d932d4e6d7bf2fd86e11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)