catboost中非常相同的数据和非常相似的模型之间的特征重要性存在显著差异

2024-09-27 09:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

首先让我解释一下我正在使用的数据集

我有三套

  1. 形状为(1277927)的火车,目标大约有12%的时间在现场
  2. 评估集的形状为(174927),目标出现的时间约为11.5%
  3. 保持(414927)形状,目标大约有10%的时间出现

这个集合也在使用时间片进行构建。列车组是最古老的数据。保持组是最新的数据。评估集在中间集

现在我正在构建两个模型

模式1:

# Initialize CatBoostClassifier
model = CatBoostClassifier(
    # custom_loss=['Accuracy'],
    depth=9,
    random_seed=42,
    l2_leaf_reg=1,
    # has_time= True,
    iterations=300,
    learning_rate=0.05,
    loss_function='Logloss',
    logging_level='Verbose',
)

## Fitting catboost model
model.fit(
    train_set.values, Y_train.values,
    cat_features=categorical_features_indices,
    eval_set=(test_set.values, Y_test)
    # logging_level='Verbose'  # you can uncomment this for text output
)

在保持集合上预测

模式2:

model = CatBoostClassifier(
    # custom_loss=['Accuracy'],
    depth=9,
    random_seed=42,
    l2_leaf_reg=1,
    # has_time= True,
    iterations= 'bestIteration from model1',
    learning_rate=0.05,
    loss_function='Logloss',
    logging_level='Verbose',

)

## Fitting catboost model
model.fit(
    train.values, Y.values,
    cat_features=categorical_features_indices,
    # logging_level='Verbose'  # you can uncomment this for text output
)

除了迭代之外,这两个模型是相同的。第一个模型有固定的300轮,但它会将模型缩小到最佳迭代。其中第二个模型使用模型1中的最佳迭代

但是,当我比较特性重要性时。看起来差别很大

  Feature  Score_m1  Score_m2     delta
0      x0  3.612309  2.013193 -1.399116
1      x1  3.390630  3.121273 -0.269357
2      x2  2.762750  1.822564 -0.940186
3      x3  2.553052       NaN       NaN
4      x4  2.400786  0.329625 -2.071161

正如您所看到的,功能x3中的一个在第一款车型中位于前3位,在第二款车型中下降。不仅如此,对于给定的特征,模型之间的权重也有很大的变化。model1中有大约60个功能,model2中没有。模型2中存在的大约60个特性在模型1中不存在。delta是分数m1和分数m2之间的差值。我已经看到模型的变化有点小,但没有这么剧烈。当我使用model1或model2时,AUC和LogLoss没有太大变化

现在我有以下关于这种情况的问题

  1. 由于样本数量少,特征数量多,模型不稳定。如果是这种情况,如何检查

  2. 这个模型中是否有这样一个特性,就是没有提供太多关于模型结果的信息,并且存在随机变化,它正在创建拆分。如果发生这种情况,如何检查这种情况

  3. 这种catboost是适合这种情况的型号吗

任何关于这个问题的帮助都将不胜感激


Tags: 数据模型目标verbosemodellogging时间情况
1条回答
网友
1楼 · 发布于 2024-09-27 09:32:20

对。一般来说,树木有些不稳定。如果删除最不重要的功能,则可以得到完全不同的模型

拥有更多的数据可以减少这种趋势

拥有更多的特征会增加这种趋势

树算法本质上是随机的,因此结果会有所不同

尝试的事项:

  1. 多次运行模型,但使用不同的随机种子。使用结果确定哪项功能似乎最不重要。(您有多少功能?)

  2. 试着平衡你的训练。这可能需要您对较罕见的案例进行采样

  3. 获取更多数据。也许你必须将你的训练和测试集结合起来,并使用保持器作为测试

相关问题 更多 >

    热门问题