我想对我的泰坦尼克号数据集执行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_function
catboost.cv()
则会在内部触发 CheckMetrics 中的断言。
这似乎是catboost
的错误.