我使用了Light GBM算法,并创建了一个如下所示的管道:
#model definitionmodel_lgbm = LGBMClassifier( #training loss objective='binary', # write a custom objective function that is cost sensitive n_estimators = params['n_estimators'], max_depth = params['max_depth'])#pipeline instantiation using a previoulsy defined feature engineering pipeline (it does scaling etc.)model_pipeline_lgbm = Pipeline(steps=[('preprocessor', feature_pipe_lgbm), ('model_lgbm', model_lgbm), ])#fit of feature pipeline and transformation of validation setsfeature_pipe_lgbm.fit(X_train, Y_train)X_val_trans = feature_pipe_lgbm.transform(X_val)X_train_trans = feature_pipe_lgbm.transform(X_train)encoded_column_names = ['f{}'.format(i) for i in range(X_val_trans.shape[1])]X_val_trans = pd.DataFrame(data=X_val_trans, columns=encoded_column_names, index=X_val.index)X_train_trans = pd.DataFrame( data=X_train_trans, columns=encoded_column_names, index=X_train.index)#definition of evaluation set and evaluation metriceval_metric = "binary_logloss"eval_set = [(X_train_trans, Y_train), (X_val_trans, Y_val)]
然后我拟合了管道,并希望将评估结果存储在一个字典中,如下面的仓库所示:
evals_result = {}model_pipeline_lgbm.fit(X=X_train, y=Y_train, model_lgbm__eval_set=eval_set, # validation loss model_lgbm__eval_metric=eval_metric, #same here consider cost sensitvity model_lgbm__early_stopping_rounds= params['early_stopping_patience'], model_lgbm__evals_result=evals_result )
然而,我收到了以下错误:
TypeError: fit() got an unexpected keyword argument 'evals_result'
你知道我应该在管道的哪里定义eval_results,以便我可以调用它来创建图表吗?
回答:
你应该可以在.fit
调用后的LGBMClassifier
中访问它:
model_pipeline_lgbm.fit(...)model_pipeline_lgbm.steps['model_lgbm'].evals_result_