ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AI 수치미분 Python 구현
    인공지능 2020. 5. 23. 05:28
    728x90

    수치미분 구현 순서

    구현 소스

    // f 는 함수
    // x 미분을 알고자 하는 입력 값
    def numerical_derivative(f, x):
        // 반올림 오차발생을 막기 위해 너무 작게는 하지말고 10의 -4승 정도가 적당함
        delta_x = 1e-4
        return (f(x + delta_x) - f(x - delta_x)) / (2 * delta_x)
        
    def fun(x):
        return x ** 2
    
    
    result = numerical_derivative(fun, 3)
    print("result == ", result)
    

     

    결과

    

    다변수 함수에 대한 수치미분

    즉 x, y 에 대해 각각 수치미분하여야 합니다.

    x에 대한 미분은 y를 2로 고정시키고 x값 1에서 x를 아주 미세하게 변화시켰을 때 f(x, y) 가 8만큼 변화한 것이고,

    y에 대한 미분은 x를 1로 고정시키고 y값 2에서 y를 아주 미세하게 변화시켰을 때 f(x, y) 가 15만큼 변화한 것입니다.

    구현

    import numpy as np
    
    
    # f = 다변수 함수
    # x = 변수 여러개를 담고 있는 numpy 객체 (배열, 행렬)
    # f의 변수가 5개라면 x의 길이 또한 5개
    def numerical_derivative(f, x):
        delta_x = 1e-4
    
        # 결과값을 저장할 배열로, 0으로 초기화함
        grad = np.zeros_like(x)
    
        # x를 iterating 할 변수 it
        it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
    
        # x 를 모두 순회
        # 즉 모든 변수에 대해 각각 수치미분을 진행
        while not it.finished:
            idx = it.multi_index
    
            # x의 원본값이 훼손될 수 있으므로 백업
            tmp_val = x[idx]
    
            # x[0] 에 미세한 변화를 주고
            x[idx] = float(tmp_val) + delta_x
    
            # f(x + delta_x)
            fx1 = f(x)
    
            x[idx] = tmp_val - delta_x
    
            # f(x - delta_x)
            fx2 = f(x)
    
            # 수치미분 실행
            grad[idx] = (fx1 - fx2) / (2 * delta_x)
    
            # x를 원래 값으로 되돌림
            x[idx] = tmp_val
            it.iternext()
    
        return grad
    
    
    def fun(val):
        x = val[0]
        y = val[1]
        return 2 * x + 3 * x * y + y ** 3
    
    
    result = numerical_derivative(fun, np.array([1., 2.]))
    print("result == ", result)
    

     

    결과

     

    '인공지능' 카테고리의 다른 글

    AI Linear regression 예제  (0) 2020.05.24
    AI Linear regression 파이썬 구현  (0) 2020.05.24
    AI Gradient descent 알고리즘  (0) 2020.05.24
    AI Linear Regression  (0) 2020.05.24
    AI 미분과 편미분 & 연쇄법칙(Chain Rule)  (0) 2020.05.23

    댓글

Designed by Tistory.