본문 바로가기

Python/Data Analysis

Data Analysis / ML / Basic Concept(2)

< 미분(derivative) >

  • 어떤 함수의 정의역 속 각 점에서, 독립변수의 값의 변화량과 함수값의 변화량 비율의 극한 혹은 극한의 집합을 치치역으로 가지는 새로운 함수
  • 미분법(differentiation) : 미분함수(도함수)를 구하는 작업
  • 미분은 함수에 있어서 특정 순간의 변화량을 의미
    • x값에서의 작은 변화가 함수 f(x)를 얼마나 변화시키는가?
  • 미분의 두 가지 방식
    1. 해석미분(Analytical differentiation)
      • 종이와 펜을 가지고 논리적인 전개로 미분을 수행
      • 고등학교 시절에 미분문제푸는 것처럼 하는 방법
    2. 수치미분
      • 해석미분을 이용해서 문제를 해결할 수 없을 떄, 근사값을 이용해서 미분을 수행하는 방법
      • delta_x 라는 0에 근사한 값을 이용
      • Python에서 delta_x가 소수점 8자리 이하로 내려가면 오류가 발생 (반올림에서 오류)
      • 일반적으로 delta_x를 0.00001 정도로 설정
      • 중앙차분방식으로 미분 수행 (이 방식이 가장 정확한 값을 도출함)

중앙차분방식

< 수치미분 >

1. 일변수 함수의 수치미분

  • 입력으로 들어오는 x가 아주 미세하게 값이 변화할 때, 함수 f는 얼마나 변하는지를 수치적으로 계산해서 return
  • Python 에서는 일급함수를 지원하므로, 하나의 함수를 다른 함수의 인자로 전달 가능

2. 다변수 함수의 수치미분

  • 입력함수들은 서로 독립이므로 개별적으로 편미분해서 계산

< Regression >

 학습된 결과를 바탕으로 미래의 무엇을 예측하느냐에 따라서 크게 2가지로 구분

1. Regression

  • Linear Regression : Training Data Set을 이용해서 학습된 결과를 만들고, 연속적인 숫자값을 예측
  • Logistic Regression

2. Classification

  • binary classification
  • multinomial classification

공부시간(x)과 시험점수(t)를 이용해서 데이터를 표현하고, scatter(산점도)를 그려보자

해당 코드의 실행결과는 아래와 같다.

산점도와 직선

해당 그래프에서, 빨간 직선이 산점도와 제일 유사함을 확인할 수 있다.

목표 : 이 직선들 중, 산점도와 가장 유사한 직선을 찾는 것

< loss function (손실함수) >

 최소 제곱법(least squared method)으로 계산

  • 각 데이터와 직선의 오차 제곱의 평균
  • 상수항은 모양에 영향을 주지 않으므로 제외

loss function 공식

loss function

그림에서 확인할 수 있듯이, loss function은 2차함수 형태로 나타난다.

이 때, 변곡점에 해당하는 W 값이 우리가 찾고자 하는 값이다.


그러면, 어떤 W를 설정했을 때, loss function 값이 최소인지 알려면 어떻게 해야할까?

  • 접선의 기울기가 0인 곳이 우리가 원하는 값
  • 미분하면 접선을 구할 수 있다.

=> 미분한 값이 양수면 W 값을 줄이고, 음수면 W 값을 늘인다.

매번 W의 기울기를 체크하면서, 값이 변하도록 조절해주면 목표 W 값에 점점 가깝게 만들 수 있다.

W function

※ 알파 : learning rate(학습율)

  • 오직 기울기만으로 W 값을 조절하면 값이 급격하게 변할 수 있다.
  • 이를 조절하기 위해 두는 상수
  • 문제마다 customizing 하여 조절

Flow Chart

※ 만약 적절한 learning_rate를 정하지 못했을 경우에는 어떻게 될까?

1. learning_rate 값이 클 경우

→ Overshooting : w값이 수렴하지 못하고 발산할 수 있다.

2. learning_rate 값이 작을 경우

→ 학습에 많은 시간이 소요될 수 있다.

learning_rate