How do you find the F1-score for each class of a multiclass Catboost Classifier? I've already read through the documentation and the github repo where someone asks the same question. However, I am unable to figure out the codesmithing to achieve this. I understand that I must use the custom_metric parameter in CatBoostClassifier() but I don't know what arguments are acceptable for custom_metric when I want F1 score for each class of my multiclass dataset.
Suppose you have a toy dataset (from the documentation):
from catboost import Pool
cat_features = [0, 1, 2]
data = [["a","b", 1, 4, 5, 6],
["a","b", 4, 5, 6, 7],
["c","d", 30, 40, 50, 60]]
label = [0, 1, 2]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2)
train_pool = Pool(X_train, y_train, cat_features=categorical_features_indices)
validate_pool = Pool(X_test, y_test, cat_features=categorical_features_indices)
params = {"loss_function": "MultiClass",
"depth": symmetric_tree_depth,
"num_trees": 500,
# "eval_metric": "F1", # this doesn't work
"verbose": False}
model = CatBoostClassifier(**params)
model.fit(train_pool, eval_set=validate_pool)
you should use TotalF1
params = {
'leaf_estimation_method': 'Gradient',
'learning_rate': 0.01,
'max_depth': 8,
'bootstrap_type': 'Bernoulli',
'objective': 'MultiClass',
'subsample': 0.8,
'random_state': 42,
'verbose': 0,
"eval_metric" : 'TotalF1',
"early_stopping_rounds" : 100
}
https://catboost.ai/docs/concepts/loss-functions-multiclassification.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With