우리는 3 가지 기능 선택 기술을 사용했습니다 : 이것은 가장 잘 작동했습니다.

우리는 3 가지 기능 선택 기술을 사용했습니다 : 이것은 가장 잘 작동했습니다.

우리는 3 가지 기능 선택 기술을 사용했습니다 : 이것은 가장 잘 작동했습니다.우리는 3 가지 기능 선택 기술을 사용했습니다 : 이것은 가장 잘 작동했습니다.
편집기에 의한 이미지

소개

모든 기계 학습 프로젝트에서 기능 선택은 모델을 만들거나 깨뜨릴 수 있습니다. 기능의 최적의 하위 집합을 선택하면 노이즈가 줄어들고 과인을 방지하며 해석 가능성을 향상 시키며 종종 정확도를 향상시킵니다. 관련이 없거나 중복 변수가 너무 많으면 모델이 부풀어 오르고 훈련하기가 더 어려워집니다. 너무 적기 때문에 중요한 신호가 누락 될 위험이 있습니다.

이 도전을 해결하기 위해 실제 데이터 세트에서 세 가지 인기있는 기능 선택 기술을 실험했습니다. 목표는 성능, 해석 성 및 효율성의 최상의 균형을 제공 할 접근 방식을 결정하는 것이 었습니다. 이 기사에서는 세 가지 기능 선택 기술을 테스트 한 경험을 공유하고 데이터 세트에 가장 적합한 기능을 공개합니다.

기능 선택이 중요한 이유

기계 학습 모델, 특히 고차원 데이터 세트에서 모든 기능이 동일하게 기여하는 것은 아닙니다. 더 얇고 유익한 입력 세트는 몇 가지 장점을 제공합니다.

  • 오버 피트팅 감소 – 관련없는 변수를 제거하면 모델이 보이지 않는 데이터를 더 잘 일반화하는 데 도움이됩니다.
  • 더 빠른 훈련 – 기능이 적 으면 훈련이 빠르고 계산 비용이 낮아집니다.
  • 더 나은 해석 가능성 – 소형 예측 변수 세트를 사용하면 모델 결정을 유도하는 것이 무엇인지 설명하는 것이 더 쉽습니다.

데이터 세트

이 실험에서는 Scikit-Learn의 당뇨병 데이터 세트를 사용했습니다. 여기에는 체질량 지수 (BMI), 혈압, 여러 혈청 측정 및 연령과 같은 10 개의 기준 기능이있는 442 개의 환자 기록이 포함되어 있습니다. 표적 변수는 기준 1 년 후 질병 진행의 정량적 척도이다.

데이터 세트를로드하고 준비하겠습니다.

import pandas as pd
from sklearn.datasets import load_diabetes

# Load dataset
data = load_diabetes(as_frame=True)
df = data.frame

X = df.drop(columns=['target'])
y = df['target']

print(df.head())

여기, X 기능을 포함합니다 y 대상을 포함합니다. 이제 다른 기능 선택 방법을 적용 할 준비가되었습니다.

필터 방법

필터 방법 모델을 훈련시키는 대신 통계적 특성을 기반으로 기능을 순위하거나 제거합니다. 그들은 단순하고 빠르며 명백한 중복성을 제거하는 빠른 방법을 제공합니다.

이 데이터 세트의 경우, 상관 관계가 높은 기능을 확인하고 0.85의 상관 관계 임계 값을 초과 한 것을 삭제했습니다.

import numpy as np

corr = X.corr()
threshold = 0.85
upper = corr.abs().where(np.triu(np.ones(corr.shape), k=1).astype(bool))
to_drop = [col for col in upper.columns if any(upper[col] > threshold)]
X_filter = X.drop(columns=to_drop)
print("Remaining features after filter:", X_filter.columns.tolist())

산출:

Remaining features after filter: ['age', 'sex', 'bmi', 'bp', 's1', 's3', 's4', 's5', 's6']

하나의 중복 기능 만 제거되었으므로 데이터 세트는 10 개의 예측 변수 중 9 개를 유지했습니다. 이것은 당뇨병 데이터 세트가 상관 관계 측면에서 비교적 깨끗하다는 것을 보여줍니다.

래퍼 방법

래퍼 방법 실제로 모델을 교육하고 성능을 확인하여 기능의 하위 집합을 평가합니다. 인기있는 기술 중 하나입니다 재귀 기능 제거 (RFE).

RFE는 모든 기능으로 시작하고 모델에 맞으며 중요성으로 순위를 매기고 원하는 수의 기능이 남아있을 때까지 가장 유용하지 않은 것과 재귀 적으로 제거합니다.

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

lr = LinearRegression()
rfe = RFE(lr, n_features_to_select=5)
rfe.fit(X, y)

selected_rfe = X.columns[rfe.support_]
print("Selected by RFE:", selected_rfe.tolist())

Selected by RFE: ['bmi', 'bp', 's1', 's2', 's5']

RFE는 10 개 중 5 개 기능을 선택했습니다. 트레이드 오프는이 접근법이 여러 라운드의 모델 피팅이 필요하기 때문에 계산적으로 비싸다는 것입니다.

내장 된 방법

내장 된 방법 기능 선택을 모델 교육 프로세스에 통합하십시오. LASSO 회귀 (L1 정규화) 전형적인 예입니다. 그것은 특징 무게를 불이익으로 덜 중요한 무게를 0으로 줄입니다.

from sklearn.linear_model import LassoCV

lasso = LassoCV(cv=5, random_state=42).fit(X, y)

coef = pd.Series(lasso.coef_, index=X.columns)
selected_lasso = coef[coef != 0].index
print("Selected by Lasso:", selected_lasso.tolist())

Selected by Lasso: ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's4', 's5', 's6']

Lasso는 9 가지 기능을 유지하고 예측력이 거의없는 기능을 제거했습니다. 그러나 필터 방법과 달리이 결정은 상관 관계뿐만 아니라 모델 성능을 기반으로했습니다.

결과 비교

각 접근 방식을 평가하기 위해 선택한 기능 세트에서 선형 회귀 모델을 교육했습니다. R² 점수 및 평균 제곱 오류 (MSE)를 사용하여 5 배 교차 검증 및 측정 성능을 사용했습니다.

from sklearn.model_selection import cross_val_score, KFold
from sklearn.linear_model import LinearRegression

# Helper evaluation function
def evaluate_model(X, y, model):
    cv = KFold(n_splits=5, shuffle=True, random_state=42)
    r2_scores = cross_val_score(model, X, y, cv=cv, scoring="r2")
    mse_scores = cross_val_score(model, X, y, cv=cv, scoring="neg_mean_squared_error")
    return r2_scores.mean(), -mse_scores.mean()

# 1. Filter Method results
lr = LinearRegression()
r2_filter, mse_filter = evaluate_model(X_filter, y, lr)

# 2. Wrapper (RFE) results
X_rfe = X[selected_rfe]
r2_rfe, mse_rfe = evaluate_model(X_rfe, y, lr)

# 3. Embedded (Lasso) results
X_lasso = X[selected_lasso]
r2_lasso, mse_lasso = evaluate_model(X_lasso, y, lr)

# Print results
print("=== Results Comparison ===")
print(f"Filter Method   -> R2: {r2_filter:.4f}, MSE: {mse_filter:.2f}, Features: {X_filter.shape[1]}")
print(f"Wrapper (RFE)   -> R2: {r2_rfe:.4f}, MSE: {mse_rfe:.2f}, Features: {X_rfe.shape[1]}")
print(f"Embedded (Lasso)-> R2: {r2_lasso:.4f}, MSE: {mse_lasso:.2f}, Features: {X_lasso.shape[1]}")
=== Results Comparison ===
Filter Method   -> R2: 0.4776, MSE: 3021.77, Features: 9
Wrapper (RFE)   -> R2: 0.4657, MSE: 3087.79, Features: 5
Embedded (Lasso)-> R2: 0.4818, MSE: 2996.21, Features: 9

필터 방법은 하나의 중복 기능 만 제거하고 우수한 기준 성능을 제공했습니다. 래퍼 (RFE)는 기능을 반으로 절단하지만 정확도를 약간 줄였습니다. 임베디드 (Lasso)는 9 가지 기능을 유지하고 최고의 R² 및 가장 낮은 MSE를 제공했습니다. 전반적으로 Lasso는 정확도, 효율성 및 해석 성의 최고의 균형을 제공했습니다.

결론

기능 선택은 단순히 전처리 단계가 아니라 기계 학습 파이프 라인의 전반적인 성공을 형성하는 전략적 결정입니다. 우리의 실험은 간단한 필터와 철저한 포장지가 각각 자신의 장소를 가지고 있지만 Lasso와 같은 내장 된 방법은 종종 달콤한 장소를 제공한다고 강화했습니다.

당뇨병 데이터 세트에서 Lasso 정규화는 명확한 승자로 등장했습니다. 이를 통해 래퍼 방법의 무거운 계산 또는 필터의 지나치게 단순화되지 않고 더 빠르고 정확하며 해석 가능한 모델을 구축하는 데 도움이되었습니다.

실무자에게는 테이크 아웃이 이것입니다. 단일 방법에 맹목적으로 의존하지 마십시오. 빠른 필터로 시작하여 명백한 중복성을 자르고 철저한 탐색이 필요한 경우 포장지를 사용해보십시오.

Jayita Gulati 기계 학습 애호가이자 기계 학습 모델 구축에 대한 열정으로 인해 기계 학습 애호가이자 기술 작가입니다. 그녀는 리버풀 대학교에서 컴퓨터 과학 석사 학위를 취득했습니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다