Как я могу преобразовать необработанный прогноз предсказания (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/) - значение параметра называется " Вероятность".
я бы хотел знать
- как это связано с вероятностями (в случае двоичной классификации) и
- если это может быть преобразовано в таком с помощью 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)