본문 바로가기
데이터분석 공부하기

선형 회귀

by 고공이 2022. 3. 17.

해당 글은 코드잇에서 공부한 내용을 정리한 글입니다.

 

1. 선형회귀 & 용어

: 데이터를 가장 잘 대변해 주는 선을 찾아내는 방법입니다. 이 데이터에 가장 적절한 하나의 선을 찾아내는 것입니다.

 

이 최적선을 이용해 새로운 입력 변수에 대한 목표 변수를 예측할 수 있습니다.

 

위 사진처럼 집 크기가 주어졌을 때, 선형회귀식을 이용해서 집 값을 예측하는 것입니다.

 

2. 가설 함수

그러면 최적선을 찾아내기 위해 다양한 함수를 시도해 봐야 하는데 우리가 시도하는 이 함수 하나하나를 '가설 함수'라고 부릅니다.

y=ax+b

형태로 표현됩니다.

 

결국 계수 a와 상수 b를 찾아내야 하는 게 우리의 목표인 셈이죠.

 

가설 함수 표현법 수식으로는 보통 이렇게 표현합니다.

 

그렇다면 저희 목표를 다시 정리하자면 가장 적절한 세타 값을 찾아내야 합니다.

 

 

3. 평균 제곱 오차 MSE, 평균 제곱근 오차 RMSE

평균 제곱 오차 MSE

:실 데이터들과 가설 함수가 평균적으로 얼마나 떨어져 있는 지 나타내는 위한 하나의 방식입니다.

 

가설 함수가 얼마나 좋은지 평가하는 방법으로 그중 선형 회귀에서 가장 많이 쓰입니다.

평균 제곱 오차, 영어로는 mean squared error. 앞글자만 따서 MSE입니다.

 

평균 제곱 오차가 크다는 건 가설 함수와 데이터들 간의 오차가 크다는 얘기입니다.

그 가설 함수는 데이터들을 잘 표현해 내지 못했다는 것을 알 수 있습니다.

 

제곱을 하는 이유

- 오차가 양수일 때도 있고, 음수일 때도 있습니다. 

: 이를 똑같이 취급해줘야하기 때문에 제곱을 해서 통일을 하는 것입니다.

- 오차가 커질수록 더 부각시키기 위해서입니다.

: 오차가 2면 제곱을 했을 때 4이고, 오차가 10이면 제곱을 했을 때 100입니다. 오차는 8 차이가 나지만 제곱의 차이는 96 차이가 납니다. 더 큰 오차에 대해서는 큰 페널티를 주기 위해서입니다.

 

 

평균 제곱근 오차 RMSE

: RMSE는 MSE에 루트를 씌운 것입니다.

 

모델이 얼마나 좋은지 평가하는 방법들은 많습니다.

그중 선형 회귀에서 많이 쓰이는게 평균 제곱근 오차, 영어로는 root mean square error, RMSE입니다.

 

루트를 하는 이유는 간단합니다.

예를 들어 집 가격을 예측한다고 할 때, 목표 변수의 단위는 '원'입니다. 그런데 오차 제곱을 하면 '원 제곱'이 되어 별로 와 닿지 않는 단위입니다. 그래서 마지막에 루트를 해줘서 다시 단위 '원'으로 만들어 주는 것입니다.

 

 

4. 손실 함수

: 어떤 가설 함수를 평가하기 위한 함수

손실 함수의 아웃풋이 작을수록 가설 함수의 손실이 적기 때문에 더 좋은 가설이라고 할 수 있습니다.

 

선형회귀의 경우 평균 제곱 오차가 손실 함수의 아웃풋입니다.

그래서 특정 가설 함수의 MSE가 크면 이 손실 함수의 아웃풋이 크다는 것이고, 그러면 손실이 크기 때문에 안 좋은 가설 함수라고 하는 것입니다.

 

 

5. 경사 하강법 vs 정규 방정식

그럼 손실 함수의 아웃풋을 줄이기 위해 전략적인 방법이 필요합니다.

그 중 선형회귀에서 사용하는 방법이 경사하강법입니다. 

 

경사하강법 공식(세타 업데이트 공식)

이를 이용해서 세타_0과 세타_1를 반복적으로 업데이트하면 결국에는 손실을 최소화하는 최적선을 구할 수 있습니다.

 

여기서 두 변수를 업데이트할 때,

이 부분은 모든 데이터에 대해서 i=1부터 m까지, 예측값과 실제 목표 변수의 차이를 사용합니다.

이를 편의상 error라고 부릅니다.

 

그렇다면 저렇게 복잡하게 식으로 보는 것보다 다음과 같이 정리할 수 있습니다.

 

여기서 알파는 학습률을 말합니다. 

알파는 경사를 내려갈 때마다 얼마나 많이 그 방향으로 갈 건지 결정하는 변수입니다.

이것도 모델을 학습시킬 때 조절을 해줘야 합니다.

 

그래서 이 학습률 알파를 잘 못 고른다면 문제점이 생깁니다.

 

- 학습률이 너무 큰 경우

- 학습률이 너무 작은 경우

 

일반적으로 1.0~0.0 사이의 숫자로 정합니다. 

보통 1.0, 0.1, 0.01, 0.001 또는 0.5, 0.05, 0.005를 많이 씁니다.

여러 개를 실험해보면서 경사 하강을 제일 적게 하면서 손실이 잘 줄어드는 학습률을 선택합니다.

 

정규 방정식

: 손실함수의 기울기가 0이 되는 지점(세타 값). 방정식을 통해 극소점을 찾는 방법.

 

이 식의 X, y를 대입하면 됩니다.

 

 

이 식을 도출하기 위해서는 선형대수학과 미분이 꽤 많이 사용됩니다. 추후에 작성해보도록 하겠습니다.

 

 

경사하강법과 정규 방정식의 비교

경사 하강법 정규 방정식
적합한 학습률 알파를 찾거나 정해야 한다. 학습률 알파를 정할 필요가 없다.
반복문을 사용해야 한다. 한 단계로 계산을 끝낼 수 있다.
입력 변수의 개수 n이 커도 효율적으로 연산할 수 있다. 입력 변수의 개수 n이 커지면 커질수록 비효율적이다.
(행렬 연산을 하는 비용이 경사 하강법보다 크다.)
  역행렬이 존재하지 않을 수도 있다.
(하지만 pseudo inverse를 이용해 다르게 계산하는 방법이 있기 때문에 큰 문제는 안된다.)

 

 

 

정리

  • 여러 가설 함수 중 더좋은, 최적선을 찾아야 합니다. 즉, 최적의 세타를 찾아야합니다.
  • 이 과정에서 좋은 가설 함수를 평가하는 방법은 손실함수 값이 적어야 합니다.
  • 손실함수 값이 적기 위해서는 손실 함수 아웃풋인 MSE가 작아야 합니다.
  • MSE를 이용하는 경사하강법이나 정규방정식을 사용해 계속해서 세타를 업데이트를 합니다.

'데이터분석 공부하기' 카테고리의 다른 글

로지스틱 회귀  (0) 2022.03.21
다항 회귀  (0) 2022.03.17
물리 삭제 vs 논리 삭제  (0) 2021.12.18
카디널리티와 ERM  (0) 2021.12.05
MySQL 데이터 타입(Data type)  (0) 2021.11.21

댓글