Как я могу преобразовать необработанный прогноз предсказания (RawFormulaVal) в вероятности?

Для некоторых объектов из библиотеки catboost (например, модель экспорта кода Python - https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_catboostclassifier_save_model-docpage/) прогнозы ( https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_apply_catboost_model-docpage/) будет давать только так называемый необработанный счет для каждой записи (значения параметров называются "RawFormulaVal"). Другие функции API также позволяют результату прогноза быть вероятностью для целевого класса ( https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_catboostclassifier_predict-docpage/) - значение параметра называется " Вероятность".

я бы хотел знать

  1. как это связано с вероятностями (в случае двоичной классификации) и
  2. если это может быть преобразовано в таком с помощью API Python ( https://tech.yandex.com/catboost/doc/dg/concepts/python-quickstart-docpage/)?

1 ответ

Решение

Необработанные результаты функции прогнозирования catboost с типом "RawFormulaVal" представляют собой коэффициенты входа ( https://en.wikipedia.org/wiki/Logit). Поэтому, если мы применяем функцию "exp(оценка) / (1+ exp(оценка))", мы получаем вероятности, как если бы мы использовали формулу прогнозирования с типом "Вероятность".

Строка кода 'model.predict_proba(analysis_dataset)' будет вычислять вероятности напрямую. Ниже приведен пример кода для понимания

from catboost import Pool, CatBoostClassifier, cv
train_dataset = Pool(data=X_train,
                     label=y_train,
                     cat_features=cat_features)
eval_dataset = Pool(data=X_valid,
                    label=y_valid,
                    cat_features=cat_features)

# Initialize CatBoostClassifier
model = CatBoostClassifier(iterations=30,
                           learning_rate=1,
                           depth=2,
                           loss_function='MultiClass')

# Fit model
model.fit(train_dataset)

# Get predicted classes
preds_class = model.predict(eval_dataset)

# Get predicted probabilities for each class
preds_proba = model.predict_proba(eval_dataset)

# Get predicted RawFormulaVal
preds_raw = model.predict(eval_dataset, 
                          prediction_type='RawFormulaVal')
model.fit(train_dataset,
          use_best_model=True,
          eval_set=eval_dataset)
print("Count of trees in model = {}".format(model.tree_count_))

print(preds_proba)

print(preds_raw)
Другие вопросы по тегам