CatBoostError:损失 [RMSE] 与度量 [精度] 不兼容(不支持分类)



我想对我的泰坦尼克号数据集执行CatBoost,该数据集主要由分类数据组成,并具有二进制目标。

我的数据如下所示:

train.head()

Embarked    Pclass  Sex Survived    IsCabin Deck    IsAlone IsChild Title   AgeBin  FareBin
0   S   3   male    0.0 0   Unknown 0   1   Mr  Young   Low
1   C   1   female  1.0 1   C   0   1   Mrs Adult   High
2   S   3   female  1.0 0   Unknown 1   1   Miss    Young   Mid low
3   S   1   female  1.0 1   C   0   1   Mrs Adult   High
4   S   3   male    0.0 0   Unknown 1   1   Mr  Adult   Mid low

我做了:

# Get train and validation sub-datasets
from sklearn.model_selection import train_test_split
x = train.drop(["Survived"], axis=1)
y = train["Survived"]
#Do train data splitting
X_train, X_test, y_train, y_test = train_test_split(x,y, test_size=0.2, random_state=42)
# Get categorical features
cat_features_indices = np.where(x.dtypes != float)[0]
import catboost
model = catboost.CatBoostClassifier(
one_hot_max_size=7,
iterations=100,
random_seed=42,
verbose=False,
eval_metric='Accuracy'
)
pool = catboost.Pool(X_train, y_train, cat_features_indices)
cv_scores = catboost.cv(pool, model.get_params(), fold_count=10, plot=True)

。返回:

CatBoostError: catboost/libs/metrics/metric.cpp:4617: loss [RMSE] 为 与公制 [精度] 不兼容(不支持分类(

帮助将得到重视。我对这个错误有点困惑。谢谢!

看起来 Catboost 引用了默认的loss_function参数

在您的代码中,model.get_params(( 将不包含loss_function的值,然后似乎默认为 RMSE(不应该用于分类器,但似乎出于某种原因(

如果你看一下分类loss_functions,只有两个有效的选择 - 对数和交叉熵。只有这些可以用于优化,其余的都是报告的指标。 见 https://catboost.ai/docs/concepts/loss-functions-classification.html

如果您将参数loss_function='Logloss'添加到 CatBoostClassifier 初始化中,它应该可以工作

TCatBoostOptions.LossFunctionDescription 初始化时,RSME作为默认值。

如果未设置loss_functioncatboost.cv()则会在内部触发 CheckMetrics 中的断言。

这似乎是catboost的错误.

相关内容

最新更新