[멋쟁이 사자차럼 AIS7][0403:0404]

HI,HYEN·2022년 10월 31일

멋쟁이 사자처럼 AIS7

목록 보기
11/33

0403

MAE(Mean Absolute Error)

: 실제값과 예측값의 차이에 대한 절대값의 평균

  • 값이 작을수록 성능이 좋다고 해석

MAPE(Mean Absolute Percentage Error)

: ((실제값 - 예측값) / 실제값)의 절대값에 대한 평균

  • 값이 작을수록 성능이 좋다고 해석

✔️ 사용했던 측정 공식 중에 1에 가까울 수록 좋은 모델이고 0에 가까울 수록 잘못 예측한 측정공식?
-> r2 score

MSE(Mean Squared Error)

: 실제값 - 예측값의 차이의 제곱의 평균

  • 값이 작을수록 성능이 좋다고 해석
  • 분산과 유사한 공식

✔️ 분산은 어떨때 사용하나?
-> 기댓값(평균)으로부터 얼마나 떨어진 곳에 분포하는지를 가늠하는 숫자

✔️ 분산과 MSE의 차이?
-> 분산은 관측값에서 평균을 뺀 값을 제곱
MSE는 실제값에서 예측값을 뺸 값을 제곱

RMSE(Root Mean Squared Error)

: MSE에 루트를 씌운 값

  • 값이 작을수록 성능이 좋다고 해석
  • 표준편차와 유사한 공식

✔️ 회귀에서 Accuracy를 사용하지 않는 이유?
-> 소수점 끝자리까지 정확하게 예측하기 어려워서

0404

  • from sklearn.model_selection import train_test_split
    -> 무작위로 데이터셋을 train과 test로 나눔

  • train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42)
    - test_size : 나누는 비율

    • stratify : label의 클래스 분포를 균등하게 배분
    • ✔️ class 비율이 동일하게 나뉘었는지 어떻게 확인할까?
      -> countplot으로 시각화 한다
  • fig, axes = plt.subplots(nrows=1, ncols=2)
    sns.countplot(데이터, ax=axes[0]) # (0,0)번째에 그림
    sns.countplot(데이터, ax=axes[1]) # (0,1)번째에 그림

  • value_counts(normalize=True) : 비율 확인

  • GridSearchCV

  • GridSearchCV에 랜덤 값을 지정하면 RandomizedSearchCV처럼 사용 가능

from sklearn.model_selection import GridSearchCV

clf = GridSearchCV(model, parameters, n_jobs=-1, cv=5)
clf.fit(X_train, y_train)

clf.best_estimator_

pd.DataFrame(clf.cv_results_).sort_values('rank_test_score').head()
  • RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV

# max_depth에는 start, stop 값에 대한 랜덤 int 값 추출
# max_fetures에는 0~1 사이 값을 넣어줄 수 있도록 랜덤하게 생성
param_distributions = {'max_depth': np.random.randint(3, 20, 10),
                       'max_features': np.random.uniform(0.5, 1, 10)}

clfr = RandomizedSearchCV(model,
                          param_distributions=param_distributions,
                          n_iter=10, 
                          cv=5, 
                          scoring='accuracy', 
                          n_jobs=-1, 
                          random_state=42, verbose=3)

clfr.fit(X_train, y_train)

clfr.best_estimator_
clfr.best_params_

clfr.best_score_	# 베스트 스코어 보기

pd.DataFrame(clfr.cv_results_).nsmallest(5, 'rank_test_score')

GridSearchCV => 조합의 수 만큼 실행
RandomizedSearchCV => k-foldz(cv) 수 * n_iter 수 만큼 실행

profile
Today I Learn

0개의 댓글