0504에서 이어짐

하이퍼파라미터 튜닝 - RandomSearchCV

모델의 적합한 파라미터 튜닝값을 알아보기 위해 RandomSearchCV를 사용하였다.

# RandomizedSearchCV 호출
from sklearn.model_selection import RandomizedSearchCV

# np.random.randint : 해당 범위 내 랜덤값을 정해줌
# np.random.uniform : 해당 범위 내 랜덤값을 중복되지 않는 수로 정해줌.

param_distributions = {"max_depth": np.random.randint(3, 100, 10), 
                       "max_features": np.random.uniform(0, 1, 10)}

# n_iter : 해당 작업을 얼마나 반복할지 결정
clf = RandomizedSearchCV(estimator=model, 
                         param_distributions=param_distributions,
                         n_iter=5,
                         n_jobs=-1,
                         random_state=42
                        )

clf.fit(X_train, y_train)

fit을 하여 최적의 파라미터 값을 알아본다.

best_model = clf.best_estimator_
best_model

결과값
RandomForestClassifier(max_depth=9, max_features=0.4723162098197786, n_jobs=-1,
                       random_state=42)

추가적으로 점수와 어떤 결과들이 있는지를 확인해본다.

# 최고의 점수값을 확인
clf.best_score_

결과값 : 0.826062394074446
# 파라미터 조사 결과를 df형태로 나타내고, rank 순으로 정렬.
pd.DataFrame(clf.cv_results_).sort_values("rank_test_score").head()

Best Estimator

# 데이터를 머신러닝 모델로 학습(fit)합니다.
# 데이터를 머신러닝 모델로 예측(predict)합니다.
best_model.fit(X_train, y_train)

제출

submit = pd.read_csv("data/titanic/gender_submission.csv")
file_name = f"{clf.best_score_}.csv"

submit["Survived"] = y_predict

submit.to_csv(file_name, index = False)

<aside> 🤔 Cross Validation과 Hold-out Validation의 차이

7:3 이나 8:2 로 나누는 과정은 hold-out-validation 입니다. hold-out-validation 은 중요한 데이터가 train:valid 가 7:3이라면 중요한 데이터가 3에만 있어서 제대로 학습되지 못하거나 모든 데이터가 학습에 사용되지도 않습니다. 그래서 모든 데이터가 학습과 검증에 사용하기 위해 cross validation을 합니다. hold-out-validation 은 한번만 나눠서 학습하고 검증하기 때문에 빠르다는 장점이 있습니다. 하지만 신뢰가 떨어지는 단점이 있습니다. hold-out-validation 은 당장 비즈니스에 적용해야 하는 문제에 빠르게 검증해보고 적용해 보기에 좋습니다. cross validation 이 너무 오래 걸린다면 조각의 수를 줄이면 좀 더 빠르게 결과를 볼 수 있고 신뢰가 중요하다면 조각의 수를 좀 더 여러 개 만들어 보면 됩니다.

</aside>

<aside> 💡 점수에 대한 강사님의 소견

타이타닉 데이터는 이미 답이 공개가 되어있기 때문에 치팅(답을 베껴서 제출)이 많습니다. 피처엔지니어링을 많이 하면 많이 할 수록 점수가 올라갈 것 같지만 내려갈 때가 더 많을 수도 있습니다. 점수를 올리고 내리는데 너무 집중하기 보다는 일단은 다양한 방법을 시도해 보는 것을 추천합니다. 다양한 사례를 탐색해 보는 것을 추천합니다. 팀을 꾸릴 때는 도메인 전문가, 프로그래머, 데이터 사이언티스트, 데이터 엔지니어 등으로 팀을 꾸립니다.

점수를 올리기 위해서는 EDA를 꼼꼼하게 하고 우리가 예측하고자 하는 정답이 어떤 피처에서 어떻게 다른 점이 있는지 특이한 점은 없는지 탐색해 보는게 중요합니다.

</aside>

Bike Shareing Demand 실습

경진대회의 성격 파악하기

어떤 문제 종류? ⇒ 회귀

무엇을 예측? ⇒ 매 시간 빌려진 자전거의 수의 예측