ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Grid Search - model.best_score_ >>> nan
    Error 2023. 2. 6. 16:18
    gscv_xgb = GridSearchCV (estimator = xgb, param_grid = param_xgb, scoring ='accuracy', cv = 3, refit=True, n_jobs=1, verbose=2)
    gscv_xgb.fit(X_train_sc, y_train_sc)                        
    
    print("="*30)
    print('XGB 파라미터: ', gscv_xgb.best_params_)
    print('XGB 예측 정확도: {:.4f}'.format(gscv_xgb.best_score_))
    print("="*30)
    
    ==============================
    XGB 파라미터:  {'max_depth': 10, 'min_child_weight': 1, 'n_estimators': 200}
    XGB 예측 정확도: nan
    ==============================

    상황

    • Scikit-learn 라이브러리에서 제공하는 GridSearchCV 클래스를 사용하여 여러 하이퍼파라미터 시도 중에서 best score를 확인하고자 했음. (위 코드에서 gscv_xgb.bset_score_ 이 부분 !)
    • 근데, bset_score_ 결과가 nan으로 나옴

    분석

    • 검색을 해보니, model fit이 제대로 안 됐을 때 이런 문제가 발생한다고 함
      • 참고 링크 : https://datascience.stackexchange.com/questions/91225/why-gridsearchcv-returns-nan
      • 위 링크에서 error_score="raise"로 error_score 파라미터를 raise로 수정하면 에러를 raise 할 수 있다고 함. (에러 메세지 확인이 가능해진다는 말)
      • error_scor="raise"를 추가하고 에러 메세지를 확인해봤음
      • # 에러 메세지 : ValueError: continuous is not supported => 연속은 지원되지 않습니다 
      • 위와 같은 에러 메세지가 떴는데, 여기서 continuous 라는 게 연속형 변수를 뜻하는 것임
      • 코드를 다시 확인해보니 scoring = 'accuracy'라고 한 부분이 문제가 됐던 것.
      • 내가 푸는 문제는 회귀(target이 연속형 변수)문제인데, accuracy는 분류(target이 범주형 변수)에만 사용할 수 있는 성능 평가 지표이기 때문! == 회귀문제에는 accuracy 지표가 지원되지 않음
        • 연속형 변수 : 연속적인 값을 가질 수 있는 데이터
        • 범주형 변수 : 수치로 측정이 불가능한 자료 (Q. 이산형 데이터와 헷갈림. 지금은 개념이 명확하지가 않다. -> 나중에 개념 정리하자!)

    해결

    • scoring = 'r2' 으로 수정하여 해결

    r2 score란?

    • https://igija.tistory.com/256 참고
    • r2 score : R sqaured score(r 제곱 score), 회귀모델 성능 평가 지표
      •  회귀 제곱합(SSR) / 총제곱합(SST) : 설명 가능한  분산(또는 편차) 
        • 총제곱합 : 관측값과 평균의 차이에서 기반
        • 회귀제곱합 : 회귀예측값과 평균의 차이에서 기반 => 일반적으로 '실제 값의 분산 대비 예측값의 분산 비율' 로 정의
      • 회귀 모델이 얼마나 '설명력' 이 있느냐를 의미
      • 예측 모델과 실제 모델이 얼마나 강한 상관관계(Correlated)를 가지는가로 설명력을 요약할 수도 있음

     

    'Error' 카테고리의 다른 글

    TypeError: can't multiply sequence by non-int of type 'float'  (0) 2023.05.10
    FileNotFoundError  (0) 2023.04.14
    XGBoost predict 에러  (0) 2023.03.20
Designed by Tistory.