본문 바로가기
파이썬 (Python)/딥러닝 (Deep Learning)

Python 딥러닝 선형 회귀 평균 제곱 오차

by ★√★ 2021. 6. 5.

안녕하세요 이번 포스팅은 선형 회귀 방법을 이용하기 위한 평균 제곱 오차에 대해서 설명 드리도록 하겠습니다. 평균 제곱 오차의 경우에는 딥러닝을 위해서 오차를 구해야 하는데 이때 사용하는 방식이라고 생각하시면 됩니다. 

 

평균-오차-평균법
평균-오차-제곱법

 

평균 제곱 오차

 

: 일단 저희가 모델을 적용을 할 때 기울기와 y 절편을 구해야 합니다. 그런데 이번 포스팅에서 설명 드린 최소 제곱법으로 하면 임의 기울기와 y절편을 적용하지 않아도 됩니다. 하지만 이럴 경우에는 평균적인 선형의 직선을 만드는 모델을 만들 수 있습니다. 즉 특이 케이스의 경우에는 적용하기 힘든 모델이 됩니다.

 

▼ 최소 제곱법 관련해서는 아래 포스팅을 보고 오시면 더 이해가 빠르실겁니다. 

 

 

Python 딥러닝 선형 회귀 최소 제곱법 구현 해보기

안녕하세요 이번 포스팅은 딥러닝 선형 회귀 최소 제곱 법에 대해서 작성하도록 하겠습니다. 최소 제곱 법은 기울기와 y의 절편을 각 항목의 평균을 이용해서 구하는 방식입니다. 선형 회귀 최

davey.tistory.com

 

 이번에 설명 드리는 것은 선형적인 모델을 만드는 게 아니고 오차를 어떻게 측정할 수 있는지에 방법이니 이전 딥러닝 최적의 모델을 구하는 과정에서 중간과정이라고 생각하시면 됩니다. 

 

 

평균 제곱 오차 코드 구현

 

: 평균 제곱 오차를 설명하기 위한 코드를 구현해보도록 하겠습니다. 여기에서 평균 제곱이라는 이름에서 알 수 있듯이 오차를 제곱하는 것입니다. 이는 +, - 의 경우에 서로 감각이 되기 때문에 정확히 오차가 얼마나 나는지를 측정하기 힘듭니다. 하지만 제곱을 하게 되면 그 팩트 그대로 나오면 코드를 구현한 개수 대로 나눠줌으로써 오차가 평균적으로 얼마나 나오는지에 대해서 확인할 수 있습니다. 정확한 오차는 결과값에서 루트 2로 꺼꾸로 계산을 하면 정확한 평균 오차가 나올 겁니다. 그런데 평균 오차에 대해서 정확히 구한다기 보다는 오차를 줄어가는 과정에서 사용하는 코드라고 생각하시면 이해가 더 쉬우실 겁니다. 

 

▼ 그럼 평균 제곱 오차 코드를 구현하기 위해서 최소 제곱법에서 사용한 코드를 이용해서 구현해보도록 하겠습니다. 아래는 필요한 라이브러리와 Souce Data를 구현한 코드입니다. 

# 필요한 라이브러니는 numpy만 필요하므로 이것만 선언
import numpy as np

# assign_value1는 임의의 기울기, assign_value2는 임의의 y절편입니다.
assign_value1 = 5
assign_value2 = 50

# 주당 공부시간과 수학성적의 리스트입니다.
T_W = [10, 20, 30, 40,50]
Math_Score = [80, 85, 70, 99, 90]

 

▼  위의 코드를 구현을 했으면 이 Source Data를 이용해서 평균 오차 제곱을 구하는 코드를 구현해보도록 하겠습니다.

 

 오차라는 것은 기존에 수치에서 측정된 값을 빼주면서 생성되는 것입니다. 이것을 제곱을 하니 숫자 앞에 붙는 부호인 +,- 가 의미가 없는 거죠. 코드를 구현하면 아래와 같습니다. 

# 임의로 선언한 기울기와 y절편의 결과 값을 구하는 함수
def assign_value_result (T_W):
    return assign_value1 * T_W + assign_value2

# 임의로 선언한 기울기와 y절편의 결과 값을 기존 수학 점수로 빼는 함수
def mse (original_value, assign_base_value):
    return ((original_value - assign_base_value)**2).mean()

# 임의로 선언한 기울기와 y절편의 결과 값을 구하는 함수를 구동하는 선언 함수
def mse_result (a,b):
    return mse (np.array(a), np.array(b))

# 임의로 선언한 기울기와 y절편의 결과 값을 넣는 임의의 리스트를 선언
assign_value_list1 = []

# 주당 공부 시간, 수학 점수, 임의의 기울기와 Y절편 적용 시 예측 점수를 출력함


for i in range(len(T_W)):
    assign_value_list1.append(assign_value_result(T_W[i]))
    print("주당 공부 시간 = %.f, 수학 점수 = %.f, 임의의 기울기와 Y절편 적용 시 예측 점수 = %.f" % (T_W[i], Math_Score[i], assign_value_result(T_W[i])))
    # print(i)

# 총 오차의 평균값을 출력
print("오차값 :" , mse_result(Math_Score, assign_value_list1))

 

 위 코드를 실행을 해보면 터무니 없게 높은 오차값이 나오게 됩니다. 왜냐하면 기울기와 y절편은 정말 제대로 생각안하고 임의의 값을 집어 넣었기 때문입니다. 어떤 분은 계산이나 근접할 거 같은 생각으로 넣어야 되는데 저는 그냥 생각나는 숫자를 넣었습니다. 오차값이 제곱의 평균값이이기 때문에 더 크게 느껴지는 거 같습니다. 

 

주당 공부 시간 = 10, 수학 점수 = 80, 임의의 기울기와 Y절편 적용 시 예측 점수 = 100
주당 공부 시간 = 20, 수학 점수 = 85, 임의의 기울기와 Y절편 적용 시 예측 점수 = 150
주당 공부 시간 = 30, 수학 점수 = 70, 임의의 기울기와 Y절편 적용 시 예측 점수 = 200
주당 공부 시간 = 40, 수학 점수 = 99, 임의의 기울기와 Y절편 적용 시 예측 점수 = 250
주당 공부 시간 = 50, 수학 점수 = 90, 임의의 기울기와 Y절편 적용 시 예측 점수 = 300
오차값 : 17685.2

Process finished with exit code 0

 

  위의 결과값을 가지고 경사 하강법을 통해서 최적의 기울기와 y절편를 구하면서 오차값을 줄여가는 것입니다. 그럼 평균 오차 제곱법에 대해서는 여기까지 하도록 하겠습니다. 

 

 이상입니다. 지금까지 선형 회귀 방법을 이용하기 위한 평균 제곱 오차에 대해서 포스팅을 작성하였습니다. 저도 처음에는 제가 코드를 잘못 설정한 거 같았는데 생각하지 않고 그냥 아무 숫자만 넣으니까 이렇게 오차가 크게 나온 거 같습니다. 계속 딥러닝 공부를 하다보면 이런 임의의 숫자에 대한 감도 생긴다고 하니, 참조 하시면 될 거 같습니다. 그럼 딥러닝 공부하시는데 제 포스팅이 조금이나마 도움이 되었으면 합니다. 그럼 이만 마무리 하도록 하겠습니다. 감사합니다. 

 

관련 다른 글

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab