2016-07-24 3 views
1

I는 다음과 같습니다 파이썬과 데이터 세트로 XGBoost XGBRegressor을 실행 해요 :XGboost - 증가하는 훈련 오류 "앞"

click_id | manufacturer | category | delivery_time | price | revenue
1 |10 | 100 | 24 | 100 | 0
2 |10 | 100 | 24 | 100 | 0
3 |10 | 100 | 24 | 100 | 0
4 |10 | 100 | 24 | 100 | 120
5 |20 | 200 | 48 | 200 | 0

수익은 종속 변수입니다. 나머지 변수는 기능입니다. 내가 XGBRegressor를 실행하고 ""로 eval_metric을 설정하면

는 교육 및 유효성 검사 오류가 지속적으로 증가하고있다 (절대 오류를 의미). 어떻게 훈련 오류가 증가 할 수 있습니까? xgboost 교육 오류가 증가 할 수있는 경우 (모델 매개 변수 또는 이상한 데이터 요소의 조합)가 있습니까?

model = XGBRegressor(
    learning_rate=0.1, 
    n_estimators=200, 
    max_depth=5, 
    min_child_weight=1, 
    gamma=0, 
    subsample=0.9, 
    colsample_bytree=0.9, 
    reg_alpha=10, 
    nthread=4) 

model.fit(X_train, y_train, 
      eval_set=[(X_train, y_train), (X_test, y_test)], eval_metric='mae') 

eval_metric이 예상대로 "RMSE"교육 오류가 감소로 설정됩니다

는 코드입니다.

답변

3

objective 최소화와 평가 세트의 오류 (eval_metric으로 계산)를 구별해야합니다. 이 두 가지는 다를 수 있습니다. 이것이 평가 집합에서 증가하는 오류의 원인입니다.

XGBoost가 objective="reg:linear" (기본 인수는 XGBRegressor)으로 사용되므로 RMSE (제곱 평균 오차)를 최소화하려고합니다. 사실, XGBoost는 평균 절대 오류 (MAE)도 지원하지 않습니다 (objective). 자세한 내용은 XGBoost objective parameter을 참조하십시오. MAE가 객관적으로 구현되지 않은 이유는 XGBoost가 알고리즘에서 0이 아닌 파생물을 필요로한다는 것입니다 (MAE에서는 그렇지 않습니다).

오류 기능 및 기울기와 헤센을 (제 1 및 제 2 차 미분) calulating에 대한 함수를 정의하여 자신 objective를 정의 할 수 있습니다 XGRegressors에게 train α- 함수를 (here 참조) 사용. 자세한 내용은 this example을 참조하십시오.

헤센을 일정하지만 작은 값으로 설정하여 MAE를 직접 구현하려고했습니다. 불행히도 매우 느리게 수렴합니다. 여전히 데이터로 작동 할 수 있습니다.