DeepTables
DeepTables copied to clipboard
parameter setting
您好,想咨询下deeptable调参问题 1.二分类数据集,正负样本比例不平衡(10 : 1),使用xgboost可以设置样本权重,deeptable是否有类似参数可以设置呢? 2.针对正负样本比例不平衡的数据集,有什么参数设置让模型得到比较好的评估值? 3.nets参数可以多选网络,在训练中是将多个网络组合,还是选择其中一个或几个好的网络呢? 4.看样例可以设置LightGBM参数,那需要有开关开启使用LightGBM吗? 5.对于deeptable有哪些好的调参经验参考呢?
模型训练结果
-
样本不平衡可以尝试开启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模型融合
-
调参涉及的话题范围太大,我介绍几个关键参数,每个参数都要根据数据集的数据特性来选择
如果数据集以连续型特征为主,以下两个参数非常重要,可以让连续型特征参与到特征衍生和提取的计算中。
-
auto_categorize: 是否自动把连续性特征转化成类别型,比如有时候int型的数据实际是类别型特征
-
auto_discrete: 是否自动把连续性特征做离散化处理(分箱)
根据数据集的特征数量调整dnn_params,设置合适的神经元数量和层数,参考
- HyperDT可以实现自动化的调参,目前还没有正式发布,也没有提供相关文档,如果有兴趣可以参考源码中的测试用例。
https://github.com/DataCanvasIO/DeepTables/blob/d1201d9067d8918a32875598629a1ca7deca407a/tests/models/hyper_dt_test.py#L18
nets = ['linear', 'fm_nets', 'dnn_nets', 'linear', 'fm_nets', 'dnn_nets'],这种情况是将多个nets 合并在一起训练吗
能否选择xgboost做为备选模型之一呢
同一个nets只能出现一次,['linear', 'fm_nets', 'dnn_nets']是的合法的。
能否选择xgboost做为备选模型之一呢
什么叫备选模型?
感谢,使用apply_class_weight=True有明显改变,nets 里面选择多个是将每一个组合在一起使用吗?还是只选择其中部分的网络?使用LightGBM的作用是什么呢
nets 里面选择多个是将每一个组合在一起使用吗?还是只选择其中部分的网络?使用LightGBM的作用是什么呢
如果nets=['linear', 'fm_nets', 'dnn_nets'],就会组合linear+fm+dnn3个网络做联合训练,开启GBM会提取gbm模型特征融合到神经网络中,不过这个在不同数据集上表现不同,有时候会过拟合,需要小心使用。
可以参考下图,便于理解DT的网络架构
1.特征交互层中:add、concat 有什么区别吗 2.客户想要跟传统机器学习一样的功能,能否得到特征重要性? 3.客户感觉直接这行dt = DeepTable(config=conf),太黑盒了。想在运行结果显示下中间步骤,不知道怎么设置?
关于第三个问题,dt.fit(df_train, y, epochs=3, verbose=2),我将verbose参数设置为:0、1、2。0和1区别:0不展示
,1和2没有区别。我的理解是0 = 安静模式, 1 = 进度条, 2 = 每轮一行,但1和2没看到区别。客户主要感觉太黑盒了
1.特征交互层中:add、concat 有什么区别吗
有,concat后面会在接一层dense,相当于进一步学习不同nets的权重
2.客户想要跟传统机器学习一样的功能,能否得到特征重要性?
可以结合shap来得到模型解释性。 参考:https://github.com/DataCanvasIO/DeepTables/issues/16
3.客户感觉直接这行dt = DeepTable(config=conf),太黑盒了。想在运行结果显示下中间步骤,不知道怎么设置?
整个过程都在一个神经网络里面
2.针对正负样本比例不平衡的数据集,有什么参数设置让模型得到比较好的评估值?
我最近在做的一个1:100的二分类,同样是precision很高和recall很低;gbm模型设置scale_pos_weight后,recall上到80,precision只有10; 我觉得还是入模的特征不能够很好的去区分label,你用DNN训练有提升吗?