Machine Learning/Tensorflow

13. 오차 산출

728x90

01. 1차함수와 선형회귀

- 기울기와 절편을 알면 독립변수인 x를 대입하여 종속 변수인 y값을 예측 할 수 있음.

1. 1차함수 그래프

   - 기본 공식: y = ax + b
   - a: 
기울기
   - x: 
데이터
   - b: y 
절편

2. 공부시간에 따른 성적의 예측

  . 공부시간 -> 시험 성적
          x             y
     
독립 변수  종속 변수
      
정의역       치역
    -----------   ----------
    10 
시간 ---> 70 
    20 
시간 ---> 74 
    36 
시간 ---> 76 
    50 
시간 ---> 82 
    80 
시간 ---> 92 

1) 공부한 시간과 중간고사 성적 데이터
    공부한 시간   2시간   4시간   6시간   8시간 →  x = [2, 4, 6, 8]
    
성적             81    93    91    97     y = [81, 93, 91, 97]

2) 
공부한 시간과 성적을 좌표로 표현

 

3) 선형회귀의 1차 함수 그래프의 표현: y = ax + b
    x: 
독립 변수 예) 공부시간
    y: 
종속 변수로 x 변수의 값에따라 결정됨 예) 성적 점수
    a 
직선의 기울기: x 값의 증가량 / y 값의 증가량, a가 크면 y 값이 높아짐.
    b: y 
축을 지나는 값인 'y 절편'이라고 함, x 0인 경우의 값,
       
초기값, 공부를 안해도 얻을 수 있는 기본 점수.

 

4) 선형회귀 모델 제작은 a, b 변수의 값을 찾아내어 독립변수 x에 대한 최적의 y 값을
   
산출하는 공식을 만드는 과정
   - 
선형회귀 모델: y = 3x + 76

02. 편차와 오차

- 편차: 평균으로부터의 차이
- 
오차: 예측한 값으로부터의 차이
- 
선형회귀의 구조상 오차가 존재 할 수 밖에 없음.

1. 평균 제곱근 오차(RMSE: Root Mean Square Error), 오차 평가 알고리즘의 이용

1) 오차 예측 값(성적) - 실제 값(성적)  

2) 오차의 제곱 합
    - 
오차의 합은 0이 발생함으로 제곱을하여 오차를 산출함(편차의 합은 0).

 3) MSE(Mean Squared Error: 평균 제곱 오차)
   - 
오차의 제곱의 합의 평균

 4) RMSE(Root Mean Squared Error: 평균 제곱근 오차)
    - 
오차가 제곱이 되어 있음으로 원래의 수의 비중으로 환원

2. 가설(가정) y = 3x + 76를 성적을 예측하기위한 모델로 사용함.

- y = 3x + 76을 이용한 결과를 1차 함수 그래프로 표현한 경우

3. 임의의 직선과 실제 값 사이의 거리

4. 기울기가 너무 큰 경우 오차도 큼

 

5. 기울기가 너무 작은 경우 오차도 큼

 

6. 오차의 실습

 /python/notebook/machine/basic/RMSE.ipynb
파이썬의 배열을 나타내는 list, tuple은 사용이 불편함.
- 
파이썬의 list NumPy library에서 배열 타입으로 변형하여 이용함.
- 
대용량 데이터의 경우 파이썬의 list보다 NumPy array가 속도가 빠름.

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/malgun.ttf").get_name()
# windows 10
# font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/malgunsl.ttf").get_name()
rc('font', family=font_name)           # 맑은 고딕 폰트 지정
plt.rcParams["font.size"] = 12         # 글자 크기
# plt.rcParams["figure.figsize"] = (10, 4) # 10:4의 그래프 비율
plt.rcParams['axes.unicode_minus'] = False  # minus 부호는 unicode 적용시 한글이 깨짐으로 설정

# Jupyter에게 matplotlib 그래프를 출력 영역에 표시할 것을 지시하는 명령
%matplotlib inline  

.....
data = [[0, 79],
        [2, 81],
        [4, 93],
        [6, 91],
        [8, 97]] # list
x = [i[0] for i in data] # 1차원 배열 형태의 list 추출, 공부 시간
print(type(x))
print(x)
y = [i[1] for i in data]  # 실제 성적
print(y)