Notice
Recent Posts
Recent Comments
Link
공부 기록
선형회귀 이론 및 실습 본문
선형회귀란 ?
1. 선형회귀란 무엇인가?
선형회귀는 하나 이상의 특성과 연속적인 타깃 변수 사이의 관계를 모델링 하는 것
연속적인 출력 값을 예측하는 것
특성이 하나인 선형 모델 공식
Y=W0+W1*X
where W0 : y축 절편, W1 : 특성의 가중치목적 : 특성과 타깃 사이의 관계를 나타내는 선형 방정식의 가중치(W)를 학습하는 것.
2. 선형회귀 모델의 훈련과 비용함수
모델의 훈련이란
- 모델이 훈련 데이터에 잘 맞도록 모델 파라미터를 설정하는 것
- 모델이 훈련 데이터에 얼마나 잘 들어맞는지 측정해야 함.
모델 훈련에 필요한 비용함수 종류
- MSE(Mean Squared Error)
- 회귀 모델의 주요 손실 함수
- 참값과 예측값의 차이인 오차들의 제곱 평균으로 정의
- 제곱을 해주기 때문에 이상치에 민감
- MAE(Mean Absolute Error)
- 참 값과 예측값의 차이인 오차들의 절대값 평균
- MSE보다 이상치에 덜 민감
- RMSE(Root Mean Squared Error)
- MSE에 root를 취해준 것
- 참값과 비슷한 값으로 변환하기 때문에 해석이 쉬워짐.
- MSE(Mean Squared Error)
** 그럼에도 불구하고 보통 quadratic(2차 곡선형태)형태의 미분 편의성이 좋기 때문에, 회귀 모형의 비용함수로 MSE를 많이 사용한다. **
3. 선형 회귀 모델의 최적화 방법
- 정규방정식
- 비용 함수를 최소화하는 세타값을 찾기 위한 해석적 방법
- 정규방적식은 n개의 특성수에 따라서 (n+1)*(n+1)의 X XT역행렬을 계산한다.
- 이 말은 특성의 수가 많아지면 정규방정식의 구현속도가 느려진다는 의미.
- 하지만 다행히도 모델의 복잡도가 훈련 세트의 샘플 수와 특성 수에 선형적으로 증가한다.
- 메모리 공간이 충분하다면 큰 훈련 세트도 효율적으로 처리 가능
- 비용함수(MSE)를 w에 대해 미분을 하면 아래와 같은 식이 나오게 된다.
Θ=(X^(T) X)^(-1)X^(T)Y
x데이터가 많아지고 특성 수가 많아지면 행렬을 연산하는 데 있어 속도가 느려진다.
실습을 통해 Normal equation식에 대해서 알아보자.
import matplotlib.pyplot as plt
import numpy as np
x=2*np.random.rand(100,1) # 0~1 사이의 균일분포 = >shape : 100*1 그런데 여기서 2배했으므로 0~2 사이임.
y=4+3*x+np.random.randn(100,1) # normal 분포 mu=0, var(분산)=1 shape : 100*1 noise term
plt.scatter(x,y)
plt.show()
위와 같은 그래프를 얻을 수 있다.
그 뒤, 최적의 theta값을 찾아보면,
x_b=np.c_[np.ones((100,1)),x]
theta_best=np.linalg.inv(x_b.T.dot(x_b)).dot(x_b.T).dot(y) #normal equation 연산을 한 것과 같다.
theta_best
최적의 theta 값은 다음과 같이 나온다.
이 때, 3.97은 예측값이고, 3.00은 기울기 값이다.
그런데 이것이 원래의 목적함수 4, 3과 완전히 같지 않은 이유는 noise term을 추가했기 때문이다.
이를 활용하여 새로운 값을 넣어서 예측하고 그래프를 그려보겠다.
x_new=np.array([[0],[2]]) #x에 0, x에 2를 넣는다는 의미
x_new_b=np.c_[np.ones((2,1)),x_new] #데이터를 두개 넣었으므로 2 by 1
prediction=x_new_b.dot(theta_best)
prediction
plt.plot(x_new,prediction,"r-")
plt.plot(x,y,'b.')
plt.axis([0,2,0,15])
plt.show()