: 실제값과 예측값의 차이에 대한 절대값의 평균
: ((실제값 - 예측값) / 실제값)의 절대값에 대한 평균
✔️ 사용했던 측정 공식 중에 1에 가까울 수록 좋은 모델이고 0에 가까울 수록 잘못 예측한 측정공식?
-> r2 score
: 실제값 - 예측값의 차이의 제곱의 평균
✔️ 분산은 어떨때 사용하나?
-> 기댓값(평균)으로부터 얼마나 떨어진 곳에 분포하는지를 가늠하는 숫자
✔️ 분산과 MSE의 차이?
-> 분산은 관측값에서 평균을 뺀 값을 제곱
MSE는 실제값에서 예측값을 뺸 값을 제곱
: MSE에 루트를 씌운 값
✔️ 회귀에서 Accuracy를 사용하지 않는 이유?
-> 소수점 끝자리까지 정확하게 예측하기 어려워서
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 : 나누는 비율
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()
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 수 만큼 실행