数据挖掘-特征工程(小记录)

定义:

  将数据转换为能更好地表示潜在问题的特征,从而提高机器学习性能。主要有以下五个部分

  •  数据理解(主要在EDA部分完成)
  •  数据清洗
  •  特征构造
  •  特征选择
  •  类别不平衡问题解决

数据清洗(注意,这部分只在训练集上进行)

  目的:提高数据质量,降低算法用错误数据建模的风险

  1. 特征变换: 模型无法处理或者不适合处理的特征对其进行变换

    a)  定性变量编码: Label Encoder; Onehot Enconder ; Distribution Encoder

    b)  标准化和归一化: z分数标准化(标准正太分布)、min-max变换  

  2. 缺失值处理: 增加不确定性质,可能会导致不可靠输出

    a)  不处理: 如果缺失值少或者使用的模型对缺失值有自己的处理方法(例如lgb)

    b)  删除: 对于缺失比例较大的特征或者样本,可以考虑删除(注意删除的时候只能删除训练集上的数据,之前写一个比赛的时候不确定能不能只删除训练集里面的异常值,现在确定是可以试一试了

    c)  补全: 均值/中位数/众数补全; 高维映射(One-hot 把nan作为一类);模型预测;最领近补全;矩阵补全(R-SVD)

  (对于测试集上的一些异常值,可以通过一些人为找出规律然后进行一些简单的预测)

  3. 异常值处理: 减少脏数据

    a) 简单统计: decribe()等统计描述;散点图

    b) 3sigma法则(数据要满足正态分布)/箱型图删除/ 截断

    c) 利用模型进行离群点检测: 聚类、K近邻、One class SVM、Isolation Forest等

    对离群点的处理要根据实际的应用选择合适的方法

 

特征构造

  目的:增加数据的表达性,添加一些先验知识(新的特征不同的值,label的分布差异大一些比较好 个人理解)

  1. 统计量特征:

    计数、求和、平均值、比例、标准差

  2. 时间特征:

    绝对时间、相对时间、节假日、双休日

  3. 地理信息

    也是分桶,不要让特征的值分布的过于密集

    关于邮政编码的划分(逐次划分,然后依次尝试得出一个最优解)

  4. 非线性变换

    取log/平方/根号

  5. 数据分桶

    等频/等距分桶、Best-KS分桶、卡方分桶

  6. 特征组合/交叉

    从 人、商品、人和商品、其他(时间,地理位置等)四个维度出发尝试构造

 (匿名变量就要更多尝试性的去组合一些特征了,加权组合、加减之类的)

(在构造一些特征的时候,要注意区分出测试集和特征集)

特征选择:

  目的: 平衡预测能力和计算复杂度;降低噪声,增强模型预测性能

  1. 过滤式(Filter): 先用特征选择方法对初始特征进行过滤然后再训练学习器,特征选择过程与后续学习器无关

    a) Relief/方差选择/相关系数/卡方检验/互信息法

  2. 包裹式(Wrapper): 直接把最终要使用的学习器的性能作为衡量特征子集的评价准则,其目的在于给定学习器之后选择最有利于其性能的特征子集

    a) Las Vegas Wrapper(LVM)

  3. 嵌入式(Embedding): 结合过滤式和包裹式方法,将特征选择与学习器训练过程融为一体,两者在同一优化过程中完成,即学习器在训练过程中完成了特征选择。

    a) LR+L1正则化 或者决策树

 

类别不平衡问题
  缺点: 少类别提供信息太少,没有学会如何判别少数类

  解决方法:

    1. 扩充数据集;

    2. 尝试其他评价指标: AUC等;

    3. 调整theta值;(预测的阈值做一个调整)

    4. 重采样: 过采样/欠采样

    5. 合成样本: SMOTE

    6. 选择树型模型

    7. 加权少类别样本的错分代价

    8. 创新

      a) 将大类分解成多个小类

      b) 将小类视为异常点,并用异常检测建模

 

一些问题:

1.树型模型推荐使用one-hot编码吗?(这个要结合决策树的原理去理解  待补    catboost可以)

  决策树模型不推荐对离散特征进行one-hot编码。主要有以下两个原因:

  a) 对离散型变量one-hot编码是为了让离散变量之间的距离度量变得有意义。Tree Model没有距离度量的说法,其根据不同的信息熵计算增益来划分节点,是无参数模型。

  b) 增益降低,影响决策树学习。这点建议结合某个具体决策树来理解。拿cart分类树来说,其用的是gini指数。假设某个feature有三类,每类的个数分别为10,100,1000。在不进行one-hot之前,这个feature的增益还是可以的(可以套gini指数计算一下)。one-hot之后,这一个特征变成了三个特征,每个特征只有0、1两个值,比例分别为10/1110,100/1110,1000/1110。不论是哪个新增的one-hot特征,都没有原始feature的增益要高,影响了决策树的正确决策。

 

2. 长尾分布截断什么意思?

  对于长尾分布的数据,如下所示:

 

   我们可以把大于某个值之后的数据都赋为这个值,例如大于400的值都赋值400。另外,服从长尾分布的数据一般都建议先取log再归一化(LR)。这个部分也是需要在一个base上简单测试一下的。

 

3. 一些比较好的特征在模型上表现的不理想的情况怎么处理?

   去看一看这些特征的分布以及和其他特征的相关性。

  

 

posted @ 2020-03-30 16:56  猪突猛进!!!  阅读(510)  评论(0编辑  收藏  举报