선형 회귀(linear regression)
가장 훌륭한 예측선 긋기
단순 선형 회귀(simple linear regression): 하나의 x만으로 y값을 설명 가능
y = ax + b
다중 선형 회귀(multiple linear regression): y를 설명하기 위해 여러 x값이 필요
최소 제곱법(method of least square)
a,b를 바로 구할 수 있다.
a = (x편차) * (y편차)의 합 / x편차의 합의 제곱
b = y의 평균 - (x평균 * 기울기a)
이를 통해 x에 대한 일차식을 구하면 이 직선이 바로 오차가 가장 적고 좌표의 특성을 가장 잘 나타내는 예측 직선
코딩으로 최소 제곱법 구현하기
#ch3 최소제곱법
import numpy as np
x = [2,4,6,8]
y = [81, 93, 91, 97]
mx = np.mean(x)
my = np.mean(y)
# 분모: x편차의 제곱 구하기
divisor = sum([(mx-i)**2 for i in x])
# 분자: x편차*y편차
def top(x,mx,y,my):
d = 0
for i in range(len(x)):
d += (x[i] - mx)*(y[i]-my)
return d
divided = top(x, mx, y, my)
#기울기 a
a = divided / division
# y절편 b
b = my -(mx*a)
최소 제곱법으로 구한 직선이 얼마나 잘 그려졌는지 조금씩 고쳐가며 평가할 수 있다.
가장 많이 사용하는 오차 평가 방법: 평균 제곱근 오차
평균 제곱 오차(Mean Squared Error, MSE)
(오차 제곱의 합)/(총 개수)
평균 제곱근 오차(Root Mean Squared Error, RMSE)
평균 제곱 오차의 제곱근
우리는 평균 제곱근 오차가 가장 작은 선을 찾아야 한다.
선형 회귀는 임의의 직선을 구하고, 평균 제곱근 오차를 구하고 가장 작게 만들어주는 a,b를 찾는 작업이다
import numpy as np
#평균제곱근오차 구현
#기울기 a, 절편 b값 저장하기
ab = [3, 76]
data = [[2,81],[4,93],[6,91],[8,97]]
x = [i[0] for i in data]
y = [i[1] for i in data]
#내부함수 predict 생성하고 일차방정식 구현하기
def predict(x):
return ab[0]*x + ab[1]
#평균제곱근공식함수
def rmse(p, a):
return np.sqrt(((p-a)**2).mean()) #예측값 p 실제값 a
# rmse 함수에 데이터를 대입해 최종값 구하는 함수
def rmse_val(predict_result, y):
return rmse(np.array(predict_result), np.array(y))
predict_result = [] #predict함수의 결과값이 저장되는 함수
for i in range(len(x)):
predict_result.append(predict(x[i]))
print("공부한 시간={}, 실제 점수={}, 예측 점수={}".format(x[i], y[i], predict(x[i])))
#최종 rmse 출력
print("최종 rmse값:{}".format(str(rmse_val(predict_result,y))))
'AI Theory > key concept of AI' 카테고리의 다른 글
오차 역전파(back propagation) (0) | 2022.07.18 |
---|---|
[모두의딥러닝] 퍼셉트론 (0) | 2022.07.17 |
[파이썬으로 캐글뽀개기] 캐글에서 사용되는 머신러닝 알고리즘 (0) | 2022.07.04 |
[파이썬으로 캐글뽀개기] pandas와 데이터 전처리 (0) | 2022.06.23 |
[파이썬 캐글뽀개기] Numpy (0) | 2022.06.21 |