Linear Model (선형회귀)

ayleen·2022년 1월 24일
0

Linear Model

입력 특성에 대한 선형함수를 만들어 예측을 수행하는 모델
다양한 선형모델이 존재하며 분류와 회귀에 모두 사용 가능하다.

머신러닝의 가장 큰 목적은 실제 데이터를 바탕으로 모델을 생성해서 입력값을 넣었을 때 발생할 결과값을 예측하는 데에 있다.

이 때 우리가 찾아낼 수 있는 가장 직관적이고 간단한 모델인 선(line)을 이용해서 데이터와 비교해 해당 데이터를 가장 잘 설명할 수있는 선을 찾는 분석이 바로 선형회귀분석(Linear Regression)이다.

  • 결과 예측(추론) 속도가 빠르다.
  • 대용량 데이터에도 충분히 활용이 가능하다.
  • 특성이 많은 데이터 세트라면 훌륭한 성능을 낼 수 있다.
  • 특성이 적은 저차원 데이터에서는 다른 모델의 일반화 성능이 더 좋을 수 있다.
  • 복잡도를 제어할 방법이 없어서 과대적합이 되기 쉽다.(정규화를 통해 과대적합 제어)




예를 들어 아래와 같이 공부한 시간에 따른 성적 데이터가 있다고 가정했을 때,

만약 7시간을 공부한 사람의 성적을 예측하자고 하면 70점으로 예측이 가능 할 것이다.

위와 같은 직선 그래프를 그리는 함수는 'y = ax + b'이다.
기울기(a)와 절편(b)에 따라서 선의 모양이 정해진다.


실제로 분석하는 데이터의 특성의 개수에 따라 위와 같은 식으로 표현할 수 있다.

p : 특성 개수
w : 가중치(weight), 계수(coefficient), 학습이 되면서 예측이 잘 되는 방향으로 계속 바뀐다.
b : 절편(intercept), 편향(bias)
w파라미터 : model.coef
b파라미터 : model.intercept




MSE(평균제곱오차)

위와 같이 데이터들을 놓고 선을 그어 예측하면 모든 값을 정확히 예측할 수는 없다.
예측값들은 실제의 데이터와 약간의 차이가 발생하는데 손실(Loss)이라고 부른다.

위의 그림은 예측값을 기준으로 +방향 혹은 -방향으로 손실이 발생했다.
이 때 예측값과 실제 타깃 값의 차이를 줄이기 위해 오차를 구한다.
무수히 많은 데이터들의 오차를 모두 구해야하는데 이 오차들을 모두 더하는 과정을 거치게 된다. 말했던 것처럼 오차는 양수 혹은 음수 모두 나올 수 있는데, 그냥 모두 더하면 상쇠되어버린다(만약 오차가 -3, +3 이라면 더해서 0이됨). 그래서 음수를 없애기 위해 오차를 제곱해서 더해야한다.

이런 방식으로 손실을 구하는 것을 '평균제곱오차(Mean Squared Error, MSE)'라고 부른다.
(손실을 구하는 다른 방법으로는 제곱하지 않고 바로 평균을 구하는 평균절대오차MAE, MSE와 MAE를 절충한 후버손실Huber loss, 결정계수 coefficient of determination 등이 있다.)


평균제곱오차를 구하는 식이다.

H(x) : 예측값
y : 실제값
시그마 : 덧셈. i가 1부터 m까지 더하세요.
최종적으로 m으로 나눔(오차의 개수만큼 나눔) = 평균을 구한다 == 평균제곱오차(MSE)
→ 최소가 되어야한다(0으로 향해야함) = 예측값과 실제값의 차이가 0 = 모델이 실제값을 정확하게 예측
→ w값(가중치)이 계속 수정된다.
cost : 오차라고 생각하면 된다. 꼭 평균제곱오차만 cost라고 하는 것은 아니다.
평균제곱오차가 0에 가까워질수록 복잡해진다. 너무 0이면 일반화 할 수 없음.




평균제곱오차(MSE)가 최소가 되는 w와 b를 찾는 방법

1. 수학공식을 이용한 해석적 방법(Ordinary Least Squares)

2. 경사하강법(Gradient Descent Algorithm)




1. 수학공식을 이용한 해석적 방법


이런 공식이 있는데 볼 필요 없다.
LinearRegression클래스로 구현되어있다.




2. 경사하강법(Gradient Descent Algorithm)


말 그대로 경사를 하강해나가면서 최적의 w와 b를 찾아낸다.
컴퓨터는 경사가 완만한지 모르기 때문에 기울기를 계산한다.
기울기를 구해서 기울기가 낮은 쪽으로 계속 이동하여 값을 최적화 시키는 방법이다.

알파 = Learning rate = 학습률
경사를 하강할 때 얼마나 바꿔줄지 설정하는 하이퍼파라미터값이다.
값이 크면 보폭이 커서 일을 대충한다. 최적값을 찾지 못한다.
그렇다고 알파값을 작게 설정하면 최적의 값으로 수렴할 때 까지 시간이 너무 오래 걸린다. 최적값까지 도달하지 못하고 끝날수도 있다.





참고 https://hleecaster.com/ml-linear-regression-concept/
profile
asdf

2개의 댓글

comment-user-thumbnail
2022년 1월 25일

Weight bias cost loss는 절대 기억하세요

1개의 답글