首先让我解释一下我正在使用的数据集
我有三套
这个集合也在使用时间片进行构建。列车组是最古老的数据。保持组是最新的数据。评估集在中间集
现在我正在构建两个模型
模式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没有太大变化
现在我有以下关于这种情况的问题
由于样本数量少,特征数量多,模型不稳定。如果是这种情况,如何检查
这个模型中是否有这样一个特性,就是没有提供太多关于模型结果的信息,并且存在随机变化,它正在创建拆分。如果发生这种情况,如何检查这种情况
这种catboost是适合这种情况的型号吗
任何关于这个问题的帮助都将不胜感激
对。一般来说,树木有些不稳定。如果删除最不重要的功能,则可以得到完全不同的模型
拥有更多的数据可以减少这种趋势
拥有更多的特征会增加这种趋势
树算法本质上是随机的,因此结果会有所不同
尝试的事项:
多次运行模型,但使用不同的随机种子。使用结果确定哪项功能似乎最不重要。(您有多少功能?)
试着平衡你的训练。这可能需要您对较罕见的案例进行采样
获取更多数据。也许你必须将你的训练和测试集结合起来,并使用保持器作为测试
相关问题 更多 >
编程相关推荐