이번 포스팅에서는 다양한 회귀 모델들에 대해 설명하고자 한다.
자, 그럼 시작해보겠다.
▶ 선형 회귀
◆ 선형 회귀 모델의 예측
- 선형 회귀 모델의 예측값 y_hat은 다음과 같이 나타낼 수 있다.
- 통계학에서는 단순 선형 회귀와 다중 선형 회귀를 구분해서 배웠는데, 머신러닝에서는 어차피 단순 선형 회귀를 쓸 일은 거의 없으니 다중 선형 회귀로 통합시켜서 설명을 해놓은 듯 싶다.
- 위 식을 아래와 같이 벡터 형태로 쓸 수도 있다.
※ 위의 벡터 형태의 식이 어떻게 나왔는지에 대한 설명을 위해, 아래 이미지 2개를 첨부하였다.
(첨부된 이미지를 보면, 해당 식이 어떻게 나왔는지 이해할 수 있을 것이다)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
- 우리의 목표는 회귀 모델의 성능 측정 지표로 많이 사용되는 RMSE(평균 제곱근 오차)를 최소화하는 theta 값을 찾는 것이다.
- RMSE는 MSE의 제곱근과 동일하므로, MSE를 최소화하는 theta 값을 찾는 것과 동일하다.
◆ 정규방정식
- 위 비용 함수(여기서는 MSE)를 최소화하는 theta 값을 찾아주는 방법을 정규방정식이라고 한다.
※ 정규방정식에 대한 증명은 최소제곱법(LSE)을 통해 할 수 있다.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
- m < n이거나 어떤 특성이 중복되어 행렬 X_transpose * X 의 역행렬이 없다면(즉, 특이 행렬이라면) 정규방정식이 작동하지 않는다. 이러한 경우 유사역행렬을 사용할 수 있다.
- 정규방정식과 다르게 유사역행렬은 항상 구할 수 있다.
- 유사역행렬은 특잇값 분해(SVD)라는 표준 행렬 분해 기법을 사용해서 계산된다.
- SVD는 훈련 세트 행렬 X를 3개의 행렬 곱셈 U * Sigma * V^T 로 분해한다.
- 따라서 유사역행렬은 X+ = V * Sigma+ * U^T 로 계산된다.
※ 유사역행렬과 SVD에 대한 이해를 하려면, 선형대수 지식이 필요하다.
해당 내용에 대해 자세히 알고 싶다면, 아래의 링크를 참고해서 공부하도록 하자!! ^^
https://darkpgmr.tistory.com/106
[선형대수학 #4] 특이값 분해(Singular Value Decomposition, SVD)의 활용
활용도 측면에서 선형대수학의 꽃이라 할 수 있는 특이값 분해(Singular Value Decomposition, SVD)에 대한 내용입니다. 보통은 복소수 공간을 포함하여 정의하는 것이 일반적이지만 이 글에서는 실수(real
darkpgmr.tistory.com
◆ 계산 복잡도
- 정규방정식은 계산 복잡도가 일반적으로 O(n^2.4)에서 O(n^3) 사이이다.
- 사이킷런의 LinearRegression 클래스가 사용하는 SVD 방법은 약 O(n^2)이다.
- 두 방법 모두 특성 수가 많아지면 매우 느려진다. 이러한 경우 사용하는 방법이 바로 경사 하강법이다.
▶ 경사 하강법 → 굉장히 중요한 개념이므로 정확하게 이해하고 넘어가자!!
- 비용 함수를 최소화하기 위해 반복해서 파라미터를 조정해가는 방법이다.
- 위 그림을 보면 알 수 있듯이, theta를 임의의 값으로 시작해서(무작위 초기화) 한 번에 조금씩 비용 함수가 감소되는 방향으로 진행하여 알고리즘이 최솟값에 수렴할 때까지 점진적으로 향상시킨다.
- 경사 하강법에서 중요한 파라미터는 스텝의 크기, 즉 학습률(learning rate)이다.
- 학습률(학습 스텝 크기)는 비용 함수의 기울기에 비례하며, 파라미터가 최솟값에 가까워질수록 점차 줄어든다.
- 학습률이 너무 작으면, 알고리즘이 수렴하기 위해 반복을 많이 진행해야 하므로 시간이 오래 걸린다.
- 학습률이 너무 크면, 알고리즘을 더 큰 값으로 발산하게 만들어 적절한 해법을 찾지 못할 수 있다.
- 그러나 경사 하강법은 theta를 임의의 값으로 시작(무작위 초기화)하기 때문에 다음과 같은 문제점들이 발생한다.
- 알고리즘이 왼쪽에서 시작하면, 전역 최솟값(global minimum)보다 덜 좋은 지역 최솟값(local minimum)에 수렴한다.
- 반대로 알고리즘이 오른쪽에서 시작하면, 평탄한 지역을 지나기 위해 오랜 시간이 걸리고 일찍 멈추게 되어 전역 최솟값에 도달하지 못한다.
- 경사 하강법을 사용할 때는 반드시 모든 특성이 같은 스케일을 갖도록 만들어야 한다.
- 사이킷런의 StandardScaler, MinMaxScaler, RobustScaler 등을 사용할 수 있다.
- 그렇지 않으면 최솟값으로 수렴하는 데 훨씬 오래 걸린다.
◆ 배치 경사 하강법
- 전체 데이터 셋에 대한 에러를 구한 뒤, 기울기를 한 번만 계산하여 모델의 파라미터를 업데이트하는 방법이다.
- <장점>
- 전체 학습 데이터 셋에 대해 한 번의 업데이트가 이루어지기 때문에, 전체적인 연산 횟수가 적다.
- 전체 데이터 셋에 대해 Gradient를 계산하여 진행하기 때문에, 최솟값으로의 수렴이 안정적으로 진행된다.
- <단점>
- 한 스텝에 모든 학습 데이터를 사용하기 때문에 시간이 오래 걸린다.
- 지역 최적화(local optimal) 상태가 되면 빠져나오기 힘들다.
- 모델 파라미터의 업데이트가 이루어지기 전까지 모든 학습 데이터 셋에 대해 저장해야 하기 때문에, 많은 메모리가 필요하다.
- <경사 하강법의 스탭>
※ 적절한 학습률(learning rate)을 찾으려면 어떻게 해야 할까?
- 그리드 탐색을 사용하면 된다.
- 한 가지 신경써야 할 부분은 그리드 탐색에서 수렴하는 데 너무 오래 걸리는 모델을 막기 위해 반복 횟수를 제한해야 한다는 것이다.
- 그렇다면 반복 횟수는 어떻게 지정할까?
- 반복 횟수를 아주 크게 지정하고 gradient 벡터가 아주 작아지면, 즉 벡터의 길이가 허용 오차보다 작아지면 경사 하강법이 최솟값에 도달한 것이므로 알고리즘을 중지하게끔 하면 된다.
◆ 확률적 경사 하강법 → ex) 사이킷런의 SGDClassifier 와 SGDRegressor
- 매 스텝에서 한 개의 샘플을 무작위로 선택하고, 그 하나의 샘플에 대한 gradient를 계산하는 방법이다.
- <장점>
- 배치 경사 하강법보다 알고리즘이 훨씬 빠르다.
- 메모리 차지 비중이 적다.
- <단점>
- 비용 함수가 최솟값에 도달할 때까지 위아래로 요동치면서 평균적으로 감소하기 때문에, 배치 경사 하강법보다 훨씬 불안정하다.
- 따라서 알고리즘이 멈출 때, 좋은 파라미터가 구해지겠지만 최적치는 아니다.
- 정리하면 확률적 경사 하강법의 무작위성은 지역 최솟값(local minimum)에서 탈출시켜줘서 좋지만, 알고리즘을 전역 최솟값(global minimum)에 다다르지 못하게 한다는 점에서는 좋지 않다.
- 이러한 문제점을 해결하기 위한 한 가지 방법은 학습률을 점진적으로 감소시키는 것이다.
- 시작할 때는 학습률을 크게 하고(수렴을 빠르게 하고 지역 최솟값에 빠지지 않게 한다), 점차 작게 줄여서 알고리즘이 전역 최솟값에 도달하게 하는 것이다.
<참고>
- 학습률(learning rate)이 너무 빨리 줄어들면, 지역 최솟값(local minimum)에 갇히거나 최솟값까지 가는 중간에 멈춰버릴 수 있다.
- 학습률(learning rate)이 너무 천천히 줄어들면, 오랫동안 최솟값 주변을 맴돌거나 훈련을 너무 일찍 중지해서 지역 최솟값(local minimum)에 머무를 수 있다.
◆ 미니배치 경사 하강법
- 미니배치라 부르는 임의의 작은 샘플 세트에 대해 gradient를 계산하는 방법이다.
- <장점>
- 행렬 연산에 최적화된 하드웨어, 특히 GPU를 사용해서 향상된 성능을 보인다.
- 미니배치를 어느 정도 크게 하면, 알고리즘은 파라미터 공간에서 SGD보다 덜 불규칙하게 움직인다.
- 즉, 미치배치 경사 하강법이 SGD보다 최솟값에 더 가까이 도달하게 될 것이다.
- <단점>
- SGD보다 지역 최솟값(local minimum)에서 빠져나오기는 더 힘들 것이다.
지금까지 정리한 내용들을 요약하면 다음과 같다.
알고리즘 | m(샘플 수)이 클 때 | 외부 메모리 학습 지원 | n(특성 수)이 클 때 | 하이퍼 파라미터 수 | 스케일 조정 필요 여부 | 사이킷런 |
정규방정식 | 빠름 | x | 느림 | 0 | x | N/A |
SVD(특이값 분해) | 빠름 | x | 느림 | 0 | x | LinearRegression |
배치 경사 하강법 | 느림 | x | 빠름 | 2 | o | SGDRegressor |
확률적 경사 하강법 | 빠름 | o | 빠름 | >= 2 | o | SGDRegressor |
미니배치 경사 하강법 | 빠름 | o | 빠름 | >= 2 | o | SGDRegressor |
▶ 다항 회귀 → 통계학에서는 비선형 모델로 구분되는데, 머신러닝에서는 선형 모델로 분류가 되어있네...?
- 비선형 데이터를 학습하는 데 선형 모델을 사용할 수 있다.
- 각 특성의 거듭제곱을 새로운 특성으로 추가하고, 추가된 특성을 포함한 데이터 셋에 선형 모델을 훈련시키는 것이다.
- 이런 기법을 다항 회귀라고 한다.
- 사이킷런의 PolynomialFeatures를 사용하면 된다.
- 특성이 여러 개일 때 다항 회귀 모델을 사용하면, 특성 사이의 관계를 찾을 수 있다.
- PolynomialFeatures가 degree 옵션을 사용하여, 주어진 차수까지 특성 간의 모든 교차항을 추가하기 때문이다.
- 단, 특성 수가 교차항을 포함해 엄청나게 늘어날 수 있으니 주의해야 한다!!
▶ 학습 곡선
- 학습 곡선은 모델의 일반화 성능을 추정하기 위한 방법 중 하나이다.
- 이 그래프는 훈련 세트와 검증 세트의 모델 성능을 훈련 세트 크기의 함수로 나타낸다.
1. 단순 선형 회귀 모델(직선)의 학습 곡선
- 두 곡선이 수평한 구간을 만들고 꽤 높은 오차에서 매우 가까이 근접해있다.
- 이는 과소적합 모델의 전형적인 학습 곡선 모습이다.
2. 다항 회귀 모델의 학습 곡선
- 훈련 데이터의 오차가 앞서 확인한 단순 선형 회귀 모델보다 훨씬 낮다.
- 또한 두 곡선 사이에 공간이 존재하는데, 훈련 데이터에서의 모델 성능이 검증 데이터에서보다 훨씬 낫다는 것을 의미한다. 즉, 과대적합되었다는 말이다.
- 하지만 더 큰 훈련 세트를 사용하면, 두 곡선 사이의 공간이 점점 가까워질 것이다.
- 이처럼 과대적합 모델을 개선하는 한 가지 방법은, 검증 오차가 훈련 오차에 근접할 때까지 더 많은 훈련 데이터를 추가하는 것이다.
※ 편향/분산 트레이드 오프
- 모델의 일반화 오차는 세 가지 다른 종류의 오차의 합으로 표현할 수 있다.
1. 편향
- 일반화 오차 중에서 잘못된 가정으로 인해 발생
- ex) 데이터가 실제로는 2차인데, 선형으로 가정하는 경우 → 과소적합
2. 분산
- 훈련 데이터에 있는 작은 변동에 모델이 과도하게 민감하기 때문에 발생
- ex) 자유도가 높은 모델(고차 다항 회귀 모델...)이 높은 분산을 가지기 쉬우므로, 훈련 데이터에 과대적합되는 경향이 있다.
3. 줄일 수 없는 오차
- 데이터 자체에 있는 잡음 때문에 발생
- 이 오차를 줄일 수 있는 유일한 방법은 데이터에서 잡음을 제거하는 것
- ex) 고장 난 센서 같은 데이터 소스를 고치거나 이상치를 감지해서 제거
▶ 규제가 있는 선형 모델
- 과대적합을 감소시키는 좋은 방법은 모델을 규제하는 것이다.
- ex) 다항 회귀 모델을 규제하는 간단한 방법은 다항식의 차수를 감소시키는 것이다.
- 선형 회귀 모델에서는 보통 모델의 가중치를 제한함으로써 규제를 가한다.
1. Ridge 회귀
- 선형 회귀 모델에 L2 규제가 추가된 모델이다.
- 하이퍼 파라미터 alpha를 통해 모델을 얼마나 많이 규제할지 조절한다.
- alpha = 0 이면, Ridge 회귀는 선형 회귀와 동일해진다.
- alpha가 매우 크면, 모든 가중치가 거의 0에 가까워지고 결국 데이터의 평균을 지나는 수평선이 된다.
- alpha가 무한대라면 비용 함수식은 너무 커지게 되므로, 회귀 계수 theta 값을 0으로 만들어야 Cost가 최소화되는 비용 함수 목표를 달성할 수 있기 때문이다.
- 아래의 그림을 보면, alpha를 증가시킬수록 직선에 가까워지는 것을 볼 수 있다. (즉, 모델의 분산은 줄지만 편향은 커진다)
alpha 감소 | ← ← ← . . . → → → | alpha 증가 |
RSS(theta) 최소화 | ← ← ← . . . → → → | 회귀 계수 theta 감소 |
- Ridge 회귀는 입력 특성의 스케일에 민감하므로, 수행하기 전에 데이터의 스케일을 맞춰주는 작업이 중요하다.
- 이는 규제가 있는 모델들에 대해서 일반적으로 진행해주는 작업이다.
- Ridge 회귀를 계산하기 위해 정규방정식 또는 경사 하강법을 사용할 수도 있다.
※ 교재에서 사이킷런에서 정규방정식을 사용한 Ridge 회귀를 적용할 때, Cholesky Decomposition에 대한 개념이 나온다. 하지만 Cholesky Decomposition와 관련된 내용은 어렵기 때문에, 일단은 이런게 있구나 정도만 하고 넘어가자!!
(대학원에서 전공으로 배우는 걸 교재에는 아무렇지도 않게 써놨네...)
2. Lasso 회귀
- 선형 회귀 모델에 L1 규제가 추가된 모델이다.
- Lasso 회귀의 중요한 특징은 덜 중요한 특성(feature)의 가중치를 제거하려고 한다는 점이다.
- 다시 말해, Lasso 회귀는 자동으로 특성을 선택하고 희소 모델(sparse model)을 만들어준다.
- 따라서 feature selection 부분에서 많이 활용된다.
<참고 정도만...>
- 경사 하강법을 Lasso 비용 함수에 사용하기 위해 서브그레디언트 벡터 g를 사용한다.
3. 엘라스틱넷 회귀
- Ridge 회귀와 Lasso 회귀를 절충한 모델이다.
- 즉, L2 규제와 L1 규제를 결합한 회귀 모델이다.
- Lasso 회귀의 단점을 보완하기 위해, L2 규제를 추가해 준 것이다.
- 위 비용 함수 식에서 r = 0 이면 엘라스틱넷 회귀는 Ridge 회귀와 동일하고, r = 1 이면 Lasso 회귀와 동일하다.
- 규제항은 Ridge 회귀와 Lasso 회귀의 규제항을 단순히 더해서 사용하며, 혼합 정도는 혼합 비율 r을 사용해서 조절한다.
<참고>
- 규제가 없는 보통의 선형 회귀, Ridge, Lasso, 엘라스틱넷을 언제 사용해야 할까?
- Ridge가 기본적으로 많이 사용되지만, 특성이 몇 개뿐이라고 의심되면 Lasso나 엘라스틱넷을 사용한다.
- 위 규제 모델들은 불필요한 특성의 가중치를 0으로 만들어준다.
- 따라서 특성 수가 훈련 샘플 수보다 많거나 특성 몇 개가 강하게 연관되어 있을 때(다중 공선성이 존재할 때)는 보통 Lasso가 문제를 일으키므로 Lasso보다는 엘라스틱넷을 선호한다.
▶ 조기 종료(Early Stopping)
- 경사 하강법과 같은 반복적인 학습 알고리즘을 규제하는 방식은 검증 에러가 최솟값에 도달하면 바로 훈련을 중지시키는 것인데, 이를 조기 종료(early stopping)라고 한다.
- 이 규제 방식은 매우 효과적이고 간단하다.
- 확률적 경사 하강법이나 미니배치 경사 하강법에서는 곡선이 위와 같이 매끄럽지 않아서, 최솟값에 도달했는지 확인하기가 어렵다.
- 이에 대한 해결책은 검증 에러가 일정 시간 동안 최솟값보다 클 때(모델이 더 나아지지 않는다고 확신이 들 때) 학습을 멈추고, 검증 에러가 최소였을 떄의 모델 파라미터로 되돌리는 것이 있겠다.
▶ 로지스틱 회귀
- Target 변수가 범주형인 경우 사용하는 모델이다.
- 샘플이 특정 클래스에 속할 확률을 추정하는데 널리 사용된다.
- 각 클래스에 속할 확률을 비교해서, 확률 값이 큰 쪽으로 분류한다.
- 일반적으로 분류 기준 확률 값으로 0.5를 사용한다.
- 이를 이진 분류기라고 한다.
◆ 확률 추정
- 로지스틱 회귀는 로지스틱 함수(시그모이드 함수)를 사용하여 확률 값을 추정하며, 출력 결과 값은 0과 1사이의 값을 갖는다.
◆ 훈련과 비용 함수
- 로지스틱 회귀 모델의 훈련 목적은 y = 1에 대해서는 높은 확률을 추정하고, y = 0에 대해서는 낮은 확률을 추정하는 모델의 파라미터 벡터 theta를 찾는 것이다.
- 따라서 하나의 훈련 샘플에 대한 비용 함수는 다음과 같다.
- 전체 훈련 세트에 대한 비용 함수는 모든 훈련 샘플의 비용을 평균한 것이다. 이를 로그 손실이라고 부른다.
- 위 비용 함수는 볼록 함수이므로, 경사 하강법과 같은 알고리즘을 통해 전역 최솟값(global minimum)을 찾을 수 있다.
◆ 결정 경계(Decision Boundary)
- 예시로 사용한 위 그래프를 보면, 양쪽 클래스의 확률이 똑같이 50%가 되는 1.6cm 근방에서 결정 경계(Decision Boundary)가 생성되는 것을 확인할 수 있다.
<참고>
- 로지스틱 회귀 모델도 L1, L2 규제를 적용시킬 수 있다.
- 사이킷런의 LogisticRegression 모델의 규제 강도를 조절하는 하이퍼 파라미터는 alpha가 아니고, 그 역수에 해당하는 C이다.
- C가 높을수록 모델의 규제가 줄어든다.
◆ 다항 로지스틱 회귀(소프트맥스 회귀)
- (범주가 2개로 이루어진) Target 변수가 2개 이상인 경우 사용하는 모델이다.
- 샘플 x가 주어지면 다항 로지스틱 회귀 모델(소프트맥스 회귀 모델)이 각 클래스 k에 대한 점수를 계산하고, 그 점수에 정규화된 지수 함수(소프트맥스 함수)를 적용하여 각 클래스의 확률을 추정하는 방식이다.
- 로지스틱 회귀 분류기와 마찬가지로 소프트맥스 회귀 분류기는 추정 확률이 가장 높은 클래스를 선택한다.
- 즉, 가장 높은 점수를 가진 클래스를 선택한다.
- 모델이 타겟 클래스에 대해서는 높은 확률을 추정하도록 만드는 것이 우리의 목적이다.
- 따라서 크로스 엔트로피 비용 함수를 최소화해서, 타겟 클래스에 대해 낮은 확률을 예측하는 모델을 억제시켜줘야 한다.
- 크로스 엔트로피는 추정된 클래스의 확률이 타겟 클래스에 얼마나 잘 맞는지를 측정하는 용도로 사용된다.
여기까지 해서 4장 "모델 훈련"에 대한 정리를 마치도록 하겠다.
★ 참고 자료
- 핸즈온 머신러닝 2/E 교재
- 파이썬 머신러닝 완벽 가이드 교재
'Data Science > Machine Learning' 카테고리의 다른 글
[핸즈온 머신러닝 2/E] 6장. 결정 트리 (6) | 2020.07.18 |
---|---|
[핸즈온 머신러닝 2/E] 5장. 서포트 벡터 머신 (0) | 2020.07.08 |
[핸즈온 머신러닝 2/E] 3장. 분류 (0) | 2020.06.19 |
[핸즈온 머신러닝 2/E] 2장. 머신러닝 프로젝트 처음부터 끝까지_Part 2 (0) | 2020.06.15 |
[핸즈온 머신러닝 2/E] 2장. 머신러닝 프로젝트 처음부터 끝까지_Part 1 (0) | 2020.06.07 |