지금은마라톤중

멋사 AI스쿨 TIL - (21) 본문

멋쟁이사자처럼/Python

멋사 AI스쿨 TIL - (21)

달리는중 2023. 3. 15. 17:10

2023.03.14

 

질문🙋🏻‍♂️: 만약 train에는 없는 데이터가 test에 생긴다면?
OneHotEncoder(handle_unknown='ignore')

-> 알 수 없는 카테고리가 발견되면 0으로 처리

 

 

● 머신러닝/딥러닝 알고리즘은 문자 데이터를 처리할 수 없다!

-> 알고리즘이 데이터를 처리할 수 있도록 feature engineering을 통해 데이터를 가공 feature engineering 중 하나인 Encoding Binary encoding vs one-hot-encoding

Binary 값은 굳이 one-hot-encoding해줄 필요가 없다. 배타적인 값이 중복을 일으키기 때문!

 

- pd.get_dummies() -> 문자 형태 데이터만 encoding 해서 데이터프레임을 변환해 줌

- scikit-learn에서는 numpy-array형태로 변환됨 -> 기존(숫자 형태여서 변환해줄 필요가 없었던 나머지 데이터) 데이터프레임과 병합해 줘야 함

 

 

 

  인코딩이 필요한 object 데이터만 가져오기

col_ohe = X_train.select_dtypes(include="object")

 

질문🙋🏻‍♂️: 왜 pd.DataFrame() 을 사용했나요 ?
feature names를 편하게 시각화하기 위해 판다스 데이터프레임으로 데이터를 가공해주었습니다 !

 

 

 

  교차검증이란?

Cross Validation

- 모델 학습 시 데이터를 train set와 validation set로 교차하여 선택하는 방법

- test set을 하나로 고정하지 않고 데이터의 모든 부분을 모델 검증에 사용하여 과적합을 방지한다.

- 모든 데이터셋을 학습과 검증에 활용할 수 있어 평가에 사용되는 데이터 편향을 방지한다.

- 특정 데이터 셋에 대한 과적합을 방지하고 데이터 셋 규모가 적을 때 과소적합을 방지한다.

단, 반복 학습 횟수가 증가하는 만큼 iteration이 돌기 때문에 모델 훈련 및 평가 시간이 증가한다

 

 

 

질문🙋🏻‍♂️: Hold-out-validation 과 Cross-validation의 장단점은 무엇일까요?

Hold-out validation
  • 장점:
    • 간단하고 빠르게 구현할 수 있습니다.
    • 모델을 한 번만 학습시키므로 리소스와 시간을 적게 소비합니다.
    • 테스트 데이터가 미리 구분되어 있어 모델 성능을 측정할 때 바이어스가 줄어듭니다.
  • 단점:
    • 데이터가 적을 경우, 테스트 데이터의 수가 적어져 모델의 성능을 정확하게 측정할 수 없습니다.
    • 데이터를 무작위로 나누기 때문에, 나누는 방식에 따라 모델의 성능이 달라질 수 있습니다.
Cross-validation
  • 장점:
    • 데이터를 여러 개의 fold로 나누어, 전체 데이터를 모두 활용할 수 있습니다.
    • 모델 성능의 평균과 표준편차를 계산하여 모델의 일반화 성능을 더 정확하게 평가할 수 있습니다.
    • 무작위로 fold를 나누기 때문에 모델의 성능이 fold에 영향을 받지 않습니다.
  • 단점:
    • Hold-out validation보다 더 많은 리소스와 시간이 필요합니다.
    • fold를 늘릴수록 모델을 학습해야 하는 횟수가 늘어나기 때문에 모델 학습에 소요되는 시간이 증가합니다.

 

 

 

 

 

  Hold-out-validation 과 Cross-validation의 사용하는 경우는?

Hold-out-validation
  • 대용량 데이터에서 빠르게 모델의 성능을 평가하고자 할 때
  • 데이터의 개수가 충분하거나 데이터셋의 크기가 작을 때
  • 특정 비율의 데이터를 테스트셋으로 떼어내어 사용하고자 할 때


Cross-validation
  • 모델의 성능을 정확하게 평가하고자 할 때
  • 데이터셋이 작아서 Hold-out-validation으로는 검증 데이터셋을 구성하기
    어렵거나 데이터가 적을 때
  • 모델의 일반화 성능을 파악하고자 할 때

 

 

- cross_validate : 교차 검증을 통해 지표를 평가하고 fit/score 시간도 기록

- cross_val_predict: 각 입력 데이터 포인트에 대해 교차 검증된 추정치를 생성합니다.

- cross_val_score : 교차 검증을 통해 점수를 평가

 

 

  n_jobs 

n_jobs 매개변수를 이용하여 사용할 코어 수를 지정할 수 있습니다.

사용하는 CPU 코어 개수에 비례해서 속도도 빨라집니다(코어를 두 개 사용하면 랜덤 포레스트의 훈련 속도도 두 배 빨라집니다).

하지만 n_jobs 매개변수를 코어 개수보다 크게 지정하는 것은 별로 도움이 되지 않습니다.

n_jobs=-1로 지정하면 컴퓨터의 모든 코어를 사용합니다

 

 

 

   K-Fold Cross-Validation(K겹 교차 검증)

 가장 일반적으로 사용되는 교차 검증 방법 진행 절차

- 원본 데이터를 동일한 크기의 fold k개로 분할

- 분할된 fold 중 test data로 할당된 적이 없는 fold 하나를 test data로 할당

- 이 과정을 k번 반복 (전체 데이터셋에 train/test fold가 할당되도록)

- data fold set에 대해서 나온 검증 결과들의 평균으로 최종 검증 결과 도출

 

  EDA의 주요 목적

가정을 세우기 전에 데이터를 살펴보는 데 도움을 주는 것입니다.

명백한 오류를 식별하고, 데이터 내의 패턴을 더 잘 이해하고, 이상값이나 비정상적인 이벤트를 감지하고,

변수 간의 흥미로운 관계를 찾는 데 도움이 될 수 있습니다

 

  트리의 품질 판단

분류에서 트리의 품질 -> 지니, 엔트로피(얼마나 값이 섞여있는지)

회귀에서 트리의 품질 -> absolute error, square error

 

 

  회귀 모델 평가 지표 :

MAE(Mean Absolute Error)

MSE(Mean Sqaured Error)

RMSE(Root Mean Sqaured Error)

RMSLE(Root Mean Square Log Error)

R-Squared(Coefficient of Determination, 결정계수)

 

 

  회귀모델의 성능 평가지표 해석 방법

분류 :

맞는 걸 얼마나 맞다고 예측했는지 , 틀린걸 얼마나 틀리게 예측했는지, 틀린걸 맞다고 예측한게 있는지 .... 등등

회귀 :

- 예측값과 실제값 차이가 얼마나 벌어져있는지를 확인한다.

- 특이값이 존재하면 오차에 대한 수치값이 크게 늘어난다

 

질문🙋🏻‍♂️: 회귀모델에서는 정답과 예측값이 얼마나 가까운지를 측정합니다. 정답과 예측의 차이를 어떻게 구할까요?

오차의 절댓값을 구하거나 => Absolute Error

양수로 만들어주기 위해서 제곱해서 => Squared Error

평균냅니다 =>  MAE, MSE

 

 

  r2_score (결정계수)

결정계수의 값은 0에서 1사이에 있으며, 종속변인과 독립변인 사이에 상관관계가 높을수록 1에 가까워진다.

즉, 결정계수가 0에 가까운 값을 가지는 회귀모형은 유용성이 낮은 반면, 결정계수의 값이 클수록 회귀모형의 유용성이 높다고 할 수 있다.

 

  잔차와 오차

 

잔차: 실제 값과 모델이 예측한 값의 차이, 각 데이터 포인트마다 계산

잔차 = 실제 값 - 모델이 예측한 값

오차: 잔차들의 평균적인 크기를 나타내는 값

오차 = (잔차_1 + 잔차_2 + ... + 잔차_n) / n

 

 

 

MAE -> 평균절대오차 오차의 절대값의 평균

abs(y_train - y_valid_predict).mean()

MSE -> 평균제곱오차 오차의 제곱의 평균

((y_train - y_valid_predict)**2).mean()

RMSE -> 평균제곱근오차 오차의 제곱의 평균의 제곱근

mse ** 0.5

 

 

질문🙋🏻‍♂️: 왜 RMSE 대신 RMSLE 를 사용할까요?(chat GPT 답변)
RMSE는 평균 제곱 오차의 제곱근으로, 실제 값과 예측 값 간의 차이를 측정하는 대표적인 지표입니다. 하지만 RMSE는 오차의 크기에 따라 가중치가 부여되어 모델 성능을 평가하는 데 있어서 이상치(outlier)에 민감한 경향이 있습니다. 즉, 예측 오차가 큰 값들이 RMSE를 크게 영향을 미치게 되어 모델 성능을 과대평가하는 경향이 있습니다.
반면에 RMSLE는 Root Mean Squared Log Error의 약자로, 예측 값과 실제 값의 로그를 취한 후, 그 차이를 제곱하여 평균한 값의 제곱근을 계산합니다. 이는 오차의 크기보다는 오차 비율에 집중하기 때문에 RMSE와는 달리 이상치에 덜 민감합니다. 또한 RMSLE는 값이 0에 가까워질수록 오차가 작아지므로, 모델 성능을 평가하는 데 있어서 오차의 크기보다는 오차의 상대적인 크기에 대한 정보를 더 잘 전달할 수 있습니다.
따라서, 모델의 성능을 평가하는 데 있어서 이상치(outlier)가 존재하는 경우나 예측값의 범위가 넓은 경우에는 RMSLE를 사용하는 것이 보다 적절합니다.

 

'멋쟁이사자처럼 > Python' 카테고리의 다른 글

멋사 AI스쿨 TIL - (23)  (0) 2023.03.23
멋사 AI스쿨 TIL - (22)  (1) 2023.03.16
멋사 AI스쿨 TIL - (20)  (0) 2023.03.15
멋사 AI스쿨 TIL - (19)  (0) 2023.03.09
멋사 AI스쿨 TIL - (18)  (0) 2023.03.07
Comments