해결된 질문
작성
·
235
0
안녕하세요, 선생님
매번 감사합니다.
다름 아니라 오픈된 다른 유형의 문제를 풀이해보고 있는데요.
아래 해당 train/test 데이터셋의 경우 원핫인코딩 이후 랜덤포레스트 모델링 예측시 에러가 발생하길래 확인해보니,
train의 object형 데이터의 unique한 갯수(gender 컬럼의 값이 3개)와
test의 object형 데이터의 unique한 갯수(gender 컬럼의 값이 2개)가 다르더라고요
이럴경우 train과 test를 합쳐서(Concat)
피처 엔지니어링해야된다고 배운 거 같은데 각각 train/test 피처 엔지니어링하고,
train_test_split 과정에서 train할 데이터를 선택할 때 unique 갯수 차이로 1개더 생성된 'gender_Other'라는 컬럼을 drop시키고 데이터 분리, 모델링 진행해도 평가받을때 문제없을까요?
train.drop(['stroke', 'gender_Other']
ㅇ 전체 코
import pandas as pd
train= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/stroke_/train.csv')
test= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/stroke_/test.csv')
test_id = test.pop('id')
train = train.drop('id', axis=1)
train['age'] = train['age'].str.replace('\*', '').astype('int')
train = pd.get_dummies(train)
test = pd.get_dummies(test)
train['bmi'] = train['bmi'].fillna(train['bmi'].median())
test['bmi'] = test['bmi'].fillna(test['bmi'].median())
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop(['stroke', 'gender_Other'], axis=1), train['stroke'],
test_size=0.15, random_state=0)
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(max_depth=5, random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict_proba(X_val)
from sklearn.metrics import roc_auc_score
print(roc_auc_score(y_val, pred[:,1]))
pred = rf.predict_proba(test)
pd.DataFrame({
'id' : test_id,
'stroke' : pred[:,1]
}).to_csv('0000.csv', index=False)
늦은 시간에 답변 감사합니다. 선생님
그럼 훈련용/검증용 데이터 구분시에도 위와 같은 방법으로 해도 평가에는 상관없는거죠?
ㅇ train gender 컬럼과 test gender 컬럼내 유니크한 값 수가 달라
- train은 3개, test는 2개
train/test를 각각 원핫인코딩하고 아래와 같이 1개 컬럼이 추가로 있는 train의 gender_Other을 삭제해버림
X_tr, X_val, y_tr, y_val = train_test_split(train.drop(['stroke', 'gender_Other'], axis=1), train['stroke'], test_size=0.15, random_state=0)