TIL/머신러닝

11.08 머신러닝 bike log 회귀

monawa 2022. 11. 9.
728x90

- 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로 측정 매시간 빌려진 자전거의 수를 예측하는 문제(종속변수)

 

캐글 데이터 다운받는법 

download all 클릭시 해당 데이터셋파일일괄 다운로드 \


[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기 수업내용

728x90

댓글