해결된 질문
작성
·
194
0
강사님은 수치형 데이터와 범주형 데이터를 n_train, c_train, n_test, c_test로 분리하셨더라구요.
근데 꼭 분리 안하고, col 명만 설정해서 그냥 피처엔지니어링 하면 안되는 걸까요?
근데 저는 점수가 0.75 정도밖에 안나왔습니다 ㅎㅎㅎ
강사님은 0.8 넘게....
제가 쓴 코드입니다..
# 수치형 스케일링
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
cols = ['Age', 'AnnualIncome','FamilyMembers', 'ChronicDiseases'] <- 제가 변환하고 싶은 int 형 변수들을 넣었어요. 타겟레이블이 int형인데 뺄줄 몰라서 그냥...
train[cols] = scaler.fit_transform(train[cols])
test[cols] = scaler.fit_transform(test[cols])
# 라벨인코딩
from sklearn.preprocessing import LabelEncoder
cols2 = train.select_dtypes(include="object").columns
for col in cols2 :
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
이러고 데이터 X_tr, X_val, y_tr, y_val로 분리하고 랜덤포레스트를 적용헀습니다!
답변 2
1
기출3에서만 n_train, c_train, n_test, c_test로 분리했고, 나머지는 그대로 진행합니다.
분리 없이 진행하시죠!!
성능은 검증데이터 기준이라 차이가 있을 순 있어요 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
져니님의 질문에 대해 회신 드립니다. 데이터 전처리 과정에서 수치형 데이터와 범주형 데이터를 명시적으로 분리하는 작업은 비록 추가 작업으로 느껴질 수 있지만, 이후 각 타입별로 다른 처리(예: 스케일링, 인코딩)를 적용할 때 명확한 구분을 가능하게 하여 결과적으로 데이터 전처리의 품질을 향상시킬 수 있습니다.
수치형 데이터와 범주형 데이터를 분리하지 않고 전체적인 처리를 진행하는 것이 틀린 방법은 아니지만, 세심한 조정이 가능한지 여부가 핵심입니다. 특히, 특정 피처들에 대한 스케일링이나 인코딩 작업을 보다 정밀하게 하고자 할 때, 이러한 분리 작업이 유용합니다.
져니님의 경우, 스케일링을 수치형 데이터에 적용하고, 범주형 데이터에 대해 라벨 인코딩을 적용하는 방법을 사용하셨는데, 이는 올바른 접근입니다. 점수에 차이가 나는 부분은 모델의 파라미터 조정, 추가적인 피처 엔지니어링, 데이터의 누락값 처리, 이상치 제거 등 다른 요인들에 의해서도 발생할 수 있습니다.
제가 찾은 유사한 질문 중 하나는 작업형2 기출문제 3회 질문입니다. 이 답변에서 강사님은 수치형 데이터와 범주형 데이터를 분리하고 전처리하는 것이 항상 필요하지 않다고 조언합니다. 대신, pd.get_dummies()
함수를 사용하여 데이터를 직접 원-핫 인코딩하는 방식을 권장하고 있습니다.
그러나 져니님 사례에서와 같이, 점수 차이가 나는 부분은 분리의 유무 이외에도 다양한 요인에 의해 발생할 수 있습니다. 따라서, 데이터 분리 및 전처리 방법뿐만 아니라, 모델 선정 및 파라미터 조정에 더 깊은 주의를 기울여야 할 필요가 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.