ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024-02-13
    스파르타/TIL(Today I Learned) 2024. 2. 14. 00:14

    마찬가지로 자격증강의듣고 정신없이 있다보니 12시 넘어서 글제목만 써두고 나중에 수정

    우선 심화프로젝트 진행하면서 기록해둔 부분을 보면 

    더보기

    코드 패치노트

     

    메인에 올린것

    object에서 category로 바꿔주는 것이 상황에 따라 다른데 지금 상황에서는 크게 이익되는 부분이 없는 듯하여 주석처리 (데이터 형식 바꿔주기type_change_category부분, 수치형 데이터에서 범주형 컬럼 추가해주는 부분에서 각 3부분 카테고리로 타입변경부분 주석처리, 학습 및 평가 부분에서 예측된 데이터 타입 int에서 category로 바꾼 부분 다시 주석처리) → 해주는게 나아보여서 다시 활성화…

    xgb 에러 수정

    에러난 이유 : xgb는 0부터 순차적으로 레이블? 클래스? 생각하는데 실제는 1,2,3,4,5,6,7로 설정해둬서 달라서 에러 그래서 우선 xgb만을 위해서 인코딩해주었던 값들을 -1씩 해서 새로운 시리즈로 만들었고 그런뒤 그 값을 y값에 입력해서 fit해주었다 그런 뒤

    - 상세 부분 중간 부분

    (이러면서 objective를 multi:softmax가 아닌 softprob으로 해주었다 →체크 필요(사실 다른 방식으로 에러 해결 시도하다가 바꿨던 부분인데 그대로 냅둬서 다시 softmax로 해줘도 될듯하다), 그리고 eval_metric=’merror’로 해줬는데 이부분은 이렇게 해주는게 제일 적합하지 않나라는 생각을 하고 있다 원래 기본값은 회귀에서는 rmse, 분류에서는 error로 기억하는데 우선 eval_metric는 학습 시켰을 때 얼마나 잘 되었는지 모델에서 판단하는 평가지표로 error를 쓰는데 다중분류할 때는 다르게 쓰는게 좋았던 것인지 아니면 1부터 해도 상관없게 해주고 싶다고 해서 추천받은게 저거였는지는 정확히 기억나지 않는다)

    =eval_metric관련 내용

    • rmse: 모델의 예측 오류의 제곱 평균을 나타냅니다. 즉, 모델이 예측한 값과 실제 값 사이의 차이의 제곱 평균을 의미합니다.
    • error: 모델의 분류 오류율을 나타냅니다. 즉, 모델이 예측한 클래스 레이블과 실제 클래스 레이블이 일치하지 않는 비율을 의미합니다.

    참고:

    • eval_metric 매개변수는 다양한 지표를 사용할 수 있으며, 사용 목적에 따라 적절한 지표를 선택해야 합니다.
    • eval_metric 매개변수는 여러 지표를 콤마로 구분하여 설정할 수 있습니다.
    • early_stopping_rounds 매개변수와 함께 사용하면 모델 평가 지표가 특정 횟수 동안 개선되지 않으면 학습을 조기 종료할 수 있습니다.
    • merror (Multiclass Error): 모델의 분류 오류율을 나타냅니다. 즉, 모델이 예측한 클래스 레이블과 실제 클래스 레이블이 일치하지 않는 비율을 의미합니다.
    • mlogloss (Multiclass Log Loss): 모델의 불확실성을 나타냅니다. 즉, 모델이 각 클래스에 대한 예측 확률이 얼마나 정확한지를 나타냅니다. =

    -

    예측값에 대해선 다른 것들과 동일하게 표시되는 것을 보고 싶어서 다시 +1해주어 통일시켜주었다(인코딩 값 범주를)

    그런데 이렇게 해서 해결하고나니 다른 에러가 떴다 feature_name에 특수기호 [,] >같은 것이 포함되어있다고 에러가 났다

    이것은 feature_name이 학습할 때 참고한 사항들?의 이름인데 따로 지정해주지 않으면(애초에 따로 지정하는 방법도 없는 것 같았다) 넣어준 X데이터의 컬럼들의 이름이 들어가게 되는데 컬럼명이 문제였다

    현재 모델에 들어가는 X_train의 컬럼에는 get_dummies로 인해서 컬럼명에 어마어마하게 많은 각 컬럼의 값들의 종류에 대해서 컬럼으로 추가되어있는데 이중 <1 year이라던가 10+ years가 문제가 되었어서 get_dummies만들고나서 get_dummies의 문제가 되는 해당 컬럼명을 미리 바꿔주었다 (관련해서 나중에 해당 근로기간을 다른 방식으로 인코딩할 경우 해당 컬럼명이 존재하지 않을 것이기 때문에 조건문 등으로 해당 컬럼이 있을 때만 해당 이름변경 작업을 해주도록 해야할 것 같다 →일단 러프하게 둘중하나라도 포함되어있다면 이름변경하도록 수정해주었음(둘다 근로기간에 포함되어있는 컬럼이라))

    ‎XGBoost 모델 학습 시 ValueError 발생 (클래스 레이블 오류)

     

    아직 메인에 안 올린 것

    oversampling 되는지 확인해뒀음 (ID를 살려서 oversampling이 안되서 제외하고 진행했으며, 또 평가 결과 더 낮게 나와서 의문이 생김)

    후에 디코딩할 부분

     

    더보기

    추가 아이디어

     

    각 학습 모델들 어떻게 학습하는지 중간에 뜯어서 볼 수 있다면 뜯어보고

    그 외 학습한 모델 자체는 어떻게 결과 나오는지 확인해보기

    그리고 그것으로 예측한 값 어떻게 나오고 있는지 확인해보기(왜 그런 값을 예측하게 되었는지 확인할 수 있다면 그 부분도 확인해보기)

    구성 대개편

    train, test 분리 나중에 해주기

    순서 변경

    전체적인 순서가 그렇다는 거지 전체적 진짜 순서는 사고흐름이 자연스러운대로 수정하는게 오히려 좋을듯

    EDA?

    ID가 유니크한 값인지 확인

    len(train['ID'].unique()) == len(train)

    display([train[column].unique() for column in catcols])

    # 의미가 겹치는 범주 처리
    train['근로기간'].replace({'3':'3 years', '<1 year':'< 1 year', '1 years':'1 year', '10+years':'10+ years'}, inplace=True)
    
    # 테스트셋에도 적용
    test['근로기간'].replace({'3':'3 years', '<1 year':'< 1 year', '1 years':'1 year', '10+years':'10+ years'}, inplace=True)
    
    # 데이터 중복 확인
    print(train.duplicated(keep='first').sum())
    

    수치형 데이터 시각화 일부분

    plt.figure(figsize=(12,12))
    for idx, feature in enumerate(numcols):
        plt.subplot(3,3,idx+1)
        sns.histplot(x=numcols[idx], data = train, kde=True)
    plt.tight_layout()
    plt.show()
    

    kde가 뭔지 확인해보고 tight_layout()이 뭔지 확인해보기

    근로기간 값들(형식 일치하지 않는 부분)이랑 관련 내용 위로 보내는게 어순상 자연스러울듯→사실 전처리라고 따로 해줄만한 부분은 아닌 듯하여 확인했으면 바로 해결해도 될듯

    이상치 결정기준

    z-score,

    IQR,

    ESD

    pairplot으로 대강 이상치 제거하고나서 다시 한번 봐줌

    0인 그룹과 아닌 그룹별 target 분포가 어떤지?

    인코딩 방식 category_encoders 찾아보기

    velog

    Category Encoders — Category Encoders 2.6.3 documentation

    from sklearn.preprocessing import OrdinalEncoder 에 대해서도 찾아보기

    from sklearn.model_selection import cross_val_score, cross_validate, KFold, StratifiedKFold 찾아보기

    from sklearn.feature_selection import RFECV 찾아보기

    보팅 알고리즘, soft voting

     

    '스파르타 > TIL(Today I Learned)' 카테고리의 다른 글

    2024-02-15  (0) 2024.02.16
    2024-02-14  (0) 2024.02.15
    2024-02-09~2024-02-12(설날연휴)  (0) 2024.02.14
    2024-02-08  (1) 2024.02.08
    2024-02-07  (1) 2024.02.07
Designed by Tistory.