본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 7주차] MAE, MAPE, MSE, RMSE, train_test_split, 하이퍼파라미터튜닝, GridSearchCV, RandomizedSearchCV

by aimaimee 2023. 4. 22.

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

221031

✅ 0403번 실습파일

n_jobs : 사용하고 있는 장비에서 CPU 코어를 몇 개 사용할 것인지. -1은 전부 다 사용하겠다.
regplot : 실제값과 예측값의 차이가 잘 맞는다면, 회귀선에 맞춰서 점들이 그려질 것.
residplot : 회귀선을 일자로 그려준 것
r2_score : 1에 가까울 수록 좋은 점수


Q. MAE(Mean Absolute Error) 값을 error. describe()에서 찾는다면? mean
Q. 왜 오차에 절대값을 적용해줄까? 음수까지 포함되었을 때, 음수 양수를 동일하게 비교하기 위해서
MAE : error.describe()의 mean 값과 같다. abs(실제값-예측값).mean()

  • 부동산 가격의 예시, 1억짜리 집을 2억으로 예측, 100억짜리 집을 110억으로 예측
  • MAE에서는 1억차이, 10억차이
  • MSE는 오차 1억의 제곱, 10억의 제곱
  • Q. 이 상황에서는 어떤 측정지표를 사용하는게 좀 더 잘 측정할까?
  • 1번은 2배 잘못 예측, 2번은 10% 잘못 예측
  • Q. 왜 2번이 더 나은 모델로 투표했을까? 1번은 100% 잘못 예측, 2번은 10% 잘못예측
  • Q. MAE로 측정하면 어떤 모델이 더 잘 예측한 모델일까? 1번
  • MAE는 대회에서 사용할 때 많이 사용되지는 않지만, 다른 측정공식을 이해할 때 도움이 된다.

MAPE

뒤에서부터 읽으면 해석이 된다. abs(실제값-예측값 / 실제값).mean()

  • MAE 는 65.33- , MAPE 는 0.58-
  • Q. MAPE 값은 작을수록 잘 예측했다? 클수록 잘 예측했다? MAPE는 오차를 구한 것이기 때문에 작을수록 잘 예측한 것이다.
  • 회귀의 측정 공식은 대체로 값이 작을수록 좋다. 하지만 1에 가까울수록 좋은 것도 있다.
  • Q. 사용했던 측정 공식 중 1에 가까울수록 좋은 모델이고, 0에 가까울수록 잘못 예측한 측정 공식은 무엇일까? r2_score
  • 사자 Q. MSE가 절댓값에 비해 오차가 큰 값에 대해 패널티를 더 많이 줄 수는 있지만 예측비율 (부동산 가격 예시처럼 2배의 오차인지 10%의 오차인지)에 대해서는 파악할 수 없는 건가요?
  • MAPE를 사용하면 오차의 비율을 구해볼 수 있다.

MSE

  • Q. square 를 해주는 이유? 절댓값을 씌우는 것과 마찬가지로, 부호를 무시할 수 있다. (-3)**2 = 9
  • 분산의 측정공식과 거의 똑같다.
  • Q. MSE가 분산의 공식과 거의 비슷한데, 분산은 어떨때 사용할까? 확률변수가 기댓값으로부터 얼마나 떨어진 곳에 분포하는지 가늠하는 숫자.
  • 분산은 차이값의 제곱의 평균 / 관측값에서 평균을 뺀 값을 제곱 (MSE는 실제값에서 예측값을 뺀 값)
  • 분산 위키 문서 : https://ko.wikipedia.org/wiki/%EB%B6%84%EC%82%B0
  • pow()적용해도 제곱이 된다.
  • 2차 함수 위키 문서 : https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%B0%A8_%ED%95%A8%EC%88%98
  • 오차가 크면 클수록 패널티를 많이 준다.

RMSE

Q. 회귀에서 Accuracy를 사용하지 않는 이유?

  • 소수점 끝자리까지 정확하게 예측하기 어려워서

사자Q. 100억을 110억으로 예측한 모델 =>1, 100억을 105억으로 예측한 모델 =>2, 두 모델이 있을때 어떤 모델이 더 잘 예측한 모델인가요? MSE로 봤을떄 1번은 100이고 2번은 25인데 그럼 2번 모델이 잘 예측한게 맞나요?
Q. 왜 MAE를 사용했을 때 제대로 오차를 구하기 어려울까? 기울기의 차이가 없어서. (그래프 확인)


트리 알고리즘 : mode.featureimportances, 피처 중요도 시각화
예측

  • y_test.describe()하면 0이기 때문에 model.predict(X_test) 값을 y_test_pred에 넣어준다.
  • train과 test의 실제값, 예측값 비교

✅ 0404 실습파일

X=df[feature_names]
y=df[label_name]
train_test_split

  • test_size를 8:2로 나누고 싶으면 test_size = 0.2
  • shuffle = True : 섞는 것이 기본 값
  • X_train을 출력하면 인덱스 번호 순서가 다 다르다. shuffle
  • stratify : train 셋과 test 셋을 분리할 때, 균형 있게 학습 시키기 위해서, train set의 비율대로 test set을 나누고자 할 때.(class비율을 동일하게 한다.)
  • Q. class의 비율이 동일하게 나뉘었는지 어떻게 확인해볼까? : countplot
    countplot으로 시각화를 해본다.
  • train과 test의 레이블 값이 비슷한 비율인지 확인
  • subplots를 활용
  • plt.subplots가 튜플 형태로 나온다. 앞에 것은 Figure, 다음 내용은 AxesSubplot을 의미한다.
  • fig, axes로 설정
  • nrows, ncols 몇 개 그릴 것인지
  • ax=axes[0] 첫번째 도화지에 넣겠다.
    y_train.value_counts(normalize=True)
    y_test.value_counts(normalize=True) 로 비율 확인

하이퍼 파라미터 튜닝

GridSearchCV

  • 모델의 하이퍼파라미터 후보군들을 완전 탐색하여 검색
  • 검증하고 싶은 하이퍼파라미터 수치를 지정하면 수치별 조합을 모두 검증
  • 후보군의 개수가 많을수록 찾는 시간이 오래 걸림
  • max_depth랑 max_features의 조합을 찾음
  • verbose 높을수록 점수가 좀 더 자세하게 로그가 출력이 된다.
  • 1일 때, 2일 때, 3일 때
  • verbose했을 때 Fitting 5 folds for each of 45 candidates, totalling 225 fits 출력됨.
  • scroing=str, callable, list 등 여러 가지를 지정할 수 있다. accuracy가 기본 값. 분류 모델일 때 기본값, 회귀 모델일 때 기본값

RandomizedSearchCV

  • 랜덤한 값들을 지정하여 성능을 평가하고 가장 좋은 성능을 내는 파라미터를 찾음.
  • 빠른 속도로 최적의 파라미터 조합을 검색
  • 후보군을 신중히 결정하여야 하고, 최적의 하이퍼파라미터를 찾는다는 보장이 없다.
  • normal distribution / uniform(일정하게)
  • 분류에만 쓸 수 있는 알고리즘 : 로지스틱 regression
  • cv : crossvalidation 조각 갯수
  • n_iter=10 : 10이 디폴트값, 반복 돌리는 횟수
  • np.random.uniform(0.5, 1, 10) : 0.5에서 1사이의 값을 생성
  • n_iter*cv = 50fits 생성

하이퍼 파라미터 : https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection
svc는 classifier, svr은 regressor


📌숙제풀이

DT할 때 남성인가?가 최상위 노드에 있다.
범주형 데이터의 선 그래프를 그려줄 때는 pointplot을 사용한다.


📌JD 공유


타이타닉 데이터셋 : https://www.kaggle.com/competitions/titanic

퀴즈

9/10점
틀린 문제

  • 8번 문제 : train 데이터와 test데이터로 찾아낼 수 있는 값
    Finding parameters, Final Evaluation

댓글