728x90
반응형
SMALL
무작위 탐색 (RandomizedSearchCV)
Random Search는 Grid Search의 단점들을 조금 보완하고자 나온 방법이다. 말 그대도 파라미터의 범위를 선정하고 값을 랜덤으로 설정하여 파라미터를 조합하고 평가하는 방식이다. Grid Search와 방식 자체는 유사하나 Grid Search보다 근사 최적값을 빨리 찾을 수 있다. 또한, 격자 형식의 Grid Search와 다르게 그 사이값들도 랜덤으로 탐색할 수 있기 때문에 그 안에서 더 좋은 값을 찾을 수 있다는 장점도 있다.
즉, 몇 번 학습과 평가를 반복할 것인지 시도의 수를 직접 설정할 수 있기 때문에 비교적 시간이 적게 걸린다. RandomizedSearchCV 가 사용하는 인자들은 GridSearchCV와 거의 동일하지만, n_iter라는 인자가 추가되었고 param_grid 대신 param_distributions를 사용한다.
매개 변수
estimator | 모델 객체 지정 |
param_distributions | 하이퍼파라미터 목록을 dictionary로 전달 |
n_iter | 파라미터 검색 횟수 |
scoring | 교차검증 시 fold 개수 |
cv | 평가 지표 |
n_jobs | 사용할 CPU 코어 개수 (1 : 기본값, -1 : 모든 코어 사용) |
메서드
fit(X, y) | 학습 |
predict(X) | 베스트 모델 예측 |
predict_proba(X) | 베스트 모델호출 |
결과 조회 변수
cv_results_ | 파라미터 조합별 결과 조회 |
best_params_ | 베스트 parameter 조합 조회 |
best_estimator_ | 베스트 모델 반환 |
예제
import sklearn
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import RandomizedSearchCV, train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
iris = load_iris()
label = iris.target
data = iris.data
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=1)
dt_clf = DecisionTreeClassifier(random_state=1)
dt_clf.fit(X_train, y_train)
pred = dt_clf.predict(X_test)
accuracy = accuracy_score(y_test, pred)
print('예측 정확도 : {0:.4f}'.format(accuracy))
print('DecisionTreeClassifier 하이퍼파라미터:\n', dt_clf.get_params())
param_dist = {
'criterion':['gini','entropy'],
'max_depth':[None,2,3,4,5,6],
'max_leaf_nodes':[None,2,3,4,5,6,7],
'min_samples_split':[2,3,4,5,6],
'min_samples_leaf':[1,2,3],
'max_features':[None,'sqrt','log2',3,4,5]
}
rand_search = RandomizedSearchCV(dt_clf, param_distributions = param_dist, n_iter = 50, cv = 5, scoring = 'accuracy', refit=True)
rand_search.fit(X_train, y_train)
print('best parameters : ', rand_search.best_params_)
print('best score : ', round(rand_search.best_score_, 4))
df = pd.DataFrame(rand_search.cv_results_)
df
estimator = rand_search.best_estimator_
pred = estimator.predict(X_test)
print('score: ', round(accuracy_score(y_test,pred), 4))
728x90
반응형
LIST
'Learning-driven Methodology > ML (Machine Learning)' 카테고리의 다른 글
[Machine Learning] Boosting Methods (2) (0) | 2023.07.11 |
---|---|
[Machine Learning] Boosting Methods (1) (0) | 2023.07.11 |
[Machine Learning] 그리드 탐색 (GridSearchCV) (0) | 2023.07.10 |
[Machine Learning] Histogram-Based Gradient Boosting Ensembles (0) | 2023.07.07 |
[LightGBM] 매개변수 조정 (Parameters Tuning) (3) (0) | 2023.07.03 |