본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/ML

3/25 금

728x90

불금쓰~! 🥳

 

오늘은 머신러닝에 들어가기에 앞서 수학적인 내용을 배운다!

 

1. Log : 지수(제곱, 승) 표현에는 익숙함. Log는 지수를 다른 방법으로 표현

Log의 특성을 이용하면, 복잡한 지수방정식을 쉽게 풀 수 있음. 왜? 값을 확 줄여준다! 정규성 ↑

 

지수방정식은 진수와 분리된 형태, 로그 방정식은 지수가 분리된 형태

 

Log는 크게 2가지

상용로그(common lodarithm) : 십진로그, 밑이 10

자연로그(natural lodarithm) : 자연로그, 밑이 자연상수 e(2.718...)

 

2. 미분 : 어떤 함수의 정의역(두 변수 x, y 사이에 y가 x의 함수로 나타내어질 때에, x가 취할 수 있는 값의 범위) 속 각 점에서 독립변수 값의 변화량과 함수값의 변화량의 비율(직선의 기울기)의 극한, 극한의 집합을 치역(함수가 취하는 값 전체의 집합)으로 가지는 새로운 함수

 

미분은 함수에 대해서 특정 순간의 변화량(x에서의 작은 변화가 f(x) 함수를 얼마나 변화시키는가)

해석미분 : 종이와 펜을 이용해 논리적인 전개로 수행하는 미분

수치미분 : 해석미분으로 해결할 수 없을 때 수치값을 이용해 미분의 근사값을 얻어내는 방법

 

수치미분은 전향차분, 후향차분, 중앙차분(가장 값이 정확)이 있음

중앙차분을 구할 때, 델타 x(△x)를 아주 작은 값으로 설정하면 문제가 발생함 → 10의 -4승 정도로 잡음

* 미분의 기본 공식들

 

3. 편미분(partial derivative) : 독립변수 두 개 이상인 다변수 함수에서, 미분하고자 하는 변수 하나를 제외한 나머지 변수를 상수(변수에 대하여 항상 일정한 값을 취하는 양)로 취급해서 해당 변수를 미분하는 방법

 

4. 미분의 Chain Rule(연쇄 법칙) : 여러 함수로 구성된 합성함수를 미분할 때 사용

 

5. Python으로 일(단)변수 함수의 수치미분(중앙차분 이용) 코드를 만들고 미분값을 구해보자

def my_func(): # Python의 함수는 변수에 저장되는 개념. 함수 이름이 변수
    print('Hello')
   
my_func()      # Hello
print(my_func) # <function my_func at 0x000001BDE34994C0>

# 일급함수(first-classes function)를 지원하는 프로그래밍 언어들(Javascript, Python)이 있음. C 언어는 일급함수를 지원하지 않음
# 함수 이름이 변수 이름이기 때문에, 변수(다른 함수의 인자로)처럼 사용할 수 있음

def my_func2(x): # 파라미터로 변수를 넘김
    print(x + 10)

tmp = 20
my_func2(tmp) # 30

def my_func3(x):
    x(20)

def my_func4(x):
    print(x + 30)
    
my_func3(my_func4) # 50
# f(x) = x^2 # 미분값을 구하는 함수를 만들어 보자
# f'(x) = 2x
# f'(5) = 10 # 해석미분

def my_func(x): # 우리가 가지고 있는 함수 f(x)
    return x ** 2

def numerical_derivative(f,x): # 미분을 수행하는 함수
    
    delta_x = 1e-4 # 극한에 해당하는 값. 너무 작은 값을 사용하면 실수 계산 오류 발생
    # 1e-4 정도의 값을 이용하면, 적당한 수치미분 값(근사값)을 구할 수 있음
    
    return (f(x + delta_x) - f(x - delta_x)) / (2 * delta_x)

# f'(5)
result = numerical_derivative(my_func, 5)
print(result) # 9.999999999976694

 

6. Python으로 다변수 함수의 수치미분(중앙차분 이용) 코드를 만들고 미분값을 구해보자

# Python으로 다변수 함수의 수치미분(중앙차분 이용) 코드를 만들고 미분값을 구해보자
# f(x,y) = 2x + 3xy + y^3 # 2변수 함수
# f'(1.0, 2.0) = ??
# f(a, b, c) = 3a + 3bc + b^2 + c^3 # 3변수 함수

import numpy as np

# def my_func(x,y): # 이렇게 구현하면, 다변수 함수의 수치미분 코드를 3변수 이상에 대해서 각각 구현해야함
#     return 2 * x + 3 * x * y + y ** 3

# print(my_func(1.0, 2.0)) # 16.0

def my_func(input_value): # input_value = [x,y] 리스트로 값이 2개 넘어온다. ndarray로 들어올 경우 [x y]
    x = input_value[0]
    y = input_value[1]
    return 2 * x + 3 * x * y + y ** 3

# x : [1.0, 2.0] → 결과 : [8.0, 15.0] / x : [1.0, 2.0, 3.0] → 결과 : [8.0, 15.0, 20]

def numerical_derivative(f,x): # 다변수 함수의 수치미분 코드. input_value = [x y] ndarray로 값이 2개 넘어온다
# x : [[1.0 2.0]
#      [3.0 4.0]]
# → 결과 : [[8.0 15.0]
#            [20.0 30.0]]
    delta_x = 1e-4
    derivative_x = np.zeros_like(x) # derivative_x : [0.0 0.0]. x의 shape과 같도록 ndarray 만듦

# iterator를 이용해서 입력변수 x에 대한 편미분을 수행
    it = np.nditer(x, flags=['multi_index']) # iterator 객체를 얻어 변수 넣고 flags라는 속성으로 차원 정해주고 반복~

    while not it.finished:
        idx = it.multi_index
        tmp = x[idx] # tmp : 1.0

        x[idx] = tmp + delta_x # x : ndarray [1.0001 2.0]
        fx_plus_delta = f(x)

        x[idx] = tmp - delta_x # x : ndarray [0.9999 2.0]
        fx_minus_delta = f(x)

        derivative_x[idx] = (fx_plus_delta - fx_minus_delta) / (2 * delta_x)

        x[idx] = tmp # x : ndarray [1.0 2.0]
        it.iternext()
    return derivative_x

result = numerical_derivative(my_func, np.array([1.0, 2.0]))
print(result) # [ 8.         15.00000001]
# Python으로 4변수 함수의 수치미분(중앙차분 이용) 코드를 만들고 미분값을 구해보자

# f(w,x,y,z) = wx + xyz + 3w + zy^2
# 수치미분
# f'(1.0, 2.0, 3.0, 4.0) = ?

def my_func(input_value): # [[1.0 2.0
                          #  3.0 4.0]]
    w = input_value[0,0]
    x = input_value[0,1]
    y = input_value[1,0]
    z = input_value[1,1]
    
    return (w*x) + (x*y*z) + (3*w) + (z*(y**2))

result = numerical_derivative(my_func, np.array([[1.0, 2.0], [3.0, 4.0]]))
print(result)
# [[ 5. 13.]
#  [32. 15.]]

미분 내용 끝!


머신러닝 시작!

 

1. Regression(회귀) : 데이터에 영향을 주는 조건들의 영향력을 고려해서, 데이터에 대한 조건부 평균을 구하는 기법

 

 

1. 3/15 화 2. 3/16 수 3. 3/17 목 4. 3/18 금 5. 3/21 월
ML
환경 설정

(아나콘다, 주피터 노트북),
Pandas,

Numpy,
ndarray
ML
Numpy,

행렬곱연산,
전치행렬,
iterator,
axis,
Pandas,
Series,
DataFrame
ML
Pandas,
DataFrame,

함수들
ML
Pandas,
데이터 분석,
데이터 전처리
ML
Pandas,
데이터 전처리,
수행평가
6. 3/22 화 7. 3/23 수 8. 3/24 목 9. 3/25 금 10. 3/28 월
ML
데이터 시각화,
Matplotlib,
기술통계
ML
기술통계
ML
기술통계,
머신러닝
ML
미분,
Regression
ML

* 미분 빠개자!!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > ML' 카테고리의 다른 글

3/29 화  (0) 2022.03.29
3/28 월  (0) 2022.03.28
3/24 목  (0) 2022.03.24
3/23 수  (0) 2022.03.23
3/22 화  (0) 2022.03.22