효과
대표적인 종류
코드 예시
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 예제 데이터 (2차원 데이터)
data = np.array([
[2.5, 2.4],
[0.5, 0.7],
[2.2, 2.9],
[1.9, 2.2],
[3.1, 3.0],
[2.3, 2.7],
[2, 1.6],
[1, 1.1],
[1.5, 1.6],
[1.1, 0.9]
])
# PCA를 사용하여 1차원으로 축소
pca = PCA(n_components=1)
data_1d = pca.fit_transform(data)
Feature Selection 방법 3가지
코드 예시
import pandas as pd
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.preprocessing import LabelEncoder
# 예제 데이터 생성
data = pd.DataFrame({
'Age Group': ['20대', '30대', '40대', '50대', '20대', '30대', '40대', '50대'],
'Income Level': ['Low', 'Medium', 'High', 'Medium', 'High', 'Low', 'Medium', 'High'],
'Promotion Response': ['Responded', 'Not Responded', 'Responded', 'Responded', 'Not Responded', 'Responded', 'Not Responded', 'Responded']
})
# 범주형 변수를 레이블 인코딩
label_encoders = {}
for column in ['Age Group', 'Income Level', 'Promotion Response']:
le = LabelEncoder()
data[column] = le.fit_transform(data[column])
label_encoders[column] = le
# 독립 변수 (Age Group, Income Level)와 종속 변수 (Promotion Response) 구분
X = data[['Age Group', 'Income Level']]
y = data['Promotion Response']
# SelectKBest와 chi2 사용 (상위 1개 변수 선택)
selector = SelectKBest(score_func=chi2, k=1)
X_new = selector.fit_transform(X, y)
# 선택된 특성과 점수 출력
selected_features = X.columns[selector.get_support()]
chi2_scores = selector.scores_
print("선택된 특성:", selected_features)
print("chi2 점수:", chi2_scores)
선택된 특성: Index(['Age Group'], dtype='object’)
chi2 점수: [0.8 0.53333333]
Age Group
이 목표 변수와 유의미한 연관성이 있을 가능성이 있다고 판단되어 선택된다.코드 예시
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 데이터셋 로드
data = load_iris()
X = data.data
y = data.target
# 훈련과 테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 모델 정의
model = LogisticRegression(max_iter=1000)
# RFE를 사용하여 최적의 특성 조합 찾기
rfe = RFE(estimator=model, n_features_to_select=2) # 2개의 최종 특성을 선택
rfe.fit(X_train, y_train)
# 결과 출력
print("Selected features:", rfe.support_)
print("Feature ranking:", rfe.ranking_)
Selected features: [False False True True]
Feature ranking: [3 2 1 1]
petal length (cm)
)과 4번째 특성(petal width (cm)
)이 선택되었다.코드 예시
# 필요한 라이브러리 불러오기
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
# 데이터 불러오기
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = data.target
# Random Forest 모델 학습
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X, y)
# Feature Importance 추출
rf_importances = rf_model.feature_importances_
rf_feature_importance_df = pd.DataFrame({'Feature': X.columns, 'Importance': rf_importances})
rf_feature_importance_df = rf_feature_importance_df.sort_values(by='Importance', ascending=False)
petal length (cm)
)과 4번째 특성(petal width (cm)
)이다.