让我先解释一下我正在使用的数据集。
我有三套。
- 形状为 (1277, 927) 的火车,目标出现的时间约为 12%
- 形状为 (174, 927) 的评估集,目标出现的时间约为 11.5%
- 支持形状为 (414, 927) 的集合,目标出现的时间约为 10%
这组也是使用时间片构建的。训练集是最旧的数据。支持集合是最新数据。并且 Eval 集在中间集。
现在我正在构建两个模型。
型号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
如您所见,在第一个模型中位于 top3 的特性 x3 在第二个模型中下降。不仅如此,给定特征的模型之间的权重也有很大的变化。模型 1 中存在的大约 60 个特征在模型 2 中不存在。模型 2 中存在的大约 60 个特征在模型 1 中不存在。delta 是 Score_m1 和 Score_m2 之间的差异。我已经看到模型变化在哪里得分不是那么剧烈。当我使用模型 1 或模型 2 时,AUC 和 LogLoss 并没有太大变化。
现在我有以下关于这种情况的问题。
由于样本数量少,特征数量多,这个模型是否不稳定。如果是这种情况,如何检查?
此模型中是否有功能只是没有提供有关模型结果的太多信息,并且它正在创建分裂的随机变化。如果这种情况如何检查这种情况?
这种 catboost 是适合这种情况的模型吗?
任何有关此问题的帮助将不胜感激