파이썬 단계적 회귀

Muhammad Maisam Abbas 2023년6월21일
  1. Python의 단계적 회귀
  2. Python의 statsmodels 라이브러리를 사용한 단계적 회귀
  3. Python의 sklearn 라이브러리를 사용한 단계적 회귀
  4. Python의 mlxtend 라이브러리를 사용한 단계적 회귀
파이썬 단계적 회귀

이 자습서에서는 Python에서 단계적 회귀를 수행하는 방법에 대해 설명합니다.

Python의 단계적 회귀

단계별 회귀는 통계 및 기계 학습에서 선형 회귀 모델을 구축하기 위한 기능의 하위 집합을 선택하는 데 사용되는 방법입니다. 단계별 회귀는 높은 정확도 수준을 유지하면서 모델의 복잡성을 최소화하는 것을 목표로 합니다.

이 방법은 특징 수가 많은 경우에 특히 유용하며 어떤 특징이 예측에 중요한지 명확하지 않습니다.

Python의 statsmodels 라이브러리를 사용한 단계적 회귀

statsmodels 라이브러리는 단계별 회귀를 수행하는 데 사용할 수 있는 OLS() 클래스를 제공합니다. 이 기능은 순방향 선택과 역방향 제거의 조합을 사용하여 기능의 최상의 하위 집합을 선택합니다.

이 함수는 빈 모델로 시작하여 계수의 중요성에 따라 변수를 하나씩 추가합니다. 중요하지 않은 변수는 모델에서 제거됩니다.

다음은 statsmodels에서 stepwise 기능을 사용하는 방법의 예입니다.

import numpy as np
import pandas as pd
import statsmodels.api as sm

# Load the data
data = pd.read_csv("data.csv")

# Define the dependent and independent variables
x = data.drop("EstimatedSalary", axis=1)
y = data["EstimatedSalary"]

# Perform stepwise regression
result = sm.OLS(y, x).fit()

# Print the summary of the model
print(result.summary())

출력:

OLS 회귀

먼저 위의 코드 예제에서 데이터를 로드하고 종속 및 독립 변수를 정의합니다. 그런 다음 statsmodels.formula.api 라이브러리의 OLS() 함수를 사용하여 단계적 회귀를 수행하고 변수 계수, p-값 및 R-제곱과 같은 정보를 포함하는 모델 요약을 인쇄합니다. 값.

Python의 sklearn 라이브러리를 사용한 단계적 회귀

sklearn 라이브러리는 단계적 회귀를 수행하기 위한 RFE(재귀 기능 제거) 클래스를 제공합니다. 이 방법은 모든 기능으로 시작하여 중요도에 따라 기능을 반복적으로 제거합니다.

RFE 방법은 지정된 추정기(예: 선형 회귀 모델)를 사용하여 기능의 중요성을 추정하고 각 반복에서 가장 중요하지 않은 기능을 재귀적으로 제거합니다.

다음은 sklearn에서 RFE 방법을 사용하는 방법의 예입니다.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression

# Load the data
data = pd.read_csv("data.csv")

# Define the dependent and independent variables
x = data.drop("EstimatedSalary", axis=1)
y = data["EstimatedSalary"]

# Create a linear regression estimator
estimator = LinearRegression()

# Create the RFE object and specify the number of
selector = RFE(estimator, n_features_to_select=5)

# Fit the RFE object to the data
selector = selector.fit(x, y)

# Print the selected features
print(x.columns[selector.support_])

출력:

Index(['Tenure', 'NumOfProducts', 'HasCrCard', 'IsActiveMember', 'Exited'], dtype='object')

먼저 위의 코드 예제에서 데이터를 로드하고 종속 및 독립 변수를 정의합니다. 그런 다음 선형 회귀 추정기와 RFE 개체를 만듭니다.

선택할 기능의 수를 5로 설정했습니다. 즉, 최종 모델에는 중요도에 따라 상위 5개의 기능만 포함됩니다. 다음으로 RFE 개체를 데이터에 맞추고 선택한 기능을 인쇄합니다.

RFE() 메서드는 지정된 추정기를 사용하여 기능의 중요도를 계산하므로 데이터에 적합한 추정기를 사용하는 것이 중요합니다. RFE 방법은 Random Forest 또는 SVM과 같은 다른 추정기와 함께 사용할 수도 있습니다.

Python의 mlxtend 라이브러리를 사용한 단계적 회귀

mlxtend 라이브러리는 단계적 회귀를 수행하기 위한 SFS 클래스를 제공합니다. 이 기능은 순방향 선택과 역방향 제거의 조합을 사용하여 기능의 최상의 하위 집합을 선택합니다.

이 함수도 빈 모델로 시작하여 계수의 중요성에 따라 변수를 하나씩 추가합니다. 중요하지 않은 변수는 모델에서 제거됩니다.

다음은 mlxtend에서 stepwise 기능을 사용하는 방법의 예입니다.

from sklearn.linear_model import LinearRegression
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
import joblib
import sys

sys.modules["sklearn.externals.joblib"] = joblib

# Load the data
data = pd.read_csv("data.csv")

# Define the dependent and independent variables
x = data.drop("EstimatedSalary", axis=1)
y = data["EstimatedSalary"]

# Create a linear regression estimator
estimator = LinearRegression()

# Create the SFS object and specify the number of features to select
sfs = SFS(estimator, k_features=5, forward=True, floating=False, scoring="r2", cv=5)

# Fit the SFS object to the data
sfs = sfs.fit(x, y)

# Print the selected features
print(sfs.k_feature_idx_)

출력:

(1, 2, 4, 6, 7)

이 예제에서는 먼저 데이터를 로드하고 종속 변수와 독립 변수를 정의합니다. 그런 다음 선형 회귀 추정기와 SFS 개체를 만듭니다.

선택할 기능의 수를 5로 설정했습니다. 즉, 최종 모델에는 중요도에 따라 상위 5개 기능만 포함됩니다. 다음으로 SFS 개체를 데이터에 맞추고 선택한 기능을 인쇄합니다.

mlxtendstepwise() 함수는 지정된 추정기를 사용하여 기능의 중요도를 계산하므로 데이터에 적합한 추정기를 사용하는 것이 중요합니다. 이 기능을 사용하면 선택 프로세스의 방향, 채점 메트릭 및 사용할 교차 유효성 검사 접기 수를 설정할 수도 있습니다.

요약하면 단계적 회귀는 선형 회귀 모델에서 기능 선택을 위한 강력한 기술입니다. statsmodels, sklearnmlxtend 라이브러리는 각각 장점과 단점이 있는 Python에서 단계적 회귀를 수행하기 위한 다양한 방법을 제공합니다.

방법의 선택은 문제의 특정 요구 사항과 데이터의 가용성에 따라 달라집니다. 단계적 회귀는 과적합되기 쉬우므로 다른 기능 선택 기술 및 교차 검증과 함께 사용하는 것이 좋습니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Python Regression