在使用CatboostClassifier解决多类问题时如何使用“ class_weights”。文档说应该是清单,但是我需要按什么顺序放置砝码?我有一个标签数组,它具有从-2到+2的15个类,包括十进制数字,与其他类相比,class-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(线程数= 4,n_estimators = n_estimators,max_depth = 10,class_weights = class_weights,eta = eta,loss_function = loss_function)
答案 0 :(得分:1)
现在可以传递带有标签和相应权重的字典了。
假设我们有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)
答案 1 :(得分: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мр', 'вывод на ИП', 'вывод на кк', 'вывод на фл', 'транзит']