해결된 질문
작성
·
139
·
수정됨
0
선생님 안녕하세요. 랜덤포레스트랑 roc_auc_score 관련 질문 드립니다.
roc_auc_score는 이진분류라서 [:,1]을 해야하는 걸로 알고 있는데요
train = pd.read_csv('/kaggle/input/smoker-binary-class/train.csv')
test = pd.read_csv('/kaggle/input/smoker-binary-class/test.csv')
train.isnull().sum() #결측치없음
# train.info() -> 전부다 float형
# print(train.shape,test.shape) (15000, 24) (10000, 23)
# train.head(2)
#id삭제
train = train.drop(columns = 'id')
test_id = test.pop('id')
y= train.pop('smoking')
#train_test_split
from sklearn.model_selection import train_test_split
x_tr,x_val,y_tr,y_val = train_test_split(train,y,test_size = 0.2, random_state = 42)
# print(x_tr.shape,x_val.shape,y_tr.shape,y_val.shape) (12000, 22) (3000, 22) (12000,) (3000,)
#랜포
from sklearn.ensemble import RandomForestClassifier
model= RandomForestClassifier()
model.fit(x_tr,y_tr)
pred = model.predict_proba(x_val)[:,1]
from sklearn.metrics import roc_auc_score
# print(roc_auc_score(y_val,pred))
# 0.8775897293980339
answer = model.predict_proba(test)[:,1]
pd.DataFrame({'id' : test_id, 'smoking' : answer}).to_csv('12345.csv',index = False)
만약 roc_auc_score가 아닐경우
pred = model.predict(x_val)
print(f1_score(y_val,pred))
answer = model.predict(test)
pred = model.predict_proba(x_val)[:,1]
from sklearn.metrics import roc_auc_score
# print(roc_auc_score(y_val,pred))
# 0.8775897293980339
answer = model.predict_proba(test)[:,1]
이렇게 pred = 하는 부분에서 [:,1] 하고 정답제출(answer) 부분역시 이렇게 동일하게 하면 되는게 맞는지 문의드립니다.
만약 roc_auc_score가 아닌 경우에는 그냥 pred = predict까지만 하면 되는게 맞을까요?
그리고 train_test_split 할때는 random_state = 42(숫자 고정) 하는데
model = RandomForestClassifier() 이렇게 전부다 생략을 해버리니
이게 실행시킬때마다 고정이 안돼서 그런가 값이 바뀌더라고요.
어느 분은 n_estimators도 하시고, random_state도 작성하시는 분이 계신데
시험환경에서 ()이렇게 비워두면 큰 문제가 될까요?
답변 1
0
네 맞습니다. 다만 1을 묻고 있는 것이 맞는지는 확인해주세요:) 일반적으로 0을 묻지는 않는데 만약 문제에서 묻는다면 [:,0]입니다.
아니요. 큰 문제가 되지는 않습니다. 여력이 되면 튜닝을 해주시고 안된다면 RandomForestClassifier() 외에 lightgbm 하나 더 준비해서 비교하면 어떨까 싶네요!