DataCanvasIO / DeepTables

DeepTables: Deep-learning Toolkit for Tabular data
https://deeptables.readthedocs.io
Apache License 2.0
663 stars 118 forks source link

parameter setting #34

Open weihong2 opened 4 years ago

weihong2 commented 4 years ago

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

weihong2 commented 4 years ago

模型训练结果 image image image

jackguagua commented 4 years ago
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']

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

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

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

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

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

weihong2 commented 4 years ago

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

weihong2 commented 4 years ago

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

jackguagua commented 4 years ago

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

jackguagua commented 4 years ago

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

什么叫备选模型?

weihong2 commented 4 years ago

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

jackguagua commented 4 years ago

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

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

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

image

weihong2 commented 4 years ago

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

weihong2 commented 4 years ago

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

jackguagua commented 4 years ago

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

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

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

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

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

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

mokeeqian commented 2 years ago

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

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