본문 바로가기
카테고리 없음

파이썬 SciPy Optimizer

by flycoding 2024. 2. 1.
반응형

파이썬 SciPy Optimizer

optimizer는 SciPy에 정의된 일련의 절차로 함수의 최소값 또는 방정식의 근을 찾는다.

 

파이썬 SciPy Optimizer 함수

기본적으로 머신 러닝의 모든 알고리즘은 주어진 데이터의 도움으로 최소화해야 하는 복잡한 방정식에 불과하다.

 

파이썬 SciPy 방정식의 근(Roots of Equation)

NumPy는 다항식과 선형 방정식의 근은 구할 수 있지만, 다음과 같은 비선형 방정식의 근은 찾을 수 없다:

x + cos(x)

이를 위해 SciPy의 optimize.root 함수를 사용할 수 있다.

이 함수는 다음 두 가지 필수 인수를 사용합니다:

fun- 방정식을 나타내는 함수이다.

x0 - 루트에 대한 초기 추측이다.

함수는 솔루션에 대한 정보와 함께 개체를 반환한다.

실제 솔루션은 반환된 개체의 속성 x 아래에 제공된다:

방정식 x + cos(x)의 근 찾기:

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print('x + cos(x) 방정식의 근은...\n')
print('myroot.x : ', myroot.x)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 SciPy 방정식의 근 찾기 root() 활용 예제

 

참고: 반환된 개체에는 솔루션에 대한 훨씬 더 많은 정보가 있다.

솔루션에 대한 모든 정보 인쇄(루트인 x 뿐만 아니라)

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print('equn() : x + cos(x)\n')
print('myroot = root(eqn, 0)\n')

print(myroot)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 SciPy 방정식의 근 찾기 root() 활용 예제

 

파이썬 SciPy 곡선의 낮은점과 높은점

함수는 곡선을 나타내며 곡선에는 높은 점과 낮은 점이 있다.

고점은 maxima라고 한다.

낮은 점을 minima라고 한다.

전체 곡선에서 가장 높은 점을 global maxima라고 하고 나머지는 local maxima라고 한다.

전체 곡선에서 가장 낮은 점을 global minima이라고 하고 나머지는 local minima라고 한다.

 

파이썬 SciPy minima 검색

함수 곡선의 낮은 점을 찾기 위해 scipy.optimize.minimize() 함수를 사용할 수 있다.

minimize() 함수는 다음 인수를 사용한다:

fun - 방정식을 나타내는 함수이다.

x0 - 루트에 대한 초기 추측이다.

method - 사용할 method의 이름. 법적 값:
    'CG'
    'BFGS'
    'Newton-CG'
    'L-BFGS-B'
    'TNC'
    'COBYLA'
    'SLSQP'

callback- 최적화를 반복할 때마다 호출되는 함수입니다.
option - 추가 매개변수를 정의하는 사전:

{
     "disp" : boolena - 상세설명 인쇄
     "gtol": number - 오류 허용 오차
  }


BFGS를 사용하여 함수 x^2 + x + 2를 최소화한다:

from scipy.optimize import minimize

def eqn(x):
  return x**2 + x + 2

print('eqn() : x**2 + x + 2 \n')

mymin = minimize(eqn, 0, method='BFGS')

print("mymin = minimize(eqn, 0, method='BFGS') :\n ", mymin)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 SciPy 곡선 낮은 점 찾기 minima minimize() 활용 예제

 

이번 글에서 파이썬 SciPy optimize를 통해 방정식의 근과 함수 곡선의 최저점과 최고점을 찾는 실습을 하였다.

파이썬 SciPy 방정식의 근을 찾는 root() 메소드와 함수 곡선의 최저점을 구하는 minimize() 메소드를 실습하였다.

꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.

모두 화이팅입니다.!!!

 

출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.

반응형

댓글