베이즈 최적화 시리즈 (1) - 베이즈 최적화의 시각화 -
13566 단어 GPyOpt베이즈 최적화최적화파이썬MachineLearning
베이즈 최적화란?
베이즈 최적화는 기계 학습의 하이퍼파라미터 탐색에 자주 사용됩니다. 그 실행은 GPyOpt로 쉽게 할 수 있습니다. 베이즈 최적화와 GPyOpt에 대해 자세히 알고 싶으시다면 아래 사이트를 참조하십시오.
htps : // m / r / ms / 51b82 a 7b990d51bd98cd
베이즈 최적화는 다양한 장면에서 사용할 수 있습니다. 예를 들면 다음과 같은 용도를 들 수 있습니다.
· 실험 조건을 최적화하고 싶습니다.
· 생산 라인의 수율이 가장 좋아지는 설정 값을 찾고 싶습니다.
・그라탄이 맛있게 굽는 오븐의 온도와 가열 시간을 요구하고 싶다
GPyOpt로 베이즈 최적화
GPyOpt를 사용하여 베이지안 최적화를 시각화합니다.
사용하는 비선형 함수의 코드는 이쪽
Z = 0.1*(X**2+Y**2-16)**2 + 10*np.sin(3*X)
시각화하면 다음과 같습니다.
import matplotlib.pyplot as plt
import numpy as np
#関数の定義
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = 0.1*(X**2+Y**2-16)**2 + 10*np.sin(3*X)#Zは山の高さ
#グラフのプロット
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
산이 3개 정도 있어 중앙의 산(높이 35정도)이 가장 높은 지점입니다. 이번에는 베이즈 최적화에서 가장 높은 지점(중앙 산 정상)을 찾아냅니다.
일반적으로 GPyOpt는 최저값을 탐색합니다. 따라서 함수에 마이너스를 걸어 최적화합니다.
import GPy
import GPyOpt
import numpy as np
#最適化する関数
def f(x):
xx,y = x[:,0],x[:,1]
z = -(0.1*(xx**2+y**2-16)**2 + 10*np.sin(3*xx))#Zは山の高さ
print(-z)
return z
#状態変数の幅
bounds = [{'name': 'xx', 'type': 'continuous', 'domain': (-3,3)},
{'name': 'y', 'type': 'continuous', 'domain': (-3,3)}]
#ベイズ最適化
myBopt = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds)
myBopt.run_optimization(max_iter=30)
최적값 출력:(x,y)와 z
print(myBopt.x_opt)
print(-myBopt.fx_opt)
검색 기록을 저장합니다.
result_x = myBopt.X
result_z = -myBopt.Y
베이즈 최적화 시각화
검색 기록을 시각화합니다.
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
sc = plt.scatter(result_x[:,0], result_x[:,1],s=50,
c=range(len(result_x)),cmap="autumn")
plt.colorbar(sc)
plt.plot(result_x[:,0], result_x[:,1], linestyle="dashed")
plt.show()
탐색한 순서로 점과 점을 연결해 보았습니다.
・초반은 왼쪽의 산을 탐험하고 있습니다(붉은 점).
・중반은 구석구석을 탐색하고 있습니다(오렌지의 점).
・종반은 중앙의 산을 집중적으로 탐색하고 있습니다(노란 점).
높이(Z)의 탐색 이력을 시각화합니다. 처음에는 무작위로 5개의 지점을 탐색하고, 그 후 30회의 베이즈 최적화에 의한 탐색을 하고 있기 때문에, 합계로 35개의 플롯을 얻을 수 있습니다.
plt.figure()
plt.plot(result_z)
plt.xlabel("epochs")
plt.ylabel("Z")
plt.show()
훌륭하고 최고점 (높이 35 부근)을 찾을 수있었습니다! 이번은 2차원 함수였지만 n차원 함수일 때는 주성분 분석 등을 하고 가시화하면 직관적으로 알기 쉬울지도 모릅니다.
다음 번에는 GPyOpt를 사용하여 XGBoost의 하이퍼파라미터를 탐색해 보겠습니다.
다음 번은 GPyOpt를 사용하여 앙상블 학습을 최적화하려고합니다.
Reference
이 문제에 관하여(베이즈 최적화 시리즈 (1) - 베이즈 최적화의 시각화 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinmura0/items/2b54ab0117727ce007fd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
GPyOpt를 사용하여 베이지안 최적화를 시각화합니다.
사용하는 비선형 함수의 코드는 이쪽
Z = 0.1*(X**2+Y**2-16)**2 + 10*np.sin(3*X)
시각화하면 다음과 같습니다.
import matplotlib.pyplot as plt
import numpy as np
#関数の定義
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = 0.1*(X**2+Y**2-16)**2 + 10*np.sin(3*X)#Zは山の高さ
#グラフのプロット
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
산이 3개 정도 있어 중앙의 산(높이 35정도)이 가장 높은 지점입니다. 이번에는 베이즈 최적화에서 가장 높은 지점(중앙 산 정상)을 찾아냅니다.
일반적으로 GPyOpt는 최저값을 탐색합니다. 따라서 함수에 마이너스를 걸어 최적화합니다.
import GPy
import GPyOpt
import numpy as np
#最適化する関数
def f(x):
xx,y = x[:,0],x[:,1]
z = -(0.1*(xx**2+y**2-16)**2 + 10*np.sin(3*xx))#Zは山の高さ
print(-z)
return z
#状態変数の幅
bounds = [{'name': 'xx', 'type': 'continuous', 'domain': (-3,3)},
{'name': 'y', 'type': 'continuous', 'domain': (-3,3)}]
#ベイズ最適化
myBopt = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds)
myBopt.run_optimization(max_iter=30)
최적값 출력:(x,y)와 z
print(myBopt.x_opt)
print(-myBopt.fx_opt)
검색 기록을 저장합니다.
result_x = myBopt.X
result_z = -myBopt.Y
베이즈 최적화 시각화
검색 기록을 시각화합니다.
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
sc = plt.scatter(result_x[:,0], result_x[:,1],s=50,
c=range(len(result_x)),cmap="autumn")
plt.colorbar(sc)
plt.plot(result_x[:,0], result_x[:,1], linestyle="dashed")
plt.show()
탐색한 순서로 점과 점을 연결해 보았습니다.
・초반은 왼쪽의 산을 탐험하고 있습니다(붉은 점).
・중반은 구석구석을 탐색하고 있습니다(오렌지의 점).
・종반은 중앙의 산을 집중적으로 탐색하고 있습니다(노란 점).
높이(Z)의 탐색 이력을 시각화합니다. 처음에는 무작위로 5개의 지점을 탐색하고, 그 후 30회의 베이즈 최적화에 의한 탐색을 하고 있기 때문에, 합계로 35개의 플롯을 얻을 수 있습니다.
plt.figure()
plt.plot(result_z)
plt.xlabel("epochs")
plt.ylabel("Z")
plt.show()
훌륭하고 최고점 (높이 35 부근)을 찾을 수있었습니다! 이번은 2차원 함수였지만 n차원 함수일 때는 주성분 분석 등을 하고 가시화하면 직관적으로 알기 쉬울지도 모릅니다.
다음 번에는 GPyOpt를 사용하여 XGBoost의 하이퍼파라미터를 탐색해 보겠습니다.
다음 번은 GPyOpt를 사용하여 앙상블 학습을 최적화하려고합니다.
Reference
이 문제에 관하여(베이즈 최적화 시리즈 (1) - 베이즈 최적화의 시각화 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinmura0/items/2b54ab0117727ce007fd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
sc = plt.scatter(result_x[:,0], result_x[:,1],s=50,
c=range(len(result_x)),cmap="autumn")
plt.colorbar(sc)
plt.plot(result_x[:,0], result_x[:,1], linestyle="dashed")
plt.show()
plt.figure()
plt.plot(result_z)
plt.xlabel("epochs")
plt.ylabel("Z")
plt.show()
Reference
이 문제에 관하여(베이즈 최적화 시리즈 (1) - 베이즈 최적화의 시각화 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shinmura0/items/2b54ab0117727ce007fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)