0

对于 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. 是否可以使用python API(https://tech.yandex.com/catboost/doc/dg/concepts/python-quickstart-docpage/)将其转换为这样的?
4

2 回答 2

2

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

于 2018-12-02T20:22:09.160 回答
2

这行代码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)
于 2020-05-10T00:32:40.277 回答