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


    定义:

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

    •  数据理解(主要在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. 一些比较好的特征在模型上表现的不理想的情况怎么处理?

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

      

  • 相关阅读:
    ActivityLifecycleCallbacks 如何控制activity的生命周期
    ViewPage + Fragment 防止Fragment 重复加载问题
    RecyclerView 必知必会(转)
    如何简单的实现一个tab页title的动画效果
    onInterceptTouchEvent和onTouchEvent调用时序(转)
    Android Studio 2.3版本 Run项目不能自动启动APP的问题 (转)
    js-jQuery性能优化(一)
    js-权威指南学习笔记20
    js-权威指南学习笔记19.2
    js-权威指南学习笔记19
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12599609.html
Copyright © 2020-2023  润新知