안녕하세요 딥러닝 공부 2일차입니다. 오늘은 본격적인 딥러닝 세부 내용에 대해 공부해보겠습니다.
딥러닝의 계산 원리
1. 선형 회귀
2. 로지스틱 회귀
선형 회귀 전 알아야하는 개념 :
결과를 변하게 할 속성 값 x 와 속성 x 값에 따라 변하는 y
x 값이 변함에 따라 y값도 변한다는 이 정의 안에서, 독립적으로 변할 수 있는 값 x를 독립 변수
이 독립 변수에 따라 종속적으로 변하는 y 값을 종속 변수
션형회귀란?
독립 변수 x를 사용해서 종속 변수 y의 움직임을 예측하고 설명하는 작업
x는 하나가 아니라 여러 개일 수 있는데 하나의 x 값으로 y 값을 설명할 수 있을 때 이를 단순 선형 회귀, 여러개 가 필요할 때는 다중 선형 회귀
일차 함수 그래프 ( y = ax + b )
여기서 x 값은 독립 변수이고 y 값은 종속 변수입니다. 정확하게 계산하려면 상수 a, b 값을 알아야합니다. 선형 회귀는 정확한 직선을 그려내는 과정이기 때문에 최적의 a, b 값을 찾아내는 작업이라고 할 수 있습니다.
최소 제곱법 공식
최소 제곱법을 통해 일차 함수의 기울기 a와 절편 b를 구할 수 있다.
최소 제곱법이란 회귀 분석에서 사용되는 표준 방식
위를 예시로 x 값은 공부한 시간, y 값은 성적
b = y의 평균 - (x의 평균 X 기울기 a)
< 위 이론을 가지고 실제 코딩에 적용시켜보기 >
책과는 다른 x, y 값을 가지고 테스트해보았습니다.
import numpy as np
# 공부한 시간
x = [4, 9, 15, 20]
# 시간에 따른 성적
y = [60, 75, 86, 99]
그 후에 a 값을 구하기 위해 x 평균과 y 평균을 구하기 위에 아래와 같이 이용
mx = np.mean(x)
my = np.mean(y)
분모의 값을 구하기 위해 아래와 같이 작성
divisor = sum([(i - mx)**2 for i in x])
분자의 값을 구하기 위해 아래와 같이 작성
d = 0
for i in range(len(x)):
d += (x[i] - mx)*(y[i] - my)
최종적인 a 값은 a = divisor/d 시키기
b 값은 b = mean(y) - (mean(x) * a) 구하기 위해 아래와 같이 작성
b = my - (mx*a)
최종적인 식을 만드는 방법은
def check(tx):
ty = a*tx +b
return ty
check(15)
위와 같음으로 tx 안에 원하는 x 값(즉, 성적이 알고 싶은 공부 시간 값)을 입력하면 ty 값이 해당 공부 시간에 대해 나올만한 성적 값을 예측되어 들어갑니다.
실제로 계산이 잘 되었는지 확인해본 결과 :
위처럼 결과가 잘 나온 것을 확인할 수 있었으며 새로운 테스트 값에 대해서도 결과 값이 잘 나온 것을 확인할 수 있었습니다. 다만, 이 공식만으로는 여러 개의 입력을 처리하는 데에 있어 무리가 있습니다.
또한, 선을 그린 후에 이 선이 얼마나 잘 그려졌는지 평가하여 오차를 줄여가는 오차 평가 알고리즘으로는 평균 제곱근 오차라는 것이 있다. 이는 다음 글에서 알아보도록 하겠습니다.
위에 코드가 쓰인 풀 코드 :
import numpy as np
# 공부한 시간
x = [4, 9, 15, 20]
# 시간에 따른 성적
y = [60, 75, 86, 99]
mx = np.mean(x)
my = np.mean(y)
divisor = sum([(i - mx)**2 for i in x])
def top(x, mx, y, my):
d = 0
for i in range(len(x)):
d += (x[i] - mx)*(y[i] - my)
return d
dividend = top(x,mx, y, my)
a = dividend / divisor
b = my - (mx*a)
print("공부한 시간 : ", x)
print("공부한 시간에 따른 성적 : ", y)
print("a 기울기 : ", a)
print("y 기울기 : ", b)
print("최종적인 식은 : y = ", a,"* x + ", b)
def check(tx):
ty = a*tx +b
return ty
check(15)
print("테스트 x 값에 15를 대입할 경우 y 값은 ", check(15))
print("테스트 x 값에 5를 대입할 경우 y 값은 ", check(5))
감사합니다.
'IT' 카테고리의 다른 글
[모두의 딥러닝] 딥러닝 공부 4일차 - 경사 하강법 이론 (0) | 2021.04.02 |
---|---|
[모두의 딥러닝] 딥러닝 공부 3, 4일차 - 평균 제곱근 오차 이론 / 파이썬으로 구현 (0) | 2021.03.28 |
[모두의 딥러닝] 딥러닝 공부 1일차 - 머신러닝이란? 기존 프로그래밍과 차이점 / 딥러닝 코드 분석 (0) | 2021.03.21 |
[유니티] 스크립트로 텍스트 파일 생성 및 쓰기, 저장 / 파일 입출력 (0) | 2021.02.14 |
[html / css / javascript] 특정 요소 hover 시, 다른 요소, 태그 애니메이션 적용시키기 / css animation 예제 / css 다중 애니메이션 (0) | 2021.02.10 |
댓글