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)