학습시킨 모델은 튜닝을 통해서 전보다 정확도 높은 모델을 만들 수 있습니다
그리드 탐색
튜닝을 하는 방법들 중 가장 단순한 방법은 만족할 만한 하이퍼파라미터 조합을 찾을 때까지 수동으로 하이퍼파라미터를 조정하는 것입니다. 예를 들어 for문을 통해서 가장 정확도 높은 하이퍼파라미터를 찾는 것입니다, 하지만 이는 많은 경우의 수를 탐색하기에는 시간이 부족할 수도 있습니다.
대신 sklearn의 GridSearchCV를 사용하는 것이 좋습니다. 탐색하고자 하는 하이퍼파라미터와 시도해볼 값을 지정하기만 하면 됩니다.
그러면 가능한 모든 하이퍼파라미터 조합에 대해 교차 검증을 사용하여 평가하게 됩니다.
예를 들어 다음 코드는 RandomForestRegressor에 대한 최적의 하이퍼파라미터 조합을 탐색합니다.
> 3 * 3 * 2 * 3 = 54개의 경우의 수를 고려하여 가장 정확도 높은 하이퍼파라미터를 찾아줍니다
from sklearn.model_selection import GridSearchCV
full_pipeline = Pipeline([
("preprocessing", preprocessing),
("random_forest", RandomForestRegressor(random_state=42)),
])
param_grid = [
{'preprocessing__geo__n_clusters': [5, 8, 10],
'random_forest__max_features': [4, 6, 8]},
{'preprocessing__geo__n_clusters': [10, 15],
'random_forest__max_features': [6, 8, 10]},
]
grid_search = GridSearchCV(full_pipeline, param_grid, cv=3,
scoring='neg_root_mean_squared_error')
grid_search.fit(housing, housing_labels)
위에서 찾은 최적의 조합을 확인할 수도 있습니다.
grid_search.best_params_ #{'preprocessing__geo__n_clusters': 15, 'random_forest__max_features': 6}
물론 평가 점수도 확인할 수 있습니다.
cvres = grid_search.cv_results_
for mean_score, params in zip(cvres["mean_test_score"], cvres["params"]):
print(np.sqrt(-mean_score), params)
랜덤 탐색
그리드 탐색 방법은 비교적 적은 수의 조합을 탐구할 때는 괜찮지만 하이퍼파라미터 탐색 공간이 너무 커지면 범위를 설정하기 곤란해집니다. 이런 상황에서는 RandomizedSearchCV를 사용하는 편이 더 좋습니다.
RandomizedSearchCV는 GridSearchCV와 거의 같은 방식으로 사용하지만 가능한 모든 조합을 시도하는 대신에 지정한 횟수만큼 조합을 랜덤으로 시도하여 평가합니다.
from sklearn.model_selection import RandomizedSearchCV
full_pipeline = Pipeline([
("preprocessing", preprocessing),
("random_forest", RandomForestRegressor(random_state=42)),
])
param_distributions = {
'preprocessing__geo__n_clusters': [5, 8, 10, 15],
'random_forest__max_features': [4, 6, 8, 10]
}
random_search = RandomizedSearchCV(
full_pipeline,
param_distributions,
n_iter=10, # 랜덤으로 시도할 횟수
cv=3,
scoring='neg_root_mean_squared_error',
random_state=42
)
random_search.fit(housing, housing_labels)
앙상블 방법
모델을 세밀하게 튜닝하는 또 다른 방법으로는 최상의 모델을 연결하는 것입니다. 이것이 정확히 무엇이면 앙상블이란 머신러닝 분야를 가장 앞서가고 있는 기법으로 이는 여러 모델한테 물어봐서 좋은 결과를 나타내는 기법입니다. 이때 앙상블에 사용될 수 있는 가장 좋은 모델 중 하나가 Decision Trees입니다
간단하게 하나의 모델만으로는 성능이 낮을 수 있으니 여러 모델을 사용해서 성능을 높일 수 있도록 만들기
'AI > Machine Learning' 카테고리의 다른 글
사이킷런 scikit-learn 이란? (0) | 2024.07.09 |
---|---|
여러 개의 레이블을 갖는 하나의 데이터 분류하기 - 다중 레이블 분류 (2) | 2024.07.08 |
머신러닝 분류 (숫자 예측) (0) | 2024.07.07 |
머신러닝 회귀 (집값 예측하기) (0) | 2024.06.27 |
머신러닝 시작하기 (0) | 2024.06.26 |