DeepTables icon indicating copy to clipboard operation
DeepTables copied to clipboard

parameter setting

Open weihong2 opened this issue 3 years ago • 12 comments

您好,想咨询下deeptable调参问题 1.二分类数据集,正负样本比例不平衡(10 : 1),使用xgboost可以设置样本权重,deeptable是否有类似参数可以设置呢? 2.针对正负样本比例不平衡的数据集,有什么参数设置让模型得到比较好的评估值? 3.nets参数可以多选网络,在训练中是将多个网络组合,还是选择其中一个或几个好的网络呢? 4.看样例可以设置LightGBM参数,那需要有开关开启使用LightGBM吗? 5.对于deeptable有哪些好的调参经验参考呢?

weihong2 avatar Sep 09 '20 07:09 weihong2

模型训练结果 image image image

weihong2 avatar Sep 09 '20 07:09 weihong2

  • 样本不平衡可以尝试开启ModelConfig中的apply_class_weight=True, 参考文档

  • 选择nets的搭配最好要先熟悉各个nets的特性,各个nets原作者的paper是最好的参考资料。如果这方面没有太多的经验,建议使用预置的网络模型(Wide&Deep/DeepFM/DCN等等),可参考下列组合

WideDeep = ['linear', 'dnn_nets']

DeepFM = ['linear', 'fm_nets', 'dnn_nets']

xDeepFM = ['linear', 'cin_nets', 'dnn_nets']

AutoInt = ['autoint_nets']

DCN = ['dcn_nets']

FGCNN = ['fgcnn_dnn_nets']

FiBiNet = ['fibi_dnn_nets']

PNN = ['pnn_nets']

AFM = ['afm_nets']
  • apply_gbm_features=True 可以开启GBM模型融合

  • 调参涉及的话题范围太大,我介绍几个关键参数,每个参数都要根据数据集的数据特性来选择

如果数据集以连续型特征为主,以下两个参数非常重要,可以让连续型特征参与到特征衍生和提取的计算中。

  1. auto_categorize: 是否自动把连续性特征转化成类别型,比如有时候int型的数据实际是类别型特征

  2. auto_discrete: 是否自动把连续性特征做离散化处理(分箱)

根据数据集的特征数量调整dnn_params,设置合适的神经元数量和层数,参考

  • HyperDT可以实现自动化的调参,目前还没有正式发布,也没有提供相关文档,如果有兴趣可以参考源码中的测试用例。

https://github.com/DataCanvasIO/DeepTables/blob/d1201d9067d8918a32875598629a1ca7deca407a/tests/models/hyper_dt_test.py#L18

jackguagua avatar Sep 09 '20 08:09 jackguagua

nets = ['linear', 'fm_nets', 'dnn_nets', 'linear', 'fm_nets', 'dnn_nets'],这种情况是将多个nets 合并在一起训练吗

weihong2 avatar Sep 09 '20 08:09 weihong2

能否选择xgboost做为备选模型之一呢

weihong2 avatar Sep 09 '20 08:09 weihong2

同一个nets只能出现一次,['linear', 'fm_nets', 'dnn_nets']是的合法的。

jackguagua avatar Sep 09 '20 08:09 jackguagua

能否选择xgboost做为备选模型之一呢

什么叫备选模型?

jackguagua avatar Sep 09 '20 08:09 jackguagua

感谢,使用apply_class_weight=True有明显改变,nets 里面选择多个是将每一个组合在一起使用吗?还是只选择其中部分的网络?使用LightGBM的作用是什么呢

weihong2 avatar Sep 11 '20 03:09 weihong2

nets 里面选择多个是将每一个组合在一起使用吗?还是只选择其中部分的网络?使用LightGBM的作用是什么呢

如果nets=['linear', 'fm_nets', 'dnn_nets'],就会组合linear+fm+dnn3个网络做联合训练,开启GBM会提取gbm模型特征融合到神经网络中,不过这个在不同数据集上表现不同,有时候会过拟合,需要小心使用。

可以参考下图,便于理解DT的网络架构

image

jackguagua avatar Sep 11 '20 03:09 jackguagua

1.特征交互层中:add、concat 有什么区别吗 2.客户想要跟传统机器学习一样的功能,能否得到特征重要性? 3.客户感觉直接这行dt = DeepTable(config=conf),太黑盒了。想在运行结果显示下中间步骤,不知道怎么设置?

weihong2 avatar Sep 14 '20 06:09 weihong2

关于第三个问题,dt.fit(df_train, y, epochs=3, verbose=2),我将verbose参数设置为:0、1、2。0和1区别:0不展示 image ,1和2没有区别。我的理解是0 = 安静模式, 1 = 进度条, 2 = 每轮一行,但1和2没看到区别。客户主要感觉太黑盒了

weihong2 avatar Sep 14 '20 07:09 weihong2

1.特征交互层中:add、concat 有什么区别吗

有,concat后面会在接一层dense,相当于进一步学习不同nets的权重

2.客户想要跟传统机器学习一样的功能,能否得到特征重要性?

可以结合shap来得到模型解释性。 参考:https://github.com/DataCanvasIO/DeepTables/issues/16

3.客户感觉直接这行dt = DeepTable(config=conf),太黑盒了。想在运行结果显示下中间步骤,不知道怎么设置?

整个过程都在一个神经网络里面

jackguagua avatar Sep 16 '20 13:09 jackguagua

2.针对正负样本比例不平衡的数据集,有什么参数设置让模型得到比较好的评估值?

我最近在做的一个1:100的二分类,同样是precision很高和recall很低;gbm模型设置scale_pos_weight后,recall上到80,precision只有10; 我觉得还是入模的特征不能够很好的去区分label,你用DNN训练有提升吗?

mokeeqian avatar Dec 29 '21 07:12 mokeeqian