2017-03-14 7 views
4

XGBoost을 사용하고 eval_metricauc (here과 같이)으로 최적화하려고합니다.다른`eval_metric`에 대해 XGboost를 사용하여 sklearn 파이프 라인을 최적화하는 방법은 무엇입니까?

분류기를 직접 사용할 때 제대로 작동하지만 pipeline으로 사용하려고하면 오류가 발생합니다.

.fit 인자를 sklearn 파이프 라인에 전달하는 올바른 방법은 무엇입니까?

예 :

from sklearn.pipeline import Pipeline 
from sklearn.preprocessing import StandardScaler 
from sklearn.datasets import load_iris 
from xgboost import XGBClassifier 
import xgboost 
import sklearn 

print('sklearn version: %s' % sklearn.__version__) 
print('xgboost version: %s' % xgboost.__version__) 

X, y = load_iris(return_X_y=True) 

# Without using the pipeline: 
xgb = XGBClassifier() 
xgb.fit(X, y, eval_metric='auc') # works fine 

# Making a pipeline with this classifier and a scaler: 
pipe = Pipeline([('scaler', StandardScaler()), ('classifier', XGBClassifier())]) 

# using the pipeline, but not optimizing for 'auc': 
pipe.fit(X, y) # works fine 

# however this does not work (even after correcting the underscores): 
pipe.fit(X, y, classifier__eval_metric='auc') # fails 

오류 :
TypeError: before_fit() got an unexpected keyword argument 'classifier__eval_metric'

xgboost의 버전과 관련된 :
xgboost.__version__ 0.6
pip3 freeze | grep xgboostxgboost==0.6a2은 신발류.

+0

'roc_auc'을 사용해 보셨습니까? – gabboshow

+0

그것은 sklearn 버전과 잘 작동합니다 : 0.18 xgboost 버전 : 0.6 – gabboshow

답변

3

오류는 파이프 라인에서 사용할 때 평가자 이름과 매개 변수 사이에 밑줄을 하나 사용하기 때문에 발생합니다. 그것은 두 가지 밑줄이어야합니다. 귀하의 경우 그래서

Parameters passed to the fit method of each step, where each parameter name is prefixed such that parameter p for step s has key s__p.

, 올바른 사용법은 다음과 같습니다 다음 documentation of Pipeline.fit()에서

, 우리는 맞춤에 PARAMS 공급의 올바른 방법은 볼

pipe.fit(X_train, y_train, classifier__eval_metric='auc') 

(이름 사이에 두 개의 밑줄을 주목하라 및 param)

+0

불행히도 그 중 하나를 작동하지 않았고, 원래의 질문에 테스트 옵션에 추가되었습니다. 나는 이것이 분류 자의 매개 변수 (예 :'nr_estimators') 일 경우 효과가 있었을 것이라고 생각하지만, 그것은 특정 분류 자의 fit 메소드의 인수입니다. –

+0

sklearn의 홍채 데이터를 사용하고 있으며 정상적으로 작동하고 있습니다 (오류가 발생하지 않음). scikit 및/또는 xgboost 버전을 업데이트하고 다시 시도하십시오. –

+0

흥미 롭습니다. 사용중인 버전을 알려주시겠습니까? 나는 xgboost 버전 '0.6'과 sklearn version '0.18.1'을 사용하고 있습니다. –