인프런 커뮤니티 질문&답변

미미밍님의 프로필 이미지

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

roc_auc_score 관련 질문 (캐글 흡연자 예측(분류))

해결된 질문

24.06.18 22:55 작성

·

101

·

수정됨

0

선생님 안녕하세요. 랜덤포레스트랑 roc_auc_score 관련 질문 드립니다.

 

  1. 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까지만 하면 되는게 맞을까요?

 

  1. 그리고 train_test_split 할때는 random_state = 42(숫자 고정) 하는데
    model = RandomForestClassifier() 이렇게 전부다 생략을 해버리니


    이게 실행시킬때마다 고정이 안돼서 그런가 값이 바뀌더라고요.
    어느 분은 n_estimators도 하시고, random_state도 작성하시는 분이 계신데
    시험환경에서 ()이렇게 비워두면 큰 문제가 될까요?

답변 1

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

2024. 06. 19. 09:48

  1. 네 맞습니다. 다만 1을 묻고 있는 것이 맞는지는 확인해주세요:) 일반적으로 0을 묻지는 않는데 만약 문제에서 묻는다면 [:,0]입니다.

  2. 아니요. 큰 문제가 되지는 않습니다. 여력이 되면 튜닝을 해주시고 안된다면 RandomForestClassifier() 외에 lightgbm 하나 더 준비해서 비교하면 어떨까 싶네요!