模型配置

ModelConfig 是 DT 中最重要的参数。它用于设置如何自动清理和预处理数据,以及如何组装各种网络组件以构建用于预测任务的神经网络,还包括网络超参数的设置等。如果您不更改 ModelConfig 中的任何设置,DT 在大多数情况下也能正常工作。但是,通过调整 ModelConfig 中的参数,您可以获得更好的性能。

我们在下面详细描述。

ModelConfig的简单用例

from deeptables.models.deeptable import DeepTable, ModelConfig
from deeptables.models.deepnets import DeepFM

conf = ModelConfig(
    nets=DeepFM, # same as `nets=['linear','dnn_nets','fm_nets']`
    categorical_columns='auto', # or categorical_columns=['x1', 'x2', 'x3', ...]
    metrics=['AUC', 'accuracy'], # can be `metrics=['RootMeanSquaredError']` for regression task
    auto_categorize=True,
    auto_discrete=False,
    embeddings_output_dim=20,
    embedding_dropout=0.3,
    )
dt = DeepTable(config=conf)
dt.fit(X, y)

参数

网络

字符串列表或自定义函数, (默认=['dnn_nets'])

您可以使用多个组件来组合神经网络联合训练以执行预测任务。

nets 的值可以是组件名称、预设模型和自定义函数的任意组合。

组件:

  • ‘dnn_nets’
  • ‘linear’
  • ‘cin_nets’
  • ‘fm_nets’
  • ‘afm_nets’
  • ‘opnn_nets’
  • ‘ipnn_nets’
  • ‘pnn_nets’,
  • ‘cross_nets’
  • ‘cross_dnn_nets’
  • ‘dcn_nets’,
  • ‘autoint_nets’
  • ‘fg_nets’
  • ‘fgcnn_cin_nets’
  • ‘fgcnn_fm_nets’
  • ‘fgcnn_ipnn_nets’
  • ‘fgcnn_dnn_nets’
  • ‘fibi_nets’
  • ‘fibi_dnn_nets’

预设模型: (在包 deeptables.models.deepnets 中)

  • DeepFM
  • xDeepFM
  • DCN
  • PNN
  • WideDeep
  • AutoInt
  • AFM
  • FGCNN
  • FibiNet

自定义函数:

def custom_net(embeddings, flatten_emb_layer, dense_layer, concat_emb_dense, config, model_desc):
    out = layers.Dense(10)(flatten_emb_layer)
    return out

示例:

from deeptables.models.deeptable import ModelConfig, DeepTable
from deeptables.models import deepnets
from tensorflow.keras import layers

#preset model
conf = ModelConfig(nets=deepnets.DeepFM)

#list of str(name of component)
conf = ModelConfig(nets=['linear','dnn_nets','cin_nets','cross_nets'])

#mixed preset model and names
conf = ModelConfig(nets=deepnets.WideDeep+['cin_nets'])

#mixed names and custom function
def custom_net(embeddings, flatten_emb_layer, dense_layer, concat_emb_dense, config, model_desc):
    out = layers.Dense(10)(flatten_emb_layer)
    return out
conf = ModelConfig(nets=['linear', custom_net])

分类列

字符串列表或‘auto’,可选,(默认='auto'

只有分类特征会被传递到嵌入层,而DT中的大多数组件都是专门为特征提取的嵌入输出设计的。合理选择分类特征对模型性能至关重要。

如果字符串列表,则解释为列名。

如果 'auto',自动获取分类列。默认情况下会选择 objectboolcategory 列,并且 [auto_categorize] 将不再生效。

如果没有必要,我们强烈建议使用默认值 'auto'

排除列

字符串列表, (默认=[])

pos_label

字符串或整数, (默认=None)

正类的标签,仅在任务为二分类时使用。

指标

字符串列表或可调用对象,(默认=['accuracy']

模型在训练和测试期间要评估的指标列表。通常你会使用metrics=['accuracy']metrics=['AUC']。每个指标应该是tf.keras.metrics中的内置评估指标或像r2(y_true, y_pred):...这样的可调用对象。

另请参阅: https://tensorflow.google.cn/versions/r2.0/api_docs/python/tf/keras/metrics

auto_categorize

布尔值, (默认=False)

是否自动对符合条件的连续特征进行分类。

  • True:
  • False:

cat_exponent

浮点数, (默认=0.5), 介于0和1之间

仅在 auto_categrization = True 时可用。

具有(number of unique values < number of samples ** cat_exponent)的列将被视为分类特征。

cat_remain_numeric

布尔值, (默认=True)

仅在 auto_categrization = True 时可用。

连续特征转换为分类特征后是否保留数值特征。

  • True:
  • False:

自动编码标签

布尔值, (默认=True)

是否自动对分类特征进行标签编码。

自动填充

布尔值, (默认=True)

是否自动对所有特征进行插补。

auto_discrete

布尔值, (默认=False)

是否将所有连续特征离散化为分类特征。

固定嵌入维度

布尔值, (默认=True)

所有分类特征的嵌入输出是否使用相同的‘output_dim’。需要注意的是,某些组件要求嵌入的output_dim必须相同,包括FMAFMCINMultiheadAttentionSENETInnerProduct等。

如果 False 并且 embedding_output_dim=0,那么嵌入的 output_dim 将使用以下公式计算:

min(4 * int(pow(voc_size, 0.25)), 20)
#voc_size is the number of unique values of each feature.

embeddings_output_dim

整数, (默认=4)

embeddings_initializer

字符串或对象, (默认='uniform')

embeddings 矩阵的初始化器。

嵌入正则化器

字符串或对象, (默认=None)

应用于embeddings矩阵的正则化函数。

密集丢弃

浮点数, (默认=0) 介于0和1之间

密集输入单元的丢弃比例。

embedding_dropout

浮点数,默认值为0.3,范围在0到1之间

嵌入输入单元的丢弃比例。

stacking_op

str, (默认='add')

  • 'add'
  • 'concat'

output_use_bias

布尔值, (默认=True)

应用类别权重

布尔值, (默认=’False’)

是否自动计算每个类别的权重。这可能有助于告诉模型“更加关注”来自代表性不足类别的样本。

优化器

str(优化器名称) 或 优化器实例 或 'auto', (默认='auto')

参见 tf.keras.optimizers

  • ‘auto’: 根据任务类型自动选择优化器。

损失

str(目标函数名称) 或 目标函数 或 tf.losses.Loss 实例 或 'auto', (默认='auto')

参见 tf.losses

  • ‘auto’: 根据任务类型自动选择目标函数。

home_dir

字符串, (默认=None)

用于保存模型相关文件的主目录。每次运行fit(...)fit_cross_validation(...)时,都会在此目录中创建一个带有时间戳的子目录。

监控指标

字符串, (默认=None)

earlystopping_patience

整数, (默认=1)

GPU使用策略

str, (默认='memory_growth')

  • 'memory_growth'
  • 'None'

distribute_strategy:

tensorflow.python.distribute.distribute_lib.Strategy, (默认=None)

dnn_params

字典 仅在‘dnn_nets’或使用‘dnn’的组件(如‘pnn_nets’、‘dcn_nets’)包含在[nets]中时可用。

{
    'hidden_units': ((128, 0, False), (64, 0, False)),
    'dnn_activation': 'relu'}
)

autoint_params

字典 仅在 [nets] 中包含 'autoint_nets' 时可用。

{
    'num_attention': 3,
    'num_heads': 1,
    'dropout_rate': 0,
    'use_residual': True
}

fgcnn参数

字典 仅在[nets]中包含'fgcnn_nets'或使用'fgcnn'的组件时可用。

{
    'fg_filters': (14, 16),
    'fg_widths': (7, 7),
    'fg_pool_widths': (2, 2),
    'fg_new_feat_filters': (2, 2),
}

fibinet_params

字典 仅在[nets]中包含'fibi_nets'时可用。

{
    'senet_pooling_op': 'mean',
    'senet_reduction_ratio': 3,
    'bilinear_type': 'field_interaction',
}

交叉参数

字典 仅在 [nets] 中包含 'cross_nets' 时可用。

{
    'num_cross_layer': 4,
}

pnn_params

字典 仅在[nets]中包含‘pnn_nets’或‘opnn_nets’时可用。

{
    'outer_product_kernel_type': 'mat',
}

afm_params

字典 仅在 [nets] 中包含 'afm_nets' 时可用。

{
    'attention_factor': 4,
    'dropout_rate': 0
}

cin_params

字典 仅在[nets]中包含'cin_nets'时可用。

{
    'cross_layer_size': (128, 128),
    'activation': 'relu',
    'use_residual': False,
    'use_bias': False,
    'direct': False,
    'reduce_D': False,
}