Datawhale 零基础入门数据挖掘Task3特征工程

特征工程:将数据转换为能更好地表示潜在问题的特征,从而提高机器学习性能

数据理解

目的探索数据,了解数据,主要在EDA阶段完成

定性数据:描述性质

  • 定类
  • 定序

定量数据:描述数量

  • 定距:可以加减---日期(时间差)
  • 定比:可以乘除---价格(几倍)

数据层---->描述层----->解读层----->绪论层

数据清洗

目的提高数据质量,降低算法用错误数据建模的风险
设想一下,给模型一个杂乱无章、非常脏的数据,那么模型学习起来也是非常困难的,那如果我们给的数据是比较干净的,那学习起来也会很方便

  1. 特征变换:模型无法处理或者不适合处理
    • 定性变量编码:Label Encoder;Onehot Encoder;Distribution Encoder;(比如说LR是不适合处理类别变量的)
    • (有时候我们还需要对数据的分布进行转换)标准化,Z分数标准化(标准正态分布)和归一化,min-max归一化[0,1]区间;
    • 针对幂律分布(长尾),可以采用公式:\(log(\frac{1+x}{1+median})\)
  2. 缺失值的处理
    • 不处理(针对类似XGBoost等树模型);
    • 删除(缺失数据太多);
    • 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等;
    • 分箱,缺失值一个箱;
  3. 异常处理:减少脏数据
    • 简单统计:如describe()的统计描述;散点图等直观方法;
    • 通过箱线图或者\(3\sigma\)法则(正态分布)分析删除异常值
    • BOX-COX转换(处理有偏分布)
    • 长尾截断
    • 利用模型进行离群点检测:聚类、K近邻、One Class SVM、Isolation Forest.
  4. 其他
    • 删除无效列(这一列没有多少信息)
    • 更改dtypes
    • 删除列中多余的字符或者空格
    • 将字符串转换为日期时间格式等。

特征构造

目的增强数据表达,添加先验知识。设想一下,如果我们实际知道了某些规律,用这种特征构造的方式表达出来,会使模型学得更好一点

  • 统计量特征:计数,求和,比例,标准差
  • 时间特征:绝对时间,相对时间,节假日,双休日;
  • 地理信息:分桶(比如经纬度,是比较密集的,用分桶把它转换为离散变量)
  • 非线性变换:取log/平方/根号;(主要是为了增加模型的非线性)
  • 分桶:等频/等距分桶,Best-KS分桶,卡方分桶;
  • 特征组合/特征交叉(FM)

特征选择

目的

  • 平衡预测能力计算复杂度
  • 降低噪声,增强模型预测性能

主要的方式有以下几种:

  • 过滤式(Filter):先用特征选择方法对初始特征进行过滤然后再训练学习器,特征选择过程与后续学习器无关;
    Relief/方差选择/相关系数/卡方检验/互信息法
  • 包裹式(Wrapper):直接把最终将要使用的学习器的性能作为衡量特征子集的评价准则,其目的在于为给定学习器选择最有利于其性能的特征子集。
    Las Vegas Wrapper(LVM)
  • 嵌入式(EMbedding):结合过滤式和包裹式方法,将特征选择与学习器训练过程融为一体,两者在同一优化过程中完成,即学习器训练过程中自动进行了特征选择
    LR+L1或决策树

类别不平衡

缺点:少类别提供信息太少,没有学会如何判别少数类。

  1. 扩充数据集;

  2. 尝试其他评价指标:AUC等(对类别不平衡不敏感的评价指标)。

  3. 调整值;(这个主要是针对LR的,将阈值调整一下)。

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

  5. 人工合成样本:SMOTE;

  6. 选择其他模型决策树等(对类别不平衡兼容性比较好)

  7. 加权少类别的样本错分代价;(如果它错分的话,让它在目标函数上有更多的代价)。

  8. a)将大类分解成多个小类,这样就可以把问题转换为多分类问题;
    b)将小类视为异常点,并用异常检测模型建模

posted on 2021-10-20 09:26  朴素贝叶斯  阅读(88)  评论(0编辑  收藏  举报

导航