Как получить метрику оценки после CatBoostClassifier.fit ()? - PullRequest
0 голосов
/ 25 мая 2018

Я обучил модель классификации, называющую CatBoostClassifier.fit(), также предоставив eval_set.

Теперь, , как я могу выбрать лучшее значение метрики оценки и количество итераций, когдаэто было достигнуто во время обучения ?Я могу отобразить информацию, установив plot=True в вызове на fit(), но как я могу присвоить ее переменной?

Я могу сделать это, когда тренирую модель, вызывающую cv(), например cv() возвращает требуемую информацию.Но CatBoostClassifier.fit() ничего не возвращает, в соответствии с документацией.

Вот фрагмент кода, который я использую для соответствия модели:

model = CatBoostClassifier(
                           random_seed=42,
                           logging_level='Silent',
                           eval_metric='Accuracy'
                          )

model.fit(X_train,
          y_train,
          cat_features=cat_features_idxs,
          eval_set=(X_val, y_val),
          plot=True
         )

Вот как мне удается получитьТребуется информация, если я использую cv() вместо:

cv_data = cv(Pool(X, y, cat_features = cat_features_idxs),
             model.get_params(),
             fold_count = 5,
             plot=True)

print('Validation accuracy (best average among cross-validation folds) is {} obtained at step {}.'.format(np.max(cv_data['test-Accuracy-mean']), np.argmax(cv_data['test-Accuracy-mean'])))

1 Ответ

0 голосов
/ 21 сентября 2018

1) Просто вычислите балл по данным тренировки:

https://stackoverflow.com/a/17954831

model = CatBoostClassifier(
                       random_seed=42,
                       logging_level='Silent',
                       eval_metric='Accuracy'
                      )

model.fit(X_train,
          y_train,
          cat_features=cat_features_idxs,
          eval_set=(X_val, y_val),
          plot=True
         )

train_score = model.score(X_train, y_train) # train (learn) score

val_score = model.score(X_val, y_val) # val (test) score

Другим способом был бы доступ к выходным файлам:

model = CatBoostClassifier(
                       random_seed=42,
                       logging_level='Silent',
                       eval_metric='Accuracy',
                       allow_writing_files=True
                      )

model.fit(X_train,
      y_train,
      cat_features=cat_features_idxs,
      eval_set=(X_val, y_val),
      plot=True
     )

import pandas as pd
test_error = pd.read_csv('catboost_info/test_error.tsv', sep='\t')
val_score = test_error.loc[test_error['Accuracy'] == test_error['Accuracy'].max()]['Accuracy'].values[0]
best_iter = int(test_error.loc[test_error['Accuracy'] == test_error['Accuracy'].min()]['iter'].values[0])
train_score = learn_error.loc[learn_error['iter'] == best_iter]['Accuracy'].values[0]

2) Если у вас установлена ​​pandas, добавьте as_pandas=True в качестве параметра cv, тогда вы можете получить доступ к cv_data как к Dataframe.например, cv_data['test-Accuracy-mean'].max().

https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_cv-docpage/

Вы также можете получить доступ к выходным файлам, как указано выше, в этом случае для каждого сгиба будет пара папок.

Надеюсь, это поможет!

...