让我先解释一下我正在使用的数据集。
我有三套。
此集合也使用时间片构建。火车设置是最古老的数据。支持设置为最新数据。评估集位于中间集。
现在我正在构建两个模型。
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的变化不大。
现在我对这种情况有以下疑问。
由于样本数量少且功能众多,该模型是否不稳定?如果是这种情况,该如何检查?
此模型中的功能是否没有提供太多有关模型结果的信息,并且存在随机变化,因此会造成分裂。如果是这种情况,如何检查这种情况?
这种助推器适合这种情况吗?
有关此问题的任何帮助都将得到感谢
答案 0 :(得分:0)
是的。一般而言,树木有些不稳定。如果删除最不重要的功能,则可以得到完全不同的模型。
拥有更多数据可以减少这种趋势。
具有更多功能会增加这种趋势。
树算法本质上是随机的,因此结果会有所不同。
尝试的事情:
运行模型多次,但使用不同的随机种子。使用结果确定哪个功能似乎最不重要。 (您有几个功能?)
尝试平衡您的训练集。这可能需要您对少数情况进行升采样。
获取更多数据。也许您必须将训练和测试集结合起来,并使用保留作为测试。