如何将 catboosts 原始预测分数 (RawFormulaVal) 转换为概率?

How can I transform catboosts raw prediction score (RawFormulaVal) into a probability?

对于来自 catboost 库的某些对象(如 python 代码导出模型 - https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_catboostclassifier_save_model-docpage/) predictions (https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_apply_catboost_model-docpage/)只会给出每条记录的所谓原始分数(参数值称为 "RawFormulaVal") . 其他 API 函数也允许预测的结果是目标 class (https://tech.yandex.com/catboost/doc/dg/concepts/python-reference_catboostclassifier_predict-docpage/) 的概率 - 参数值称为 "Probability".

我想知道

  1. 这与概率有何关系(在二进制 class化的情况下)和
  2. 如果用pythonAPI(https://tech.yandex.com/catboost/doc/dg/concepts/python-quickstart-docpage/)可以改成这样吗?

类型为 "RawFormulaVal" 的 catboost 预测函数的原始分数是对数比值 (https://en.wikipedia.org/wiki/Logit)。 因此,如果我们应用函数 "exp(score) / (1+ exp(score))",我们得到的概率就好像我们会使用类型为 "Probability".

的预测公式一样

代码行 model.predict_proba(evaluation_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)