Python의 능형 회귀(단계별)
능형 회귀는 데이터에 다중 공선성이 존재할 때 회귀 모델을 적합시키는 데 사용할 수 있는 방법입니다.
간단히 말해서, 최소 제곱 회귀는 잔차 제곱합(RSS)을 최소화하는 계수 추정값을 찾으려고 시도합니다.
RSS = Σ(y i – ŷ i )2
금:
- Σ : 합계를 의미하는 그리스 기호
- y i : i번째 관측값에 대한 실제 응답 값
- ŷ i : 다중선형회귀모델을 기반으로 예측된 반응값
반대로, 능선 회귀는 다음을 최소화하려고 합니다.
RSS + λΣβ j 2
여기서 j는 1에서 p개의 예측 변수로 이동하고 λ ≥ 0입니다.
방정식의 두 번째 항은 인출 페널티 로 알려져 있습니다. 능선 회귀 분석에서는 가능한 가장 낮은 MSE 테스트(평균 제곱 오차)를 생성하는 λ 값을 선택합니다.
이 튜토리얼에서는 Python에서 능선 회귀를 수행하는 방법에 대한 단계별 예를 제공합니다.
1단계: 필요한 패키지 가져오기
먼저 Python에서 능선 회귀를 수행하는 데 필요한 패키지를 가져옵니다.
import pandas as pd
from numpy import arange
from sklearn. linear_model import Ridge
from sklearn. linear_model import RidgeCV
from sklearn. model_selection import RepeatedKFold
2단계: 데이터 로드
이 예에서는 33개의 서로 다른 자동차에 대한 정보가 포함된 mtcars 라는 데이터 세트를 사용합니다. hp를 반응 변수로 사용하고 다음 변수를 예측 변수로 사용합니다.
- mpg
- 무게
- 똥
- q초
다음 코드는 이 데이터 세트를 로드하고 표시하는 방법을 보여줍니다.
#define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"
#read in data
data_full = pd. read_csv (url)
#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]
#view first six rows of data
data[0:6]
mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3,440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105
3단계: 능형 회귀 모델 적합
다음으로 sklearn의 RidgeCV() 함수를 사용하여 능선 회귀 모델을 피팅하고 RepeatedKFold() 함수를 사용하여 k-겹 교차 검증을 수행하여 페널티 항에 사용할 최적의 알파 값을 찾습니다.
참고: Python에서는 “lambda” 대신 “alpha”라는 용어가 사용됩니다.
이 예에서는 k = 10 접기를 선택하고 교차 검증 프로세스를 3번 반복합니다.
또한 RidgeCV()는 기본적으로 알파 값 0,1, 1, 10만 테스트한다는 점에 유의하세요. 그러나 우리는 0.01 단위로 0에서 1까지 자체 알파 범위를 설정할 수 있습니다.
#define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]
#define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 )
#define model
model = RidgeCV(alphas= arange (0, 1, 0.01), cv=cv, scoring=' neg_mean_absolute_error ')
#fit model
model. fit (x,y)
#display lambda that produced the lowest test MSE
print( model.alpha_ )
0.99
테스트의 MSE를 최소화하는 람다 값은 0.99 로 나타났습니다.
4단계: 모델을 사용하여 예측하기
마지막으로 최종 능선 회귀 모델을 사용하여 새로운 관측값을 예측할 수 있습니다. 예를 들어, 다음 코드는 다음 속성을 사용하여 새 자동차를 정의하는 방법을 보여줍니다.
- mpg: 24
- 무게: 2.5
- 가격: 3.5
- 초당: 18.5
다음 코드는 적합 능선 회귀 모델을 사용하여 이 새로운 관측치의 HP 값을 예측하는 방법을 보여줍니다.
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using ridge regression model
model. predict ([new])
array([104.16398018])
입력된 값을 기반으로 모델은 이 자동차의 hp 값이 104.16398018 이라고 예측합니다.
이 예제에 사용된 전체 Python 코드는 여기에서 찾을 수 있습니다.