Feature selection은 모델의 성능을 향상시키고 모델의 복잡도를 줄이기 위해 중요한 특성만을 선택하는 과정이다.
Feature selection에는 여러가지 알고리즘이 있다.
목표 변수와 각 특성 간의 상관관계를 계산하여 중요 특성을 선택한다. 특성간 다중공선성을 고려해 상관성 높은 특성중 하나를 선택한다.
상관계수가 높을수록 두 변수 간의 선형적인 관계가 강하다고 판단한다.
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# 상관계수 계산
correlation_matrix = df.corr()
# 목표 변수와의 상관계수 확인 (여기에서는 간단하게 마지막 열을 목표 변수로 설정)
target_correlation = correlation_matrix['target']
# 상관계수의 절댓값이 높은 특성 선택 (예: 0.2 이상)
selected_features = target_correlation[abs(target_correlation) > 0.2].index
# 선택된 특성 확인
print("Selected Features:", selected_features)
절댓값이 0.2보다 큰 상관계수를 가진 특성을 선택하는 예시이다.
0.0 ~ 0.19: 거의 무시됨
0.20 ~ 0.39: 매우 약한 상관관계
0.40 ~ 0.59: 약한 상관관계
0.60 ~ 0.79: 중간 정도의 상관관계
0.80 ~ 1.0: 강한 상관관계
특정 문제나 데이터에 따라 적합한 임계값이 다를 수 있다.
Filter Methods에서는 특성과 타겟 간의 통계적인 관계를 기반으로 특성을 선택한다. 주로 분산이 낮거나 높은 특성, 상관관계가 낮은 특성 등을 제거하여 모델의 복잡도를 줄이는 데 기여한다.
분산이 낮은 특성은 정보를 거의 제공하지 않을 가능성이 높다. 따라서 분산이 낮은 특성을 제거하여 모델의 복잡도를 줄일 수 있다.
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_iris
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# 분산 기준을 사용하여 특성 선택
threshold = 0.2 # 분산이 이 값보다 낮은 특성을 제거
selector = VarianceThreshold(threshold=threshold)
X_selected = selector.fit_transform(X)
# 선택된 특성 확인
selected_features = df.columns[selector.get_support()]
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = pd.DataFrame(X_selected, columns=selected_features)
df_selected['target'] = y
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
특성 간의 상관관계가 높은 경우, 중복된 정보를 포함할 가능성이 높다. 특성 간의 상관관계가 높은 경우 하나의 특성만을 선택하여 다중공선성을 감소시킬 수 있다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# 상관관계 기준을 사용하여 특성 선택
num_features_to_select = 2 # 선택할 특성의 수
selector = SelectKBest(score_func=f_classif, k=num_features_to_select)
X_selected = selector.fit_transform(X, y)
# 선택된 특성 확인
selected_features = df.columns[selector.get_support()]
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = pd.DataFrame(X_selected, columns=selected_features)
df_selected['target'] = y
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
범주형 변수와 이산형 타겟 간의 독립성을 검정하여 특성을 선택한다. 이는 범주형 데이터에서 유용하게 활용된다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# 카이제곱검정을 사용하여 특성 선택
num_features_to_select = 2 # 선택할 특성의 수
selector = SelectKBest(score_func=chi2, k=num_features_to_select)
X_selected = selector.fit_transform(X, y)
# 선택된 특성 확인
selected_features = df.columns[selector.get_support()]
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = pd.DataFrame(X_selected, columns=selected_features)
df_selected['target'] = y
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
특성과 타겟 간의 상호 정보량을 측정하여 중요한 특성을 선택한다. 상호 정보량은 두 변수 간의 의존성을 측정하는 지표로 사용된다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import mutual_info_classif
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# 상호정보량을 사용하여 특성 선택
num_features_to_select = 2 # 선택할 특성의 수
selector = SelectKBest(score_func=mutual_info_classif, k=num_features_to_select)
X_selected = selector.fit_transform(X, y)
# 선택된 특성 확인
selected_features = df.columns[selector.get_support()]
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = pd.DataFrame(X_selected, columns=selected_features)
df_selected['target'] = y
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
score_func 매개변수에는 사용할 통계적 검정 방법을 설정하며, 여기서는 상호정보량에 적합한 mutual_info_classif를 사용
수치형 특성과 범주형 타겟 간의 분산 차이를 검정하여 유의미한 특성을 선택한다. 주로 회귀와 분류 문제에서 사용된다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# ANOVA를 사용하여 특성 선택
num_features_to_select = 2 # 선택할 특성의 수
selector = SelectKBest(score_func=f_classif, k=num_features_to_select)
X_selected = selector.fit_transform(X, y)
# 선택된 특성 확인
selected_features = df.columns[selector.get_support()]
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = pd.DataFrame(X_selected, columns=selected_features)
df_selected['target'] = y
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
score_func 매개변수에는 사용할 통계적 검정 방법을 설정하며, 여기서는 분류 문제에 적합한 f_classif를 사용
다양한 통계적 검정 방법을 활용하여 특성과 타겟 간의 유의미한 차이를 검정하고 선택하는 방법이다. t-검정, F-검정 등이 여기에 속한다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from scipy.stats import ttest_ind
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# t-검정을 사용하여 특성 선택
num_features_to_select = 2 # 선택할 특성의 수
selected_features = []
for column in df.columns[:-1]: # 마지막 열은 타겟 변수이므로 제외
t_stat, p_value = ttest_ind(df[df['target'] == 0][column], df[df['target'] == 1][column])
# 여기에서는 두 클래스 간의 t-검정을 수행했습니다. 실제로는 데이터의 클래스 수와 특성에 따라 다르게 조정해야 합니다.
if p_value < 0.05: # 유의수준 0.05를 기준으로 선택
selected_features.append(column)
# 선택된 특성 출력
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = df[selected_features + ['target']]
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
t-검정을 기준으로 특성을 선택하는 방법
해당 특성의 두 클래스 간의 t-검정을 수행한 후, 유의수준을 기준으로 선택 여부를 결정
Wrapper Methods는 모델의 성능을 기반으로 특성을 선택한다. 주로 전방 선택법(Forward Selection), 후방 제거법(Backward Elimination), 순차적 특성 선택법(Sequential Feature Selection) 등이 사용되며, 이들 방법은 반복적으로 모델을 학습하여 특성을 선택한다.
: 특성을 하나씩 추가하면서 모델의 성능을 평가하고 최적의 특성 조합을 찾는 방법
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 전방 선택법을 사용하여 특성 선택
selected_features = []
best_accuracy = 0.0
remaining_features = list(range(X.shape[1]))
while remaining_features:
best_feature = None
for feature in remaining_features:
# 현재까지 선택된 특성에 현재 특성을 추가
candidate_features = selected_features + [feature]
# 모델 학습 및 성능 평가
model = RandomForestClassifier(random_state=42)
model.fit(X_train.iloc[:, candidate_features], y_train)
y_pred = model.predict(X_test.iloc[:, candidate_features])
accuracy = accuracy_score(y_test, y_pred)
# 최고 정확도를 갖는 특성 업데이트
if accuracy > best_accuracy:
best_accuracy = accuracy
best_feature = feature
# 선택된 특성에 추가하고 후보 목록에서 제거
selected_features.append(best_feature)
remaining_features.remove(best_feature)
# 선택된 특성 출력
print("Selected Features:", selected_features)
해당 코드에서는 랜덤 포레스트 분류기를 이용하여 각 단계에서 특성을 선택하고 모델의 성능을 평가한다. 최고의 정확도를 갖는 특성을 선택하며, 이를 반복하여 최적의 특성 조합을 찾는다.
: 모든 특성을 포함한 모델에서 시작하여 가장 덜 유용한 특성을 하나씩 제거하면서 모델의 성능을 평가
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 후방 제거법을 사용하여 특성 선택
selected_features = list(range(X.shape[1]))
while len(selected_features) > 1:
worst_feature = None
for feature in selected_features:
# 현재까지 선택된 특성에서 현재 특성을 제외
candidate_features = [f for f in selected_features if f != feature]
# 모델 학습 및 성능 평가
model = RandomForestClassifier(random_state=42)
model.fit(X_train[:, candidate_features], y_train)
y_pred = model.predict(X_test[:, candidate_features])
accuracy = accuracy_score(y_test, y_pred)
# 현재까지 최저 정확도를 갖는 특성 업데이트
if worst_feature is None or accuracy < worst_accuracy:
worst_accuracy = accuracy
worst_feature = feature
# 선택된 특성에서 최저 정확도를 갖는 특성을 제외
selected_features.remove(worst_feature)
# 선택된 특성 출력
print("Selected Features:", selected_features)
랜덤 포레스트 분류기를 이용하여 각 단계에서 특성을 제외하면서 모델의 성능을 평가한다. 최저 정확도를 갖는 특성을 제외하면서 최적의 특성 조합을 찾는다.
: 전방선택법(Forward Selection)이나 후방제거법(Backward Elimination)과 유사하지만, 각 단계에서 특성을 추가하거나 제거할 때 모델의 성능이 가장 크게 향상되는 특성을 선택한다. mlxtend 라이브러리를 사용한다.
pip install mlxtend
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from mlxtend.feature_selection import SequentialFeatureSelector
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 랜덤 포레스트 분류기를 사용한 순차적 특성 선택법
model = RandomForestClassifier(random_state=42)
sfs = SequentialFeatureSelector(model,
k_features='best', # 선택할 특성의 개수 (여기서는 최적의 개수를 선택)
forward=True, # True면 전방선택법, False면 후방제거법
floating=False,
scoring='accuracy', # 성능 평가 지표
cv=5) # 교차 검증의 폴드 수
sfs.fit(X_train, y_train)
# 선택된 특성 출력
selected_features = list(sfs.k_feature_idx_)
print("Selected Features:", selected_features)
# 선택된 특성을 포함한 데이터프레임 생성
df_selected = pd.DataFrame(X_train[:, selected_features], columns=[f'feature_{i}' for i in selected_features])
df_selected['target'] = y_train
# 선택된 특성을 포함한 데이터프레임 출력
print("\nDataFrame with Selected Features:")
print(df_selected.head())
SequentialFeatureSelector를 사용하여 랜덤 포레스트 분류기를 이용한 순차적 특성 선택법을 구현한다. 최적의 특성 개수를 선택하도록 설정하고, 전방선택법을 사용하고 있다.
Embedded Methods에서는 모델 학습 과정에서 특성 선택이 이루어진다. 일부 모델은 학습 중에 특성의 중요도를 평가하고, 중요하지 않은 특성을 제외하도록 설계되어 있다. 예를 들어, LASSO(L1 정규화)와 같은 방법이 해당된다.
PCA는 데이터의 차원을 축소하고 주성분을 선택하여 새로운 특성 공간으로 매핑하는 방법이다. 주로 차원 축소를 목적으로 사용되지만, 중요한 특성만을 선택함으로써 모델의 복잡도를 줄이는 역할도 한다.
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터프레임 생성
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y
# 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# PCA를 사용하여 특성 선택
n_components = 2 # 선택할 주성분의 개수
pca = PCA(n_components=n_components)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
# 주성분 선택 결과 출력
print(f"Selected Principal Components: {pca.components_}")
# 선택된 주성분으로 랜덤 포레스트 모델 학습
model = RandomForestClassifier(random_state=42)
model.fit(X_train_pca, y_train)
# 테스트 세트로 모델 평가
y_pred = model.predict(X_test_pca)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy with PCA-selected features: {accuracy}")
Tree-based methods를 사용한 특성 선택은 주로 특성의 중요도(Feature Importance)를 기반으로 이루어진다. Tree-based methods에서 각 특성의 중요도를 평가할 수 있기 때문에, 중요한 특성들을 선택하여 모델을 훈련시키는 방법을 말한다.
여러 트리 기반의 알고리즘에서 특성의 중요도는 각 트리에서 분할 기준을 선택할 때 해당 특성이 얼마나 영향을 미치는지를 나타낸다. 중요도는 주로 불순도(impurity) 감소나 정보 이득(information gain)과 관련된 지표로 측정된다.
가장 대표적인 트리 기반 알고리즘은 랜덤 포레스트(Random Forest)와 Gradient Boosting 계열이다.
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import numpy as np
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 랜덤 포레스트 모델 생성 및 학습
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train)
# 특성 중요도 확인
feature_importances = rf_model.feature_importances_
print("Feature Importances:", feature_importances)
# 중요도가 높은 순서대로 특성의 인덱스를 정렬
sorted_feature_indices = np.argsort(feature_importances)[::-1]
# 상위 k개의 특성 선택 (예: 상위 2개의 특성 선택)
top_k = 2
selected_features = sorted_feature_indices[:top_k]
print(f"Selected Features (Top {top_k}):", selected_features)
featureimportances 속성을 통해 각 특성의 중요도를 확인하고, 중요도가 높은 순서대로 특성의 인덱스를 정렬하여 상위 k개의 특성을 선택한다.
from sklearn.datasets import load_iris
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
import numpy as np
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# XGBoost 모델 생성 및 학습
xgb_model = XGBClassifier(random_state=42)
xgb_model.fit(X_train, y_train)
# 특성 중요도 확인
feature_importances = xgb_model.feature_importances_
print("Feature Importances:", feature_importances)
# 중요도가 높은 순서대로 특성의 인덱스를 정렬
sorted_feature_indices = np.argsort(feature_importances)[::-1]
# 상위 k개의 특성 선택 (예: 상위 2개의 특성 선택)
top_k = 2
selected_features = sorted_feature_indices[:top_k]
print(f"Selected Features (Top {top_k}):", selected_features)
featureimportances 속성을 통해 각 특성의 중요도를 확인하고, 중요도가 높은 순서대로 특성의 인덱스를 정렬하여 상위 k개의 특성을 선택한다.
# LightGBM 모델 생성
params = {'objective': 'binary', 'metric': 'binary_logloss', 'boosting_type': 'gbdt'}
train_data = lgb.Dataset(X_train, label=y_train)
model = lgb.train(params, train_data, num_boost_round=100)
# 특성 중요도 시각화
lgb.plot_importance(model, figsize=(10, 6), title='Feature Importance')
# 중요도가 낮은 특성 제거
threshold = 50 # 예를 들어, 중요도 상위 50개의 특성만 선택
selected_features = [feature for i, feature in enumerate(X_train.columns) if i in model.feature_importance().argsort()[-threshold:]]
X_train_selected = X_train[selected_features]
X_test_selected = X_test[selected_features]
# 새로운 모델 생성 및 평가
train_data_selected = lgb.Dataset(X_train_selected, label=y_train)
model_selected = lgb.train(params, train_data_selected, num_boost_round=100)
y_pred = model_selected.predict(X_test_selected)
y_pred_binary = (y_pred > 0.5).astype(int)
accuracy = accuracy_score(y_test, y_pred_binary)
print(f"Accuracy with selected features: {accuracy}")
일부 선형 모델은 L1 또는 L2 정규화를 통해 특성의 가중치를 조절한다. 주로 선형회귀 모델에 많이 사용된다. 모델의 복잡도를 제어해 가중치를 축소하는 방법으로 Ridge 와 Lasso방법이 있다. L1 정규화(LASSO)는 일부 특성의 가중치를 0으로 만들어 특성 선택 효과를 낸다.
Lasso 회귀를 사용한 방법은 다음과 같다.
from sklearn.datasets import load_iris
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
import numpy as np
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 라쏘 회귀 모델 생성 및 학습
alpha = 0.1 # 정규화 강도를 조절하는 매개변수 (0.1은 예시로 조절 필요)
lasso_model = Lasso(alpha=alpha, random_state=42)
lasso_model.fit(X_train, y_train)
# 특성의 가중치 확인
feature_weights = lasso_model.coef_
print("Feature Weights:", feature_weights)
# 가중치가 0이 아닌 특성 선택
selected_features = np.where(feature_weights != 0)[0]
print("Selected Features:", selected_features)
coef_ 속성을 통해 특성의 가중치를 확인하고, 가중치가 0이 아닌 특성을 선택한다. 라쏘 회귀는 L1 정규화를 사용하며, 가중치가 0이 되는 특성이 생기므로 특성 선택 효과를 갖는다.
Ridge 회귀를 사용한 특성 선택은 주로 L2 정규화를 통해 특성의 가중치를 제어하여 수행된다. Ridge 회귀는 L2 정규화 항을 포함하고 있어, 가중치의 크기를 제한함으로써 모델의 복잡도를 조절한다.
from sklearn.datasets import load_iris
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
import numpy as np
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Ridge 회귀 모델 생성 및 학습
alpha = 0.1 # 정규화 강도를 조절하는 매개변수 (0.1은 예시로 조절 필요)
ridge_model = Ridge(alpha=alpha, random_state=42)
ridge_model.fit(X_train, y_train)
# 특성의 가중치 확인
feature_weights = ridge_model.coef_
print("Feature Weights:", feature_weights)
# 가중치가 0이 아닌 특성 선택
selected_features = np.where(feature_weights != 0)[0]
print("Selected Features:", selected_features)
coef_ 속성을 통해 특성의 가중치를 확인하고, 가중치가 0이 아닌 특성을 선택한다.
RFE는 모델을 반복적으로 학습시켜 가장 중요하지 않은 특성을 제거하는 방법으로, 모델 성능이 가장 좋아지는 특성의 개수를 찾을 수 있다.
주로 RFE는 선형 모델과 함께 사용되며, 각 반복에서 중요하지 않은 특성들을 제거한다.
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 가상의 데이터셋을 사용 (iris 데이터셋)
iris = load_iris()
X = iris.data
y = iris.target
# 데이터를 훈련 세트와 테스트 세트로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 선형 회귀 모델 생성
model = LinearRegression()
# RFE를 사용하여 특성 선택 (예: 2개의 특성 선택)
num_features_to_select = 2
rfe = RFE(model, n_features_to_select=num_features_to_select)
X_train_rfe = rfe.fit_transform(X_train, y_train)
# 선택된 특성 확인
selected_features = [i for i, selected in enumerate(rfe.support_) if selected]
print("Selected Features:", selected_features)
nfeatures_to_select 매개변수를 통해 선택할 특성의 개수를 조절할 수 있다. 선택된 특성은 rfe.support 속성을 통해 확인할 수 있다.