요약 XGBoost 구배 밀어 트리를 사용하여 라이브러리를 scikit은 배우기 (GBDT) 매개 변수 조정 개요

    에서 XGBoost 알고리즘 원리 요약 , 우리는 원칙 XGBoost 알고리즘, 우리는 파이썬 라이브러리의 XGBoost를 사용하는 방법에 대해 설명합니다 이것뿐만 아니라 의미와 몇 가지 중요한 매개 변수를 생각하고 보조를 논의했다.

    받는 참조하여 본 논문에서는 XGBoost의 파이썬 문서  및  문서 XGBoost의 파라미터 .

1. XGBoost 라이브러리 개요

    파이썬을 지원하는 것 외에도 XGBoost뿐만 아니라이 R, 자바와 다른 언어를 지원합니다. 이 문서에서는 설치하고 지금 XGBoost의 0.90 버전을 사용할 수 있습니다 "xgboost 설치 핍"을 사용 XGBoost 파이썬 라이브러리에 초점을 맞추고 있습니다. 의사 결정 트리에게 약한 학생들을 지원하는 것 외에도 XGBoost 라이브러리, 또한 선형 분류, 의사 결정 트리를 지원하고 DART 드롭 아웃으로하지만, 정상적인 상황에서, 우리는 기본 의사 결정 트리가 약한 학습자가 될 수 사용이 문서에서는 사용에 대해 설명합니다 기본 의사 결정 트리가 약한 학습자 XGBoost.

    인터페이스 XGBoost 파이썬 스타일의 두 가지 종류가 있습니다. 하나는 XGBoost 자신의 기본 파이썬 API 인터페이스, API 인터페이스이고 다른 하나는 모두 스타일 sklearn가 같은, 약간 다른 API는 주로 매개 변수 이름에 사용 실질적으로 달성하기 위해, 그리고 데이터 세트 위의 초기화.

도서관 2. XGBoost 기본적인 사용

    내 전체 예제를 참조하십시오 Github에서 코드를 .

2.1 기본 파이썬 API 인터페이스를 사용하여

    스타일 두 종류의 XGBoost 라이브러리 인터페이스, 우리는 어떻게 네이티브 파이썬 API 인터페이스를보십시오.

    먼저 기본 데이터 세트 섹션 XGBoost 필요, 보도, 다음 DMatrix 데이터 구조 안에 넣어 입력 기능의 출력 부분은, 우리는 DMatrix에게의 세부 사항을 신경 우리의 훈련 집합 X를 사용하고 y를 초기화 할 수 없습니다.

수입 PD에로 팬더
 수입 순이익 등 NumPy와
 수입 XGB로 xgboost
 수입 PLT의 같은 matplotlib.pylab
 %의 하기 matplotlib 인라인 

에서 sklearn.model_selection의 수입 GridSearchCV
 에서 sklearn.model_selection의 수입 train_test_split
에서 sklearn.datasets.samples_generator 오기 make_classification의
 # X-패턴 형상, y는 출력 샘플 타입이 10,000 총 샘플, 상기 각 샘플 (20) 출력의 두 가지 종류는 중복성이없는 특징이 있으며, 각 클러스터의 카테고리 
X, make_classification = Y (N_SAMPLES = 10000 n_features = 20이고, n_redundant = 0 
                             n_clusters_per_class =. 1 n_classes = 2 flip_y = 0.1)
X_train, X_test, y_train, y_test train_test_split = (X, Y, random_state = 1)
dtrain = xgb.DMatrix (X_train, y_train) 
dtest = xgb.DMatrix (X_test, y_test)

    위의 코드는, 우리는 임의의 초기화를 바이너리 데이터를 설정하고 교육 및 검증 세트로 나누었다. 하는 DMatrix를 초기화 DMatrix와 함께, 당신은 교육 및 예측을 할 수있는 각각 교육 및 검증 세트를 사용합니다. 다음과 같이 간단한 예제 코드는 다음과 같습니다

PARAM = { ' MAX_DEPTH ' : 5 ' ETA ' 0.5, ' 상세 ' 1, ' 목표 ' : ' 이진 로지스틱 ' } 
raw_model = xgb.train (PARAM, dtrain, num_boost_round = 20)
 sklearn.metrics 가져 accuracy_score 
pred_train_raw = raw_model.predict (dtrain)를
 위한 I 범위 (LEN (pred_train_raw))
     경우 pred_train_raw가 [I]가> 0.5 : 
         pred_train_raw [내가] = 1
     다른 : 
        [I] pred_train_raw = 0               
 인쇄 (accuracy_score을 (dtrain.get_label () pred_train_raw))

    훈련의 정확도는 여기 내 출력을 설정 0.9664이다. 성능 검증 세트 봐 :

pred_test_raw = raw_model.predict (dtest)
 에 대한 I 에서 (LEN (pred_test_raw)) 범위 :
     만약 pred_test_raw가 [I]가> 0.5 : 
         pred_test_raw [내가] = 1
     다른 : 
        [I] pred_test_raw = 0               
 인쇄 ((accuracy_score (dtest.get_label)를 , pred_test_raw))

    나는 출력의 정확성은 이미 높은 0.9408로 설정되어 있는지 확인하기 위해 여기입니다.

     그러나 나를 위해 sklearn 스타일의 API를 사용하거나 기본 파이썬 API 인터페이스를 좋아하지 않아,이 래퍼 sklearn 이후 한 다음 sklearn 스타일의 인터페이스를 사용하려고합니다.

기본 매개 변수를 사용하여 2.2 sklearn 스타일의 인터페이스

    sklearn 스타일의 인터페이스의 경우 사용할 수있는 두 종류의 분류입니다있다 XGBClassifier은 다른 사용 XGBRegressor의 반환이다. 이 두 가지 범주의 사용의 사용에서, 알고리즘의 입력 매개 변수에 대해 다른 sklearn 스타일의 매개 변수 이름을 사용하는 것입니다, 먼저 원래이며 여전히 명명 된 매개 변수의 동일한 API 세트를 사용, 또한 두 가지 방법이 있습니다. 여기에서 우리는 원래 API 및 명명 된 매개 변수의 동일한 세트를 사용하는 방법을 살펴 보자.

    다음과 같이 사실, 그들로 위의 매개 변수의 PARAMS 기본 세트의 XGBClassifier / ** kwargs로 XGBRegressor 매개 변수를 사용 :

sklearn_model_raw = xgb.XGBClassifier (** PARAM) 
sklearn_model_raw.fit (X_train, y_train, early_stopping_rounds = 10 eval_metric = " 오류 " , 
        eval_set = [(X_test, y_test)])

    PARAM 내부 실제로 정의 2.1 :

PARAM = { ' MAX_DEPTH ' : 5 ' ETA ' 0.5, ' 상세 ' 1, ' 목표 ' : ' 이진 로지스틱 ' }

    sklearn 스타일의 인터페이스를 사용하지만, 매개 변수 정의의 원래 이름을 사용, 아직도 조금 이상한 느낌, 그래서 일반적으로 또 다른 스타일의 인터페이스 sklearn 스타일의 매개 변수 이름을 사용하는 데 사용.

sklearn를 사용하여 2.3 sklearn 스타일의 인터페이스 스타일의 매개 변수

    내가 주로 수행하고 GBDT이 sklearn 라이브러리 사용과 같은 차이가 없습니다하는 방법을 추천 sklearn 스타일의 인터페이스를 사용하여 인수의 sklearn 스타일을 사용, 당신은 또한 그리드 검색 sklearn을 사용할 수 있습니다.

    그러나 이렇게하려면, 이름 및 매개 변수은 2.1 및 2.2 조금 다른 정의. 우리 뒤에 의미 특정 매개 변수는 우리가 분류, 교육 및 전화의 간단한 알고리즘의 초기화 과정을보고, 말 :

sklearn_model_new = xgb.XGBClassifier (MAX_DEPTH = 5 learning_rate = 0.5, 상세 = 1, 대물 = ' 이진 로지스틱 ' , random_state = 1)

    그것은 바로 XGBClassifier의 클래스 매개 변수에 정의 된 매개 변수를 볼 및 이와 유사한 sklearn 할 수 있습니다. 에타 단계 우리는 우리가 여기에 또 다른 이름 learning_rate가 정의하는 앞의 두 섹션을 볼 수 있습니다.

    초기화 후, 교육 및 방법은 예측하고 2.2 차이가 없습니다합니다.

sklearn_model_new.fit (X_train, y_train, early_stopping_rounds = 10 eval_metric = " 오류 " , 
        eval_set = [(X_test, y_test)])

3. XGBoost 라이브러리 매개 변수

    두 번째 섹션에서 우리는 XGBoost 라이브러리를 사용하려고했으나 한 매개 변수 XGBoost에 대한 라이브러리를 너무 많이하지 논의. 다음으로 우리는 주로 주로 논의는 2.3 절에서 sklearn 스타일의 매개 변수, 여기에서 자세히 논의 할 것이다. 이러한 매개 변수 전에 내가 말하는 것 그라데이션 증폭 트리 (GBDT) 요약 매개 변수를 조정 scikit이 배우기 매개 변수의 정의에 해당 그렇다면 모든 사람 GBDT 잘 알고 톤 매개 변수, 다음도 90 %를 장악 XGBoost 매개 변수 조정.

    도서관 XGBoost 매개 변수는 프레임 매개 변수, 약한 학습자 및 기타 매개 변수를 증폭 있습니다.

3.1 XGBoost 프레임 워크 매개 변수 

    부스터, n_estimators 및 objectve : 프레임 매개 변수 XGBoost의 경우, 가장 중요한 세 가지 매개 변수입니다.

    1) 부스터 기본 gbtree, 즉 CART 판정 트리를 사용할 수 있고, 약한 학습자 XGBoost의 유형을 결정하고, 약한 학습자 gblinear 다트뿐만 아니라 선형 일 수있다. 일반적으로, 우리는 거기에 gbtree를 사용하여, 당신은 매개 변수를 조정할 필요가 없습니다.

    2) n_estimators는 우리의 의사 결정 트리가 약한 학습자의 수를 나타냅니다 때문에, 우리의 XGBoost 모델의 복잡성 관련, 매개 변수를 조정하는 것이 매우 중요합니다. 이 매개 변수는 n_estimators sklearn GBDT에 해당합니다. 너무 작은 n_estimators, 쉽게 단순성과도 n_estimators 및 overfitting에 쉽게는, 일반적으로 적당한 조정 매개 변수 값을 선택해야합니다.

    3) 목적은 해결해야 할 문제는 우리의 분류 또는 회귀 또는 다른 문제와 함수의 대응하는 손실을 나타내고있다. 특정 값이 많이 걸릴 수 있습니다, 우리는 분류 및 회귀 시간에 사용되는 일반 매개 변수에 대한 관심.

    등록은 일반적으로 회귀 목적에 사용 : squarederror, 즉 MSE는 제곱 오차를 의미한다. 이진 분류 일반적으로 사용하는 바이너리 : 일반적으로 사용하는 다중의 물류, 다중 분류 문제 : softmax를.

 3.2 XGBoost 약한 학습자 파라미터   

    여기에서 우리는 기본 매개 변수의 사용이 약한 학습자 gbtree에 대해 설명합니다. 의사 결정 트리는 다음과의 관련 매개 변수의 주요 매개 변수의 매개 변수를 조정하려면 : 

    1) MAX_DEPTH : 트리 구조의 데이터 나 작은 기능 어떤 값일 때 이하의 깊이를 제어한다. 하여 모델 샘플의 양뿐만 아니라 많은 기능, 그것은 필요한 경우 특정 매개 변수를 조정 일반적으로 그리드 검색의 최대 깊이 값을 제한합니다. 이 매개 변수는 MAX_DEPTH의 sklearn의 GBDT에 해당합니다.

    2) min_child_weight : 트리 노드 바로 체중이 임계 값보다 작 으면 작은 자식 노드 무게 임계 값, 그것은 트리 노드가 잎 노드 즉, 하위 트리를 분할하지 않습니다. 오른쪽 트리 노드 본원 재사용된다는 제 유도체, $ H_ {TJ} $ 내부 즉 XGBoost 원리 문서의 모든 샘플의 노드 $$ H_ {TJ} = \ 합계 \ limits_ {x_i로부터 \ R_의 {TJ }} H_ {TI} $$

    값은 sklearn GBDT에 인수를 정확하게 대응하지가, 그러나 min_samples_split 다른 각도에서 임계 값 제한을 연주, 최적의 값을 찾아 그리드 검색 할 필요가있다.

    3) 감마 : 감소 된 임계 값에 의한 분할 XGBoost 결정 트리 손실. 우리는 트리 구조 시도의 최대 수는 다음 식 분할 할 때 즉 $$ \ 맥스 \의 FRAC를 {1} {2} \ FRAC {G_L ^ 2} {H_L + \ 람다} + \ FRAC {1} {2 } \ {FRAC (G_r)으로 변환 ^ {2} + H_R \ 람다} - \의 FRAC {1} {2} \ {FRAC (G_L + (G_r)으로 변환된다) ^ {2} + H_L H_R + \ 람다} - \ 감마 $$

    이 하위 트리를 나눌 계속, 우리의 감마 이상을 필요로의 가치를 극대화합니다. 이 값은 최적의 값을 찾아 그리드 검색을해야합니다.

    4) 표본 : 서브 샘플링 파라미터 이것은 여분없이 샘플링과 동일의 sklearn의 GBDT의 표본의 역할이다. 분산의 비율, 즉, 값이 너무 낮을 수없는 오버 피팅 방지하지만, 샘플 맞춤 어긋남을 증가, 1보다 작게 할 수있다. 오버 피팅 상대적으로 작은 값의 번호를 찾을 수있는 보조 그리드 검색을 찾아 낼 수있는 경우에 초기 값은 1이 될 수 있습니다.

    5) colsample_bytree / colsample_bylevel / colsample_bynode :이 세 가지 파라미터는 샘플의 특성이며, 기본 샘플링되지 않은, 즉, 모든 기능을 사용하여 의사 결정 트리. colsample_bytree 대조군 샘플 상기 비율 비율 층 및 샘플링 제어 기능은 트리 노드 colsample_bynode 상기 전체 트리의 비율 colsample_bylevel 대조군 샘플. 총 특성과 같은 64, 그것은 colsample_bytree, colsample_bylevel 및 colsample_bynode 0.5이다 간주 한 트리 노드 임의로 8 샘플링 때 상기 분할 서브 트리를 분할하기 위해.

    6) reg_alpha / reg_lambda :이 2 XGBoost의 정규화 파라미터이다. reg_alpha가 L1의 정규화 계수이다 reg_lambda 우리 XGBoost 정규화 손실 소자 부 논의 원리 문서 L1 정규화 계수이다 $$ \ 오메가 (h_t) = \ 감마 J + \ FRAC {\ 람다} {2} \ 합계 \ limits_ J = {1} ^ {Jw_ TJ} ^ 2 $$

    이러한 매개 변수는 MAX_DEPTH, min_child_weight 및 감마를 강조하기 위해 위의 매개 변수를 조정하지만, 일반적으로 필요하다. 상황에 맞는 아래를 발견하고 있었다면 나중에 여러 매개 변수를 조정하려고합니다.

3.3 XGBoost 다른 매개 변수

    XGBoost 주로 learning_rate주의가 필요한 다른 매개 변수가 있습니다.

    learning_rate 유사한 작은 learning_rate의 learning_rate 약한 학습자 체중 감소 계수의 각각의 제어 및 sklearn GBDT 우리가 약한 학습자의 반복 수가 더 필요하다는 것을 의미한다. 일반적으로 우리는 반복 단계의 최대 수를 사용하고 피팅 알고리즘의 효과를 결정하기 위해 함께 작동합니다. 그래서이 두 가지 매개 변수 n_estimators 및 learning_rate는 길잡이 효과적 일 수있다. 물론 또한 learning_rate에 고정하고 완료 n_estimators는, 다른 모든 조정 매개 변수의 완료 후, 마지막으로 learning_rate n_estimators를 전송합니다.

    또한, 제어 알고리즘을 동시 스레드의 수를 n_jobs scale_pos_weight 분류 언밸런스 때 양극 케이스 및 음극 케이스에 대한 비율. class_weight 유사한에서 sklearn. 각 기능의 중요성의 정도를 확인할 수 있습니다 importance_type. "무게", "커버", "total_gain"또는 "total_cover"을 "얻을"할 수 있습니다. 마지막 기능 부스터 get_score 메소드 호출의 대응하는 가중치에 의해 얻어 질 수있다. 중요도를 계산하는 기능 분할 기능 개수로 선택 됨으로써 「무게」, 「게인」과 기능을 가지고 계산을 각각 "total_gain"는, 평균 이득 특성으로서 선택 중요성에 의해 산출 된 총 이득을 분할한다. "표지"와 "total_cover"를 선택한 샘플 적용 범위의 전체 평균 샘플 범위 분할을 할 수있는 기능을 계산하는 중요성에 의해 계산된다.

4. XGBoost 그리드 검색 매개 변수 조정

    XGBoost 그리드 검색 및 파라미터 조정의 클래스 GridSeachCV의 sklearn 조합 및 일반 sklearn 분류의 사용을 사용할 수 있으며 회귀 알고리즘은 다르지 않습니다. 다음과 같이 특정 처리의 일례이다 :

gsCv = GridSearchCV (sklearn_model_new, 
                   { " MAX_DEPTH ' [4,5,6 ]
                     ' n_estimators ' : 5,10,20 ]}) 
gsCv.fit (X_train, y_train)
인쇄 (gsCv.best_score_)
 인쇄 (gsCv.best_params_)

    내 출력은 여기에 있습니다 :

    0.9533333333333334

    { 'MAX_DEPTH'4 'n_estimators': 10}

    그런 다음 위의 제기에 기초하여 검색을 시도 learning_rate를 :

sklearn_model_new2 = xgb.XGBClassifier (MAX_DEPTH = 4, 10 = n_estimators, 상세 = 1, 대물 = ' 이진 로지스틱 ' , random_state = 1 ) 
gsCv2 = GridSearchCV (sklearn_model_new2, 
                   { " learning_rate ' [0.3,0.5,0.7 ]}) 
gsCv2.fit (X_train, y_train)
인쇄 (gsCv2.best_score_)
 인쇄 (gsCv2.best_params_)

    내 출력은 여기에 있습니다 :

    0.9516

    { 'learning_rate'0.3}

    물론, 실제 상황이 여기에 우리가 매개 변수 조정을 완료 한 가정, 매개 변수를 조정을 계속해야 할, 우리는 검증 세트를 사용하여 효과를보고하십시오 :

sklearn_model_new2 = xgb.XGBClassifier (MAX_DEPTH = 4 learning_rate = 0.3, 상세 = 1, 대물 = ' 이진 로지스틱 ' , n_estimators = 10 ) 
sklearn_model_new2.fit (X_train, y_train, early_stopping_rounds = 10 eval_metric = " 오류 " , 
        eval_set = [(X_test, y_test)])

    최종 출력은 다음과 같습니다

    [9] validation_0 오류 : 0.0588

    즉, 검증 세트의 정확도는 94.12 %이다.

    산출 결과 세트의 정확성을 확인하는 경우 우리는 우리의 이전 그리드 검색 매개 변수 조정을 확인할 수 있습니다. 에 대한 필요성의 실제 처리를 반복 매개 변수 및 검증을 검색 할 때.

    위의 라이브러리를 사용 XGBoost의 요약 및 실질적인 문제를 해결하기 위해 XGBoost를 사용하는 친구를 도울 수있는 욕망이다.

 

(다시 인쇄에 오신 것을 환영합니다, 소스가 환영 통신 :. [email protected]를 표시하시기 바랍니다)  

추천

출처www.cnblogs.com/pinard/p/11114748.html