하이퍼 튜닝 XGBoost 매개 변수


27

XGBoost는 범주 형 변수와 연속 형 종속 변수를 모두 다루는 데 큰 도움이되었습니다. 그러나 XGBoost 문제에 대해 최적화 된 매개 변수를 어떻게 선택합니까?

이것이 최근 Kaggle 문제에 대한 매개 변수를 적용한 방법입니다.

param <- list(  objective           = "reg:linear", 
                booster = "gbtree",
                eta                 = 0.02, # 0.06, #0.01,
                max_depth           = 10, #changed from default of 8
                subsample           = 0.5, # 0.7
                colsample_bytree    = 0.7, # 0.7
                num_parallel_tree   = 5
                # alpha = 0.0001, 
                # lambda = 1
)


clf <- xgb.train(   params              = param, 
                    data                = dtrain, 
                    nrounds             = 3000, #300, #280, #125, #250, # changed from 300
                    verbose             = 0,
                    early.stop.round    = 100,
                    watchlist           = watchlist,
                    maximize            = FALSE,
                    feval=RMPSE
)

실험하기 위해 결과를 개선하기 위해 다른 매개 변수 집합을 임의로 선택 (직관적으로)합니다.

어쨌든 최적화 된 (최상의) 매개 변수 선택을 자동화합니까?

(답은 어떤 언어로든 가능합니다. 나는 단지 기술을 찾고 있습니다)

답변:


40

xgboost로 작업 할 때마다 종종 자체 자체 매개 변수 검색을 수행하지만 방금 언급 한 KrisP와 마찬가지로 캐럿 패키지로 수행 할 수 있습니다.

  1. 탈자 부호

xgboost에서 하이퍼 파라미터 검색에 캐럿 패키지를 사용하는 방법에 대한 자세한 설명은 Cross Validated에서이 답변을 참조하십시오. xgboost 나무의 하이퍼 파라미터를 조정하는 방법?

  1. 맞춤 그리드 검색

나는 종종에 따라 몇 가지 가정으로 시작 오웬 장 에서의 슬라이드 데이터 과학에 대한 팁 P. 14

여기에 이미지 설명을 입력하십시오

여기에서 대부분 행 샘플링, 열 샘플링 및 최대 트리 깊이를 조정해야한다는 것을 알 수 있습니다. 이것이 내가 현재하고있는 문제에 대해 사용자 정의 행 샘플링 및 열 샘플링 검색을 수행하는 방법입니다.

searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1), 
                                colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100

#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)

rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){

    #Extract Parameters to test
    currentSubsampleRate <- parameterList[["subsample"]]
    currentColsampleRate <- parameterList[["colsample_bytree"]]

    xgboostModelCV <- xgb.cv(data =  DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE, 
                           metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
                           "objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,                               
                           "subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)

    xvalidationScores <- as.data.frame(xgboostModelCV)
    #Save rmse of the last iteration
    rmse <- tail(xvalidationScores$test.rmse.mean, 1)

    return(c(rmse, currentSubsampleRate, currentColsampleRate))

})

그리고 적용 함수의 결과를 사용하여 ggplot2 magic과 결합하여 검색의 그래픽 표현을 그릴 수 있습니다.내 xgboost 하이퍼 파라미터 검색

이 그림에서 밝은 색상은 낮은 오류를 나타내며 각 블록은 열 샘플링과 행 샘플링의 고유 한 조합을 나타냅니다. 따라서 eta (또는 트리 깊이)에 대한 추가 검색을 수행하려는 경우 테스트 된 각 eta 매개 변수에 대해 다음 플롯 중 하나가 표시됩니다.

다른 평가 지표 (RMPSE)가 있고 교차 유효성 검사 기능을 연결하면 원하는 결과를 얻을 수 있습니다. 게다가 다른 매개 변수를 미세 조정하는 것에 대해 너무 걱정하지 않아도됩니다. 그렇게하면 더 많은 시간을 엔지니어링 기능을 사용하거나 데이터를 정리하는 것과 비교할 때 성능이 크게 향상되지 않기 때문입니다.

  1. 기타

무작위 검색 및 베이지안 매개 변수 선택도 가능하지만 아직 구현을 찾지 못했습니다.

다음은 캐럿의 Max Kuhn 제작자에 의한 하이퍼 파라미터의 베이지안 최적화에 대한 좋은 입문서입니다.

http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html


min_child_weight 매개 변수에 관한 질문이 있습니다. 3 / (%의 희귀 한 사건의 %)라고 말합니다. 3 개의 클래스 0 (3.4 %), 1 (96.4 %) 및 2 (0.2 %)가 있다고 가정합니다. 그래서 3 / 3.6 또는 3 / 0.2이어야합니까? 나는 이전의 추측입니다

대부분의 경우 xgboost는 5 % 미만의 항목을 대부분의 문제에서 드문 이벤트로 취급합니다. 알고리즘의 단점 중 하나라고 생각합니다. 클릭률 (CTR) 문제에서 발생하는 클릭은 "희귀 한 사건"이라고 생각합니다. 따라서이 경우 3 / 3.6이됩니다. 나는 때때로 더 낮지 만 자주는 아닙니다.
wacax

1
rBayesianOptimization패키지는 매우 간단 BO의 구현을 만든다
MichaelChirico


0

그리드, 랜덤, 베이지안 및 PSO 등

XGBoost로 작업 할 때 위의 모든 내용은 중요하지 않습니다. XGB는 정말 빠르기 때문에 솔루션을 찾을 때까지 많은 하이퍼 파라미터와 함께 Grid를 사용할 수 있습니다.

대략적인 방법을 사용하면 항상 가장 낮은 mse 오류가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.