Python Catboost: Multiclass F1 score custom metric

▼魔方 西西 提交于 2021-02-11 05:06:31

问题


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)

来源:https://stackoverflow.com/questions/61354410/python-catboost-multiclass-f1-score-custom-metric

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!