Posts Sympy를 사용한 함수, 행렬의 미분과 적분
Post
Cancel

Sympy를 사용한 함수, 행렬의 미분과 적분

1. sympy를 사용한 함수 미분

1.1예측 모형의 성능

  • 성능함수 : 모수를 결정하여 성능을 측정하는 함수
  • 손실함수 : 오차(e)가 가장 작아지는 함수
  • 목적함수 : 최적화의 대상이 되는 모든 함수 (성능, 손실, 오차)
  • 최적화 : 목적 함수를 가장 크거나 작게 만드는 함수
  • 미분 : 입력값이 변했을때 출력값이 어떻게 변하는지 확인하는 행위

1.2 기울기

  • x와 y의 증감에 대한 민감도

1.3 수치 미분

  • 수치적으로 대략적인 기울기
1
2
3
4
from scipy.misc import derivative

print(derivative(f, 0, dx=1e-6))
print(derivative(f, 1, dx=1e-6))
1
2
1.000000000001
-2.000000000002
  • scipp.misc의 derivative() 로 사용

1.4 미분

  • 어떤 함수로부터 그 함수 기울기를 출력하는 새로운 함수를 만들어내는 작업
  • 도함수 : 미분으로 만들어진 함수

1.5 미분 가능

  • 미분 가능 : 기울기를 구할수 있다.
  • 미분 불가능 : 기울기를 구할수 없다

1.6 미분 공식

  • 기본 미분공식
  • 선형 조합법칙
  • 곱셈 법칙
  • 연쇄 법칙

1.7 기본 미분 공식

  • 상수 :
  • 거듭제곱 :
  • 로그 :
  • 지수:

1.8 선형 조합 법칙

  • 어떤 함수에 각각 상수를 곱한 후 더한 선형조합은 각 함수의 도함수를 선형조합 한것과 같다

1.9 곱셈 법칙

  • 어떤 함수의 형태가 두 함수를 곱한것과 같을땐 다음과 같이 각 개별 함수의 도함수를 사용하여 원래 함수의 도함수를 구하는것

1.10 연쇄 법칙

  • 미분하고자 하는 함수의 입력 변수가 다른 함수의 출력 변수인 경우 적용

1.11 2차 도함수

  • 도함수를 한번 더 미분하여 만들어진 함수
  • 2차 도함수의 값이 양수면 볼록하다
  • 2차 도암수의 값이 음수면 오목하다

1.12 편미분

  • 함수가 둘 이상의 독립변수를 가지는 다변수 함수인 경우에도 미분 즉, 기울기는 하나의 변수에 대해서만 구할 수 있다
  • 편미분의 결과로 하나의 함수에 대해 여러 도함수가 나올 수 있다.
  • 어떤 하나의 독립변수에 대해 미분할때는 다른 독립변수를 상수로 취급

1.13 다변수 함수의 연쇄 법칙

  • 다변수 함수의 미분을 구할 때도 함수가 연결되어 이으면 연쇄 법칙이 적용된다.

1.14 2차 편미분

  • 편미분에 대해 2차 도함수를 정의한것
  • 슈와르츠 정리 : 함수가 연속이고 미분 가능하다면 미분의 순서는 상관없다

1.15 테일러 전개

  • 함수의 기울기를 근사화 하는것

1.16. sympy

  • symbolic 연산을 지원하는 파이썬 패키지
1
x = sympy.symbols('x')
  • symbols()로 변수를 지정, 여러개 동시에 가능
1
2
3
4
5
# 함수 정의
f = x * sympy.exp(x)

# 함수 미분
sympy.diff(f)
  • diff()로 미분
1
sympy.simplify(sympy.diff(f))
  • simplify()로 소인수 분해

2. 적분

2.1 부정적분

  • 정확하게 미분과 반대되는 개념, 즉 만 미분
  • 도함수 -> 함수를 도출해내는 작업

2.2 편미분의 부정적분

  • 편미분을 한 도함수에서 원래의 함수를 찾는 작업

2.3 다차 도함수와 다중적분

  • 미분을 여러번 한 결과로 나온 다차 도함수로부터 원래의 함수를 찾아내려면 여러번 적분을 하는 다중적분이 필요

2.4 sympy를 이용한 부정적분

1
2
3
4
5
6
7
import sympy

sympy.init_printing(use_latex='mathjax')

x = sympy.symbols('x')
f = x * sympy.exp(x) + sympy.exp(x)
sympy.integrate(f)
1
2
3
4
x, y = sympy.symbols('x y')
f = 2 * x + y

sympy.integrate(f, x)
  • symyp.integrate()로 부정적분함

2.5 정적분

  • 독립변수x가 어떤 구간 [a,b]사이일때 그 구간에서 함수f(x)의 값과 수평선(x축)이 이루는 면적을 구하는 행위
  • 미적분의 기본정리 : 부정적분으로 구한 F(x)를 이용하여 정적분을 구하는것
  • 정적분은 부정적분을 한뒤 미적분학의 기본정리를 사용하여 구하거나 원래 함수의 면적 부분을 실제로 자게 쪼개어 면적을 근시하게 구하는 수치적분으로 구한다.

2.6 수치 적분

  • 함수를 아주 작은 구간으로 나누어 실제면적을 계산함으로써 정적분 값을 구하는 방법

2.7 다변수 정적분

  • 입력변수가 2개인 2차원 함수 f(x,y)의 경우에는 정적분을 다양한 방법으로 정의한다. 두변수로 모두 적분하는 것은 2차원 평면에서 주어진 사각형 영역 아래의 부피를 구하는것과 같다.

2.8 다차원 함수의 단일 정적분

  • 2차원 함수에서 하나의 변수만 진짜 변수로 보고 나머지 하나는 상수로 간주하는 경우

3. 행렬의 미분

3.1 행렬미분 : 행렬을 입력이나 출력으로 가지는 함수를 미분

  1. 벡터 x -> 스칼라 f
  2. 행렬 x -> 스칼라 f
  3. 스칼라 x -> 벡터 f
  4. 벡터 x -> 행렬 f
  5. 벡터 x -> 벡터 f
  6. 벡터 x -> 행렬 f

3.2 스칼라를 벡터로 미분하는 경우

  • 그레디언트 벡터 : 스칼라를 벡터로 미분하는 경우 경과를 열벡터로 표시
  • 퀴버 플롯 : 컨투어 플롯 위에 그레디언트 벡터를 화살표로 나타낸 플롯
    • 그레디언트 벡터의 그기는 기울기를 의미하며, 벡터의 크기가 클수록 함수 곡면의 기울기가 커진다.
    • 그레디언트 벡터의 방향은 함수 곡면의 기울기가 가장 큰 방향, 즉 단위 길이당 함수값(높이)이 가장 크게 증가하는 방향을 가리킨다.
    • 그레디언트 벡터의 방향은 등고선 방향과 직교한다.

3.3 행렬 미분 법칙

  • 행렬 미분 법칙 1 : 선형 모형
    • 선형 모형을 미분하면 그레디언트 벡터는 가중치다
  • 행렬 미분 법칙 2 : 이차 형식
    • 이차형식을 미분하면 행렬과 벡터의 곱으로 나타난다.
  • 벡터를 스칼라로 미분하는 경우
    • 벡터를 스칼라로 미분하는 경우에는 결과를 행벡터로 표시한다.
  • 벡터를 벡터로 미분하는 경우
    • 벡터를 벡터로 미분하면 결과로 나온 도함수는 2차원 배열 즉, 행렬이 된다.
  • 행렬 미분 법칙 3 : 행렬과 벡터의 곱의 미분
    • 행렬 A와 벡터 x의 곱 Ax를 벡터x로 미분하면 A.T가 된다.
    • 자코비안행렬 : 함수의 출력변수와 입력변수가 모두 벡터(다차원)데이터인 경우에는 입력변수 각각과 출력변수 각각의 조합으로 만들어진 전치행렬
    • 헤시안행렬 : 다변수함수의 2차 도함수는 그레디언트 벡터를 입력변수로 미분한것

3.4 스칼라를 행렬로 미분

  • 출력변수 f가 스칼라 값이고 입력변수 X가 행렬인 경우에는 도함수 행렬의 모양이 입력변수 행렬 x와 같다.

3.5 행렬 미분 법칙 4 : 행렬 곱의 대각성분

  • 두 정방행렬을 곱해서 만들어진 행렬의 대각성분은 스칼라이며 이 스칼라를 뒤의 행렬로 미분하면 앞 행렬의 전치행렬이 나온다.

3.6 행렬 미분 법칙 5 : 행렬식의 로그

  • 행렬식은 스칼라값이고 이 값의 로그 값도 스칼라이며 이 값을 원래 행렬로 미분하면 원래 행렬의 역행렬의 전치 행렬이 된다.
This post is licensed under CC BY 4.0 by the author.

PCA와 함수

최적화(Optimization) with Scipy, 확률(Probability) with Pgmpy

Comments powered by Disqus.