작성
·
83
0
RandomForestClassifier만 적용하여 앙상블 학습하였을때
ROC_AUC_SCORE가 1.0이 나오는데,, 연습문제 동영상과 같이 0.84.... 가 나오지 않고 1.0이 나오는 이유가 뭘까요 혹시 과적합이라면 오답이라고 할 수 있을까요?
전체 소스 공유합니다.
import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestClassifier
df = sns.load_dataset('titanic')
# 결측치 제거
df['age'] = df['age'].fillna(df.age.mean())
df['deck'] = df.deck.fillna(method='bfill')
df['deck'] = df.deck.fillna(method='ffill')
df['embarked'] = df.embarked.fillna('S')
df['embark_town'] = df.embark_town.fillna('Southampton')
df.isna().sum()
from sklearn.preprocessing import LabelEncoder
obj = ['sex', 'embarked', 'class', 'who', 'adult_male', 'deck', 'embark_town', 'alone']
encoder = LabelEncoder()
for i in obj:
df[i] = encoder.fit_transform(df[i])
category = ['pclass', 'sex', 'class', 'who', 'adult_male', 'alone']
for i in category:
df[i] = df[i].astype('category')
df = pd.get_dummies(df)
scaler = MinMaxScaler()
lst = ['age', 'fare']
scaler.fit(df[lst])
df[lst] = scaler.fit_transform(df[lst])
y = df['survived']
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.3, stratify=y, random_state=23)
ml = RandomForestClassifier()
ml.fit(X_train, y_train)
pred = pd.DataFrame(ml.predict_proba(X_test))
from sklearn.metrics import accuracy_score, roc_auc_score
print(roc_auc_score(y_test, pred.iloc[:, 1]))
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변입니다. RandomForestClassifier
를 사용하여 앙상블 학습을 했을 때 ROC_AUC_SCORE
가 1.0이 나오는 것은 매우 높은 성능을 의미합니다. 하지만, 이 경우 모델이 훈련 데이터에 과적합되었을 가능성을 고려해볼 수 있습니다. 과적합은 모델이 훈련 데이터에 너무 잘 맞게 학습되어 실제 상황이나 새로운 데이터에는 잘 일반화되지 않는 상태를 말합니다.
ROC_AUC_SCORE가 1.0이라고 바로 오답이라고 할 수는 없습니다. 단, 실제 환경에서는 이러한 완벽한 성능을 기대하기 어렵기 때문에 모델의 과적합 여부를 추가적으로 분석해 볼 필요가 있습니다. 예를 들어, 다른 검증 방법을 사용해 보거나, 교차 검증을 진행하여 모델의 일반화 성능을 평가해 볼 수 있습니다.
과적합을 줄이기 위한 몇 가지 방법은 다음과 같습니다.
- 데이터의 양을 늘리기
- 모델의 복잡도를 줄이기
- 정규화 기법 사용하기
- 피처의 수를 줄이기
- 앙상블 학습의 파라미터 조정하기(예: max_depth
, min_samples_split
등)
프로젝트의 목적과 데이터에 맞는 최적의 모델 성능을 찾기 위해 여러 실험을 해보시길 권장합니다.