제퍼넷 로고

PyCaret에서 tune-sklearn을 사용한 베이지안 하이퍼 파라미터 최적화

시간

PyCaret에서 tune-sklearn을 사용한 베이지안 하이퍼 파라미터 최적화

로우 코드 Python ML 라이브러리 인 PyCaret은 생성 된 모델의 하이퍼 매개 변수를 조정하는 여러 방법을 제공합니다. 이 게시물에서는 Ray Tune이 PyCaret과 어떻게 통합되는지, 알고리즘과 분산 컴퓨팅을 활용하여 기본 임의 검색 방법보다 우수한 결과를 얻는 것이 얼마나 쉬운 지 보여 드리고 싶습니다.


By 안토니 바움, PyCaret의 핵심 기여자 및 Ray Tune의 기여자


게시물 이미지

여기에 모든 상황이 있습니다. 파이 카레 사용자는 다음에 대해 잘 알고 있습니다 : 유망한 모델을 선택한 후 compare_models(), 모델의 잠재력을 모두 끌어 내기 위해 하이퍼 파라미터를 조정할 때입니다. tune_model().

from pycaret.datasets import get_data
from pycaret.classification import * data = get_data("juice") exp = setup( data, target = "Purchase",
)
best_model = compare_models()
tuned_best_model = tune_model(best_model)


(PyCaret-Python의 오픈 소스, 로우 코드 머신 러닝 라이브러리에 대해 자세히 알아 보려면, 이 가이드 시작하기에 좋은 곳입니다.)

기본적으로, tune_model() 시도되고 테스트 된 RandomizedSearchCV scikit-learn에서. 그러나 모든 사람이 다양한 고급 옵션에 대해 아는 것은 아닙니다. tune_model()제공합니다.

이 게시물에서는 PyCaret과 함께 다른 최첨단 알고리즘을 사용하는 것이 얼마나 쉬운 지 보여 드리겠습니다. 조율하다, scikit-learn의 모델 선택 모듈을 최첨단 하이퍼 파라미터 튜닝 기술로 대체하는 드롭 인입니다. 또한 일련의 벤치 마크 결과를보고하여 tune-sklearn이 어떻게 분류 모델 성능을 쉽게 개선 할 수 있는지 보여줍니다.

랜덤 검색과 베이지안 최적화

 
하이퍼 파라미터 최적화 알고리즘은 효율성면에서 크게 다를 수 있습니다.

임의 검색은 기계 학습의 필수 요소였으며 그럴만한 이유가 있습니다. 구현하기 쉽고 이해하기 쉬우 며 합리적인 시간 내에 좋은 결과를 제공합니다. 그러나 이름에서 알 수 있듯이 완전히 임의적입니다. 잘못된 구성을 평가하는 데 많은 시간이 소요될 수 있습니다. 반복 횟수가 제한되어 있다는 점을 고려할 때 최적화 알고리즘이 이미 평가 된 구성을 고려하여 유망하다고 간주되는 구성에 집중하는 것이 합리적입니다.

즉, 본질적으로 베이지안 최적화 (BO)의 개념입니다. BO 알고리즘은 모든 평가를 추적하고 데이터를 사용하여 ML 모델보다 훨씬 빠르게 평가할 수있는 "대리 확률 모델"을 구성합니다. 더 많은 구성이 평가 될수록 알고리즘에 더 많은 정보가 제공되고 대리 모델이 실제 목적 함수에 가까워집니다. 이런 식으로 알고리즘은 단순히 임의의 구성을 샘플링하는 대신 다음에 평가할 구성에 대해 정보에 입각 한 선택을 할 수 있습니다. 베이지안 최적화에 대해 자세히 알아 보려면 다음을 확인하십시오. Will Koehrsen의 우수한 기사.

다행히 PyCaret에는 포장지 여러 최적화 라이브러리에 대해 설명합니다.이 기사에서는 조율하다.

PyCaret의 tune-sklearn

 
조율하다 scikit-learn의 모델 선택 모듈을 대체하는 드롭 인입니다. tune-sklearn은 Optuna 및 scikit-optimize를 포함하여 널리 사용되는 다양한 최신 최적화 알고리즘 및 라이브러리에 대한 액세스를 제공하는 scikit-learn 기반 통합 API를 제공합니다. 이 통합 API를 사용하면 하나의 매개 변수로 다양한 하이퍼 파라미터 최적화 라이브러리간에 전환 할 수 있습니다.

tune-sklearn은 레이 튠, 모든 규모의 실험 실행 및 초 매개 변수 조정을위한 Python 라이브러리. 즉, 코드를 변경하지 않고도 여러 머신에서 튜닝을 확장 할 수 있습니다.

더 간단하게하기 위해 버전 2.2.0부터 tune-sklearn이 PyCaret에 통합되었습니다. 당신은 단순히 할 수 있습니다 pip install "pycaret[full]" 그리고 모든 선택적 종속성이 처리됩니다.


게시물 이미지
어떻게 모든 것이 함께 작동 하는가?

!pip install "pycaret[full]" from pycaret.datasets import get_data
from pycaret.classification import * data = get_data("juice") exp = setup( data, target = "Purchase",
)
best_model = compare_models()
tuned_best_model_hyperopt = tune_model( best_model, search_library="tune-sklearn", search_algorithm="hyperopt", n_iter=20
)
tuned_best_model_optuna = tune_model( best_model, search_library="tune-sklearn", search_algorithm="optuna", n_iter=20
)


두 개의 인수를 추가하여 tune_model()무작위 검색에서 tune-sklearn 기반 베이지안 최적화로 전환 할 수 있습니다. 하이퍼옵트 or 오투 나. PyCaret에는 포함 된 모든 모델에 대한 검색 공간이 내장되어 있지만 원하는 경우 언제든지 직접 전달할 수 있습니다.

하지만 무작위 검색과 비교하면 얼마나 좋을까요?

간단한 실험

 
베이지안 최적화가 무작위 검색과 어떻게 비교되는지보기 위해 매우 간단한 실험을 수행했습니다. 사용 Kaggle 주택 가격 데이터 세트, 저는 PyCaret을 사용하여 두 가지 인기있는 회귀 모델을 만들었습니다. 랜덤 포레스트 과 탄성 망. 그런 다음 scikit-learn의 Random Search와 tune-sklearn의 Hyperopt 및 Optuna Searchers (모두 20 회 반복, RMSLE 최소화)를 사용하여 둘 다 조정했습니다. 이 과정은 다른 종자로 세 번 반복되었고 결과는 평균화되었습니다. 아래는 코드의 요약 된 버전입니다. 전체 코드를 찾을 수 있습니다. 여기를 눌러 더 많은 정보를 찾으세요..

from pycaret.datasets import get_data
from pycaret.regression import * data = get_data("house")
exp = setup( data, target = "SalePrice", test_data=data, # so that the entire dataset is used for cross validation - do not normally do this! session_id=42, fold=5
)
rf = create_model("rf")
en = create_model("en") tune_model(rf, search_library = "scikit-learn", optimize="RMSLE", n_iter=20)
tune_model(rf, search_library = "tune-sklearn", search_algorithm="hyperopt", n_iter=20)
tune_model(rf, search_library = "tune-sklearn", search_algorithm="optuna", optimize="RMSLE", n_iter=20) tune_model(en, search_library = "scikit-learn", optimize="RMSLE", n_iter=20)
tune_model(en, search_library = "tune-sklearn", search_algorithm="hyperopt", n_iter=20)
tune_model(en, search_library = "tune-sklearn", search_algorithm="optuna", optimize="RMSLE", n_iter=20)


PyCaret이 일을 얼마나 쉽게 만드는지 대단하지 않습니까? 어쨌든 다음은 내 컴퓨터에서 얻은 RMSLE 점수입니다.

실험의 RMSLE 점수

그리고 그것을 관점에서 살펴보면 다음은 임의 검색에 대한 비율 향상입니다.

무작위 검색에 대한 비율 향상

이 모든 것은 비슷한 시간에 동일한 수의 반복을 사용합니다. 프로세스의 확률 적 특성을 고려할 때 마일리지가 다를 수 있습니다. 개선이 눈에 띄지 않으면 반복 횟수를 늘려보십시오 (n_iter) 기본값 10에서. 20-30은 일반적으로 현명한 선택입니다.

Ray의 장점은 단일 시스템에서 수십, 수백 또는 그 이상의 노드 클러스터로 손쉽게 확장 할 수 있다는 것입니다. PyCaret은 아직 완전한 Ray 통합을 지원하지 않지만, 초기화는 가능합니다. 광선 클러스터 튜닝하기 전에 — tune-sklearn이 자동으로 사용합니다.

exp = setup( data, target = "SalePrice", session_id=42, fold=5
) rf = create_model("rf") tune_model(rf, search_library = "tune-sklearn", search_algorithm="optuna", optimize="RMSLE", n_iter=20) # Will run on Ray cluster!


필요한 모든 구성이 제자리에있는 경우 ( RAY_ADDRESS환경 변수), 하이퍼 파라미터 튜닝을 위해 Ray의 분산 컴퓨팅 기능을 활용하기 위해 더 이상 필요하지 않습니다. 하이퍼 파라미터 최적화는 일반적으로 ML 모델 생성에서 가장 성능 집약적 인 부분이기 때문에 Ray를 사용한 분산 조정은 많은 시간을 절약 할 수 있습니다.

결론

 
PyCaret에서 하이퍼 파라미터 최적화 속도를 높이기 위해 필요한 라이브러리를 설치하고 두 개의 인수를 변경하기 만하면됩니다. tune_model() — 내장 된 tune-sklearn 지원 덕분에 Ray의 분산 컴퓨팅을 쉽게 활용하여 로컬 머신 이상으로 확장 할 수 있습니다.

문서를 확인하십시오. 파이 카레레이 튠 과 조율하다 뿐만 아니라 GitHub 저장소도 파이 카레 과 조율하다. 마지막으로 질문이 있거나 커뮤니티와 연결하고 싶다면 PyCaret의 여유 과 레이의 담론.

교정과 조언을 해준 Richard Liaw와 Moez Ali에게 감사드립니다.

 
바이오 : 안토니 바움 컴퓨터 과학 및 계량 경제학 석사 학생이자 PyCaret의 핵심 공헌자이자 Ray Tune의 공헌자입니다.

실물. 허가를 받아 다시 게시했습니다.

관련 :

PrimeXBT 결제
AC Milan의 공식 CFD 파트너와 거래
암호 화폐를 거래하는 가장 쉬운 방법.
출처 : https://www.kdnuggets.com/2021/03/bayesian-hyperparameter-optimization-tune-sklearn-pycaret.html

spot_img

최신 인텔리전스

spot_img