- GridSearchCV
- 하이퍼파라미터 범위를 검사하여 최선의 모델을 선택하려면 GridSearchCV 사용
- 사용자는 하나 이상의 하이퍼파라미터에 대해 가능성이 있는 값을 정의한다.
- GridSearchCV는 교차검증을 사용하여 모델을 선택하는 브루트포스(brute-force)한 방법입니다.
- 지정된 조합만 보기 떄문에 해당 그리드를 벗어나는 곳에 좋은 성능을 내는 하이퍼 파라미터가 있다면 찾지못하는 단점이 있습니다.
from sklearn.model_selection import GridSearchCV
logistic = linear_model.LogisticRegression()
gridsearch = GridSearchCV(logistic, hyperparameters, cv=5, verbose=0) # 그리드 서치 객체 생성
best_model = gridsearch.fit(features, target) # 그리드 서치 수행
print('가장 좋은 penalty값:', best_model.best_estimator_.get_params()['penalty'])
print('가장 좋은 C값', best_model.best_estimator_.get_params()['C'])
- RandomuzedSerchCV
- 랜덤한 값을 넣고 하이퍼 파라미터를 찾습니다.
- 사용자가 제공한 분포(예: 정규분포나 균등 분포)에서 랜덤한 하이퍼파라미터 조합을 지정된 횟수만큼 추출하여 조사하는 것이다.
- 처음에는 범위를 넓게 지정하고 그중에 좋은 성능을 내는 범위를 점점 좁혀가면서 찾습니다
randomizedsearch = RandomizedSearchCV(logistic,
hyperparameters,
random_state=1,
n_iter=100,
cv=5,
verbose=0,
n_jobs=-1)
best_model = randomizedsearch.fit(features, target)
n_iter는 반복 횟수, cv가 샘플 개수
Fitting 5 folds for each of 5 candidates, totalling 25 fits => 5 fold 는 cv 조각 5개를 의미 / 5 candidates 는 n_iter를 의미한다
7:3 이나 8:2 로 나누는 과정은 hold-out-validation 입니다.
hold-out-validation
- 중요한 데이터가 train:valid 가 7:3이라면 중요한 데이터가 3에만 있어서 제대로 학습되지 못하거나 모든 데이터가 학습에 사용되지도 않습니다. 그래서 모든 데이터가 학습과 검증에 사용하기 위해 cross validation을 합니다.
- 한번만 나눠서 학습하고 검증하기 때문에 빠르다는 장점이 있습니다.
- 하지만 신뢰가 떨어지는 단점이 있습니다.
hold-out-validation 은 당장 비즈니스에 적용해야 하는 문제에 빠르게 검증해보고 적용해 보기에 좋습니다.
cross validation
속도가 오래걸린다는 단점이 있기도 하지만 validation의 결과에 대한 신뢰가 중요할 때 사용합니다.
예를 들어 사람의 생 명을 다루는 암여부를 예측하는 모델을 만든다거나 하면 좀 더 신뢰가 있게 검증을 해야겠죠.
너무 오래 걸린다면 조각의 수를 줄이면 좀 더 빠르게 결과를 볼 수 있고 신뢰가 중요하다면 조각의 수를 좀 더 크게 만들어 보면 됩니다
설명서는 보고싶다면 해당 명령어 뒤에 ?
ex)RandomForestClassifier?
RandomForestClassifier?
Init signature:
RandomForestClassifier( n_estimators=100,*, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None,)
Bike Sharing Demand 0601
우리나라의 따릉이 자전거 데이터라고 생각하면 된다
overview에 evaluation은 점수 평가 기준. bike sharing 경진대회에서는 RMSLE로 측정 매시간 빌려진 자전거의 수를 예측하는 문제(종속변수)
캐글 데이터 다운받는법
[Scikit-learn] 회귀 모델 성능 측정 지표 Python 구현
: MAE, MSE, RMSE, RMSLE
MAE(Mean Absolute Error) : 평균절대오차
- 모델의 예측값과 실제 값 차이의 절대값 평균
- 절대값을 취하기 때문에 가장 직관적임
- 가중치 없음(제곱, 로그 둘 다 없음)
- 절대값을 취하는 지표이기에 실제보다 낮은 값(underperformance)인지 큰 (overperformance)값인지 알 수 없다.
MSE (Mean Squared Error) : 평균제곱오차
- 모델의 예측값과 실제값 차이의 면적의(제곱)합
- 제곱을 하기 때문에 특이치에 민갑하다.
RMSE(Root Mean Squared Error) : 평균 제곱근 오차
- MSE에 루트를 씌운 값
- MAE보다 특이치에 Robust(강하다)
- RMSE와 거의 비슷하지만 오차를 구하기 전 예측값과 실제값에 로그를 취해주는 것만 다르다
- RMSE를 사용하면 지표를 실제 값과 유사한 단위로 다시 변환하는 것이기 때문에 MSE보다 해석이 더 쉽다.
- 최솟값과 최댓값의 차이가 큰 값에 주로 사용
- 상대적 Error를 측정
(값의 절대적 크기가 커지면 RMSE의 값도 커지지만, RMSLE는 상대적 크기가 동일하다면 RMSLE의 값도 동일) - 실제값보다 예측값이 클 때보다, 예측값이 더 작을 때 (Under Estimation) 더 큰 패널티를 부여
- 오차가 클수록 가중치를 주게 됨(오차 제곱의 효과)
RMSLE(Root Mean Squared Logarithmic Error )
- RMSLE는 예측과 실제값의 "상대적" 에러를 측정해줍니다.
- RMSE와 거의 비슷하지만 오차를 구하기 전에 예측값과 실제값에 로그를 취해준다는 차이 존재
- 오차가 작을수록 가중치를 주게 됨(로그의 효과)
- 최솟값과 최댓값의 차이가 큰 값에 주로 사용됩니다
- * 한계: 상대적 에러를 측정하기 때문에, 예를 들어서 1억원 vs 100억원의 에러가 0원 vs 99원의 에러와 같다 라고 나올 수 있음**
왜 1을 더한 후에 로그를 취할까요???
-> 마이너스 값이 나왔는데 mse를 계산하면 의도치않은 큰 오차가 나올 수 있다(두 값을 빼야 하는데 음수라 더 커짐). 따라서 마이너스 값이 나오지 않게 하기 위해 모든 값에 1을 더함으로써 마이너스 값이 나오지 않게 한다.
로그를 하는이유!
오른쪽으로 쏠리고 count값의 범위가 줄어들었다
▶️skewed값이 덜 skewed하게(덜 찌그러지게) 되고, 정규분포에 가까워진다
np.log의 밑 : e
⇒ 자연상수, 자연의 연속 성장을 표현하기 위해 고안된 상수 100%의 성장률을 가지고 1회 연속 성장할 때에 얻게되는 성장량
멋쟁이 사자처럼 AI School 7기 수업내용
'TIL > 머신러닝' 카테고리의 다른 글
11/10 머신러닝 주택가격 피처엔지니어링 (0) | 2022.11.10 |
---|---|
11.09 머신러닝 회귀 스케일링 피처 엔지니어링 (1) | 2022.11.10 |
공부한거 정리해보기 (0) | 2022.11.03 |
22.10.31 (0) | 2022.10.31 |
22/10/27 공부한 내용정리 (0) | 2022.10.27 |
댓글