3

如何在使用 CatboostClassifier 解决多类问题时使用“class_weights”。文档说它应该是一个列表,但是我需要按什么顺序放置权重?我有一个标签数组,其中包含从 -2 到 +2 的 15 个类,包括十进制数,与其他类相比,0 类的密度要高得多。请帮忙。谢谢,

我尝试了更容易使用但不知道多类的二进制类。

cb_model_step1 = run_catboost(X_train,y_train_new,X_test,y_test_new,n_estimators = 1000,详细 = 100,eta = 0.3,loss_function = 'MultiClassOneVsAll',class_weights = counter_new)

cb = CatBoostClassifier(thread_count=4, n_estimators=n_estimators, max_depth=10, class_weights = class_weights, eta=eta, loss_function = loss_function)

4

2 回答 2

7

现在可以传递带有标签和相应权重的字典。

假设我们有 X_train、y_train 和多分类问题。然后我们可以做以下

import numpy as np 
from catboost import CatBoostClassifier
from sklearn.utils.class_weight import compute_class_weight
 
classes = np.unique(y_train)
weights = compute_class_weight(class_weight='balanced', classes=classes, y=y_train)
class_weights = dict(zip(classes, weights))

clf = CatBoostClassifier(loss_function='MultiClassOneVsAll', class_weights=class_weights)
clf.fit(X_train, y_train)
于 2020-07-10T10:29:07.713 回答
0

您需要在旅游数据集上拟合没有任何权重的模型,然后运行 ​​CatBoostClassifier().classes_。它将在 catboost 中向您显示课程顺序:

model_multiclass = CatBoostClassifier(iterations=1000,
                       depth=4,
                       learning_rate=0.05,
                       loss_function='MultiClass',
                       verbose=True,
                       early_stopping_rounds = 200,
                       bagging_temperature = 1,
                       metric_period = 100)

model_multiclass.fit(X_train, Y_train)
model_multiclass.classes_
Result:['35мр', '4мр', 'вывод на ИП', 'вывод на кк', 'вывод на фл', 'транзит']
于 2020-02-21T05:46:39.623 回答