Hyun's Wonderwall

[AIchemist] 파머완 - CH05. 회귀 | 1~8 본문

Study/Python-Machine-Learning

[AIchemist] 파머완 - CH05. 회귀 | 1~8

Hyun_! 2023. 11. 7. 04:48

[Chapter 05] 회귀

1. 회귀

회귀(Regression) 분석: 갈톤이 수행한 연구에서 유래 (사람의 키는 평균 키로 회귀하려는 경향을 가진다는 자연의 법칙)

회귀 분석: 데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법

 

회귀: 여러 개의 독립변수한 개의 종속변수 간의 상관관계를 모델링하는 기법을 통칭 (모델링하고 예측)

Y=W1*X1+W2*X2+...+Wn*Xn이라는 선형 회귀식

Y: 종속변수

X1, ..., Xn은 독립변수

W1, ..., Wn은 독립변수의 값에 영향을 미치는 회귀 계쑤(Regression coefficients)

독립변수는 피처에 해당되며 종속변수는 결정 값이다.

머신러닝 회귀 예측의 핵심은 주어진 피처와 결정 값 데이터 기반에서 학습을 통해 최적의 회귀 계수를 찾아내는 것이다.

회귀 유형: 회귀 계수의 선형/비선형 여부, 독립변수의 개수, 종속변수의 개수

가장 중요한 것: 회귀 계수

 

<회귀 유형 구분>

- 선형이냐 아니냐에 따라 선형 회귀, 비선형 회귀로 나뉨

- 독립 변수의 개수가 한개인지 여러개인지에 따라 단일 회귀, 다중 회귀로 나뉨

 

<지도학습 두 가지 유형: 분류와 회귀>

분류 예측값 -> Category 값 (이산값)

회귀 예측값 -> 숫자값 (연속값)

 

여러 가지 회귀 중에서 선형 회귀가 가장 많이 사용된다.

선형 회귀: 실제 값과 예측값의 차이(오류의 제곱 값)을 최소화하는 직선형 회귀선을 최적화하는 방식

선형 회귀 모델은 규제(Regularization) 방법에 따라 다시 별도의 유형으로 나뉨

규제는 일반적인 선형 회귀의 과적합 문제를 해결하기 위해서 회귀 계수에 페널티 값을 적용하는 것을 말함

대표적인 선형 회귀 모델은 다음과 같음

일반 선형 회귀: 예측값과 실제값의 RSS(Residual Sum of Squares)를 최소화할 수 있도록 회귀 계수를 최적화하며, 규제를 적용하지 않은 모델

먼저 가장 간단한 단순 선형 회귀를 예로 들어 회귀를 좀 더 살펴보자

2. 단순 선형 회귀를 통한 회귀 이해

단순 선형 회귀: 독립 변수도 하나, 종속 변수도 하나인 선형 회귀

- 이때 종속 변수는 독립 변수에 대해 선형(직선)의 관계로 표현 가능.

 

2차원 평면에서 기울기와 절편을 가진 1차 함수식으로 모델링 가능.

^Y=w0+w1*X

이때 기울기 w1, 절편 w0을 회귀 계수로 지칭(절편은 영어로 intercept)

회귀 모델을 위와 같은 1차 함수로 모델링했다면 실제 Y는 이러한 일차 함수 값에서 실제 값만큼의 오류 값을 뺀(또는 더한)값이 된다(w0+w1*X+오류 값)

 

이렇게 실제 값과 회귀 모델이ㅡ 차이에 따른 오류 값을 남은 오류, 즉 잔차라고 부른다.

최적의 회귀 모델을 만든다는 것: 바로 전체 데이터의 잔차(오류 값) 합이 최소가 되는 모델을 만드는 것 = 오류 값 합이 최소가 될 수 있는 최적의 회귀 계수를 찾는 것

 

오류 값은 +나 -가 될 수 있음, 오류 합을 구할 때는 절댓값을 취해 더하거나 RSS 방식을 취함.

일반적으로 RSS방식으로 구함. Error^2=RSS.

 

RSS는 변수가 w0, w1인 식으로 표현할 수 있음. 이 RSS를 최소로 하는 w0, w1 즉 회귀 계수를 학습을 통해서 찾는 것이 머신러닝 기반 회귀의 핵심 사항.

RSS는 (회귀식의 X, Y가 아니라) w 변수(회귀 계수)가 중심 변수임을 인지하는 것이 매우 중요함.(학습 데이터로 입력되는 독립변수와 종속변수는 RSS에서 모두 상수로 간주함)

일반적으로 RSS는 학습 데이터의 건수로 나누어서 다음과 같이 정규화된 식으로 표현됨

RSS(w0, w1) - 1/N(시그마 i=1 부터 N까지)(yi-(w0+w1*xi))^2

회귀에서 이 RSS는 비용(Cost)이며 w변수로 구성되는 RSS를 비용 함수라고 한다. 

알고리즘은 데이터를 학습하면서 이 비용 함수가 반환하는 값=오류값을 지속해서 감소시키고 최종적으로는 더 이상 감소하지 않는 최소의 오류값을 구해야 한다.

비용 함수를 loss function이라고도 함.

3. 비용 최소화하기 - 경사 하강법(Gradient Descent) 소개

어떻게 하면 비용 함수가 최소가 되는 w파라미터를 구할 수 있을까?

w파라미터의 개수가 적다면 고차원 방정식으로 비용 함수가 최소가 되는 w변수값을 도출할 수 있갰지만, w파라미터가 많으면 고차원 방정식을 동원하더라도 해결하기가 어렵다.

경사 하강법은 이러한 고차원 방정식에 대한 문제를 해결해 주면서 비용 함수 RSS를 최소화하는 방법을 직관적으로 제공하는 뛰어난 방식. (-> '데이터를 기반으로 알고리즘이 스스로 학습'한다는 머신러닝 개념을 가능하게 만든 핵심 기법의 하나)

경사 하강법: '점진적으로' 반복적인 계산을 통해 W 파라미터 값을 업데이트하면서 오류값이 최소가 되는 W 파라미터를 구하는 방식

 

경사 하강법은 반복적으로 비용 함수의 반환 값, 즉 예측값과 실제값의 차이가 작아지는 방향성을 가지고 W파라미터를 계속해서 보정해 나간다. 계속 업데이트. 그리고 오류 값이 더 이상 작아지지 않으면 그 오류 값을 최소 비용으로 판단하고 그때의 W값을 최적 파라미터로 반환함

 

경사 하강법의 핵심:어떻게 하면 오류가 작아지는 방향으로 W값을 보정할 수 있을까?

미분 기울기를 생각..비용 함수가 포물선 함수라면 경사 하강법은 최초 w에서부터 미분을 적용한 뒤 이 미분 값이 계속 감소하는 방향으로 순차적으로 w를 업데이트한다. 마침내 더이상 일차 함수의 기울기(미분 절댓값)가 감소하지 않는 지점을 비용 함수가 최소인 지점으로 간주하고 그떄의 w를 반환.

편미분 및 공식,,

파이썬 코드로 구현해보자

gradient_descent_steps()로 w1, w0 구하고

get_cost()함수로 경사 하강법의 예측 오류 계산해보자

 

확률적 경사 하강법, 미니 배치 확률적 경사 하강법

w1_update, w0_update 계산 부분 차이

큰 예측상의 성능은 없음 일반 경사 하강법은 큰 데이터 처리 시 시간이 매우 오래 걸려서 일반적으로 확률적 경사 하강법을 이용.

 

피처가 여러 개인 경우? 1개인 경우와 유사

^yY = w0+w1*X1+w2*X2+w3*X3+w4*X4+...+w100*X100 예측 회귀식. 이렇게 회귀 계수 많아지도라도 선형대수 이용해 간단하게 예측값 도출 가능.

y_pred 예측 행렬. 굳이 개별적으로 X의 개별 원소와 w1의 값을 곱하지 않고 ^Y=np.dot(Xmat, w^T) + w0

회귀 예측값: ^Y=Xmat*W^T와 같이 도출 가능

 

4. 사이킷런 LinearRegression을 이용한 보스턴 주택 가격 예측

LinearRegression 클래스 - Ordinary Least Squares

예측값과 실제값의 RSS를 최소화해 OLS 추정 방식으로 구현한  클래스. LinearRegression 클래스는 fit()메서드로 X, y 배열을 입력받으면 회귀 계수 Coefficients인 w를 coef_ 속성에 저장한다

이 기반의 회귀 계수 계산은 입력 피처의 독립성에 많은 영향을 받음

회귀 평가 지표: 실제 값과 회귀 예측값의 차이 값을 기반으로 한 지표가 중심. 실제값과 차이값 단순히 더하면 x 절댓값 평균이나 제곱, 제곱한 뒤 다시 루트씌운 평균값...

MAE MSE RMSE R^2 (+MSLE RMSLE)

최근부터 사이킷런도 MSLE 제공 하기 시작함

 

MAE- 무조건 양수.

scoring 에러- 값 클수록 좋은 평가 결과

주의 필요 어쩌구

 

LinearRegression을 이용해 보스턴 주택 가격 회귀구현

데이터 세트 load_boston()통해 제공. DataFrame.... 

산점도와 함께 선형 회귀 직선 그려준다

 

coef_속성 회귀 계수 값만 가지고 있... sort_values

교차 검증 수행해 평균 RMSE 확인

 

5. 다항 회귀와 과(대)적합/과소적합 이해

다항회귀: 회귀가 독립변수의 2차, 3차 방정식과 같은 다항식으로 표현됨

다항 회귀가 선형 회귀임을 주의하자. (선형/비선형 회귀 여부를 나누는 것은 회귀 계수이지, 독립 변수가 아님)

주어진 데이터 세트를 예측할 때 다항 회귀가 더 효과적임.

사이킷런은 다항 회귀를 위한 클래스를 명시적으로 제공x

대신 비선형 함수를 선형 모델에 적용시키는 방법을 사용해 구현함.

피처를 Polynomial 다항식 피처로 변환: PolynomialFeatures  클래스로 

fit(), transform().

단항 계수 피처를 다항 계수로 변경

단항식 값을 다항식 값으로

.

6. 규제 선형 모델 - 릿지, 라쏘, 엘라스틱넷

.

7. 로지스틱 회귀

.

8. 회귀 트리

.