非常相似的数据和相似的Catboost模型之间的功能性无能

时间:2018-08-30 01:29:33

标签: python machine-learning catboost

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

我有三套。

  1. 形状为(1277,927)的火车,目标的出现时间约为12%
  2. 具有(174,927)形状的评估集,目标存在的时间约为11.5%
  3. 将形状设置为(414,927)的定格设置,目标出现的时间约为10%

此集合也使用时间片构建。火车设置是最古老的数据。支持设置为最新数据。评估集位于中间集。

现在我正在构建两个模型。

Model1:

# 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
)

预测暂停套期。

Model2:

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发子弹,但会将模型缩小到bestIteration。第二个模型使用了model1的bestIteration。

但是,当我比较功能重要性时。看起来完全不同。

  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中的一个在第一个模型中位于top3上,而在第二个模型中处于下降状态。不仅如此,对于给定功能,模型之间的权重也有很大变化。 model1中大约有60个特征,model2中不存在。并且在model1中不存在约60个在model2中存在的特征。增量是Score_m1和Score_m2之间的差。我已经看到模型更改的得分不那么剧烈。当我使用model1或model2时,AUC和LogLoss的变化不大。

现在我对这种情况有以下疑问。

  1. 由于样本数量少且功能众多,该模型是否不稳定?如果是这种情况,该如何检查?

  2. 此模型中的功能是否没有提供太多有关模型结果的信息,并且存在随机变化,因此会造成分裂。如果是这种情况,如何检查这种情况?

  3. 这种助推器适合这种情况吗?

有关此问题的任何帮助都将得到感谢

1 个答案:

答案 0 :(得分:0)

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

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

具有更多功能会增加这种趋势。

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

尝试的事情:

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

  2. 尝试平衡您的训练集。这可能需要您对少数情况进行升采样。

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