해결된 질문
작성
·
33
0
1)혹시 현재 범주형 컬럼에 대해 라벨인코딩 한 후, 인코딩한 컬럼만 따로 학습에 사용하는 것이 아니라, 수치형 컬럼과 함께 전체 데이터(총 10개 컬럼)를 모델에 넣어 학습했습니다. 이때 오히려 성능이 더 잘 나왔는데, 이런 방식이 괜찮은지 확인 받고 싶습니다.
from sklearn.preprocessing import LabelEncoder
cols = list(train.select_dtypes(include = 'O'))
for col in cols:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
이후 전체 데이터를 사용해 모델 학습을 진행했습니다.
X_train, X_val, y_train, y_val = train_test_split(train.drop('성별',axis=1), train['성별'], test_size = 0.2, random_state = 0)
print(X_train.shape, X_val.shape, y_train.shape, y_val.shape) #(2800, 10) (700, 10) (2800,) (700,) 범주형데이터 인코딩한 상태로 10개 컬럼 그대로 가지고 학습
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
rf = RandomForestClassifier(random_state = 0, max_depth =5)
rf.fit(X_train,y_train)
rf_predpro = rf.predict_proba(X_val)
rf_rocauc = roc_auc_score(y_val,rf_predpro[:,1])
print(rf_rocauc) # train data 전체 데이터 사용 시 약 0.63, 범주형 컬럼 두 개만 썼을 때는 약 0.60
감사합니다
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. 변재현님께서 질문하신 내용에 대해 답변드리겠습니다.
범주형 데이터를 라벨 인코딩하여 수치형 데이터와 함께 전체 데이터를 학습에 사용하는 것은 일반적인 머신러닝 과정에서 자주 사용되는 접근 방식 중 하나입니다. 이렇게 했을 때, 성능이 더 잘 나왔다는 것은 데이터의 주요 특성을 모두 포함하여 모델을 학습시켰기 때문일 수 있습니다. 각자의 데이터를 이해하는 것이 중요하며, 성능 향상이 있었다면 이는 좋은 징조입니다.
전체 데이터 사용의 장점: 모델이 더 많은 정보를 학습할 수 있게 되어 성능이 향상될 수 있습니다. 특히 랜덤 포레스트와 같은 앙상블 모델은 다양한 피처에 대해 로버스트한 성능을 발휘할 수 있습니다.
모델 검증: 모든 피처를 사용하여 모델을 학습한 후에는 교차 검증을 통해 모델이 과적합되지 않았는지 추가적인 검토가 필요합니다.
성능 측정: 다양한 피처 조합으로 실험해 보는 것이 필요하며, 학습 데이터와 검증 데이터의 분포 차이를 최소화하여 일관된 결과를 얻을 수 있는지를 확인하는 것도 중요합니다.
관련하여 더 많은 정보를 얻고자 한다면, 다음 게시물을 참고하실 수 있습니다:
라벨 인코딩과 원핫 인코딩 후, 데이터 크기 비교: 라벨 인코딩과 원핫 인코딩에 대한 더 많은 논의와 실습 예제를 확인할 수 있습니다.
데이터 전처리 및 피처 엔지니어링: 데이터 전처리 단계에서의 피처 선택에 대해서 설명해 줍니다.
이러한 설명과 링크들이 변재현님이 실습하시는데 참고가 되셨으면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
네 감사합니다!