NLP实战 特征工程+神经网络

文章目录

  • 特征工程
      • 记录
      • 半自动特征构建 Target Mean Encoding
      • 半自动特征构建 Categorical Encoder
      • 半自动特征构建 连续变量离散化
      • 半自动特征构建 Entity Embedding
      • 半自动特征构建 连续变量的转换
      • 半自动特征构建 缺失值变量和异常值的处理
      • 自动特征构建 Symbolic learning 和 AutoCross
      • 降维方法 PCA、NMF、tSNE
      • 降维方法 Denoising Auto Encoders
      • 树模型
      • 挖掘人工特征的方法论
      • 应用人工特征的注意事项
  • 神经网络
      • 神经网络
      • 神经网络的训练:初始化
      • 神经网络的训练:学习率
      • PyTorch训练
      • Transformer
      • 神经网络:时序数据
      • 图网络
      • 模型融合
      • 模型融合

特征工程

记录

  1. 类别特征做count,对于某类中数值型特征存在区间段划分的情况也可做count
  2. F1权重调整
  3. 将某一样本的部分特征做成w2v,增加聚类效果,强化近似类别之间的差异
  4. 初赛数据跟复赛数据concat(类别特征一样且可用)
  5. 轨迹特征做diff 差值特征强时序性
  6. 阈值优化 蒙特卡洛搜索 scipy.optimize

半自动特征构建 Target Mean Encoding

简介:

  • 对于离散变量最有效编码方式之一
  • 对于维度较高的离散型标量效果很好
  • 重点在于防止过拟合

对于某类别值较少的情况,可以采取其他类别加权求值;对于某常规类,可采取划分组,例如分5分,第五份的数据值由前四份的数据均值提供,以此类推其他方法。

对应Pandas中的df.groupby([A,B])[C].agg(fun)函数。 Groupby函数可以应用于任何其他变量,在某种程度上捕捉了多变量之间的交叉效应。Func可以是多种函数,如mean,std,kurtosis,min,max等等。例子查看海洋大赛baseline。

可以对残差进行以上操作。

半自动特征构建 Categorical Encoder

pip包:category encoders

one hot / ordinal encoder / count encoder

半自动特征构建 连续变量离散化

为什么要对连续变量离散化:

  • 捕捉非线性效应

  • 捕捉交叉效应

常见的离散化方法:

  • Uniform
  • 基于Quantile *
  • 基于聚类
  • 基于树

半自动特征构建 Entity Embedding

NLP实战 特征工程+神经网络_第1张图片
NLP实战 特征工程+神经网络_第2张图片

半自动特征构建 连续变量的转换

常见的数据转换方法

  • 单变量:log 次方 倒数

  • 多变量:交叉项 加减乘除 max min groupby等

  • 标准化

基于ECDF 的方法

Box-Cox变换和Yeo-Johnson Transform 针对y值

半自动特征构建 缺失值变量和异常值的处理

概述

  • 异常值和缺失值的定义常常是难以确定的

  • 异常值的检验最可靠的方法:

    • EDA加上业务逻辑

    • 根据分位数或者其他方法

    • 如果异常值是由于输入失误造成的,则可以将之作为缺失值处理

  • 缺失值的填充往往可以根据业务决定,其他可以采用平均值、中位数或者众数进行填充;也可以单独构建模型进行预测

解决办法

  • 缺失值的填充往往可以根据业务决定
  • 缺失和异常本身可能有信息量的,可以构造哑变量进行处理(成组的缺失值和异常值本身可能是有信息的)
  • 对于部分异常值,还需要进行截断处理
  • 对于重要的缺失变量,很有可能需要进行预测(考虑预测后对模型的效果)

自动特征构建 Symbolic learning 和 AutoCross

降维方法 PCA、NMF、tSNE

  • 隐藏维度选择取决于数据
  • 数据需要进行预处理(标准化、选取重要变量、去掉过于系数是的个别变量、可构建2折或3折的交叉效应)
  • 降维方法的参数并不十分重要,有时间选取所有参数并你和模型进行测试

降维方法 Denoising Auto Encoders

  • DAE一般对多模态有很好的效果
  • 一般的噪声范畴:5%-20%(结构化数据)
  • 其他降维方法的trick也适用于DAE
  • 注意将中间层均拿出来进行预测

树模型

XGBoost
NLP实战 特征工程+神经网络_第3张图片

挖掘人工特征的方法论

  • 特征收集
  • 特征归类
  • 特征完善
  • (可选)Bad-case分析

应用人工特征的注意事项

  • 先期投入与后期投入
  • 止损点
  • 定性与定量

神经网络

神经网络

  • Residual Connection
  • Dense Connection
  • Network in network
  • Gating Mechanism
  • Attention

神经网络的训练:初始化

初始化的重要性

常见初始化方法

  • 常数初始化 -> 一般效果不佳
  • 随机初始化:均匀分布和正太分布
  • Xavier初始化和Kaiming初始化
  • 一般来说gain需要进行调整

神经网络的训练:学习率

学习率空控制由梯度更新方向时,在此方向上最优的步长。

神经网络炼丹最重要的参数,没有之一。

理论来说,学习率过小 -> 收敛过慢,学习率过大 -> 错过局部最优。

实际上可能,学习率过小 -> 不收敛,学习率过大 -> 不收敛。

学习率设定

  • 首先寻找ok的学习率,然后调整其他参数,最后在精调学习率
  • 不同层采用不同的学习率
  • 在最终阶段降低学习率,或者Babysit
  • Warm-up

分层学习率

optimizer = optim.Adam([{'params':model.layer1.patameters(), 'lr':1e-2},
                        {'params':model.layer2.parameters(), 'lr':1e-3}], 
                       lr = 2e-2)

Warm-up

理论上来说,小学习率有助于模型训练稳定

实际对随机初始化的网络而言,开始过小的学习率会导致训练不稳定

一般采取Warm-up:学习率从小到大再到小

学习率衰减

梯度下降法需要指定一个学习率来控制权重更新的步长,一般在模型训练初期,使用较大的学习率可以快速的使网络收敛,然后逐渐减小学习率,学习到最优解。

PyTorch训练

半精度训练

分布式训练

梯度累积

Transformer

神经网络:时序数据

  • 横截面数据和时序数据

  • 传统时序建模方法

  • 神经网络时序建模准则

    通常以LSTM和GRU 为基础(不需要时间序列的长度相等)

    考虑区分随时间变化的变量和不随机变化的变量

    Encoder可以单独进行训练(注意权重共享)

    通常可以通过注意力机制提升效果

图网络

从何处挖掘图关系

  • 任何能够构成两两之间关系的都可以用图表示

  • 几种情况:

    • 图关系为数据的本质关系 -> 图网络

    • 图关系为一种重新看待问题的方式 -> 图网络作为模型平均

    • 图关系作为补充信息 -> 图嵌入现有模型其补充作用

      图嵌入

      ​ 将node或者edge映射为一个向量

      ​ 注意考虑的是图关系,而非其他性质

      ​ 速度较快,对现有模型起补充作用

处理图关系的两种方法

图嵌入方法分类

  • 矩阵分解为基础的方法
  • DeepWalk为基础的方法

**图嵌入方法举例:ProNE **

图网络的决策因素

  • 如何构建图
  • 如何构建图网络的任务
  • 除去图关系外额外的信息
  • 网络架构设计
  • 优化算法

模型融合

Stack

将node或者edge映射为一个向量

​	注意考虑的是图关系,而非其他性质

​	速度较快,对现有模型起补充作用

处理图关系的两种方法

图嵌入方法分类

  • 矩阵分解为基础的方法
  • DeepWalk为基础的方法

**图嵌入方法举例:ProNE **

图网络的决策因素

  • 如何构建图
  • 如何构建图网络的任务
  • 除去图关系外额外的信息
  • 网络架构设计
  • 优化算法

模型融合

Stack

META-DES

你可能感兴趣的:(NLP学习记录)