Mutual Information

MI优点:

  • 可解释性好
  • 计算效率高
  • 理论基础好
  • 不易发生过拟合
  • 可以检测任何关系,不止线性相关

MI取值范围

  • 最小是0,这种情况下两个变量是完全独立的,不能为彼此提供任何信息
  • 没有上限,实际应用中很少超过2

使用MI的注意事项

  • 有可能有的特征与其他特征相结合时对于预测目标非常重要,而它自身并没有那么有潜力,MI是单一变量指标,无法检测特征之间的相互作用
  • 某个特征的有效性取决于使用的模型,只有使用能够学习到该特征与目标之间相关性的模型,特征才能如MI检测到的那样有效

MI的计算

  • sklearn.feature_selection.mutual_info_regression用于连续型预测目标
  • sklearn.feature_selection.mutual_info_classif用于类别型预测目标
  • 所有类别型特征都需要编码成int类型,并在调用函数时通过参数discrete_features指明这些特征

Creating Features

如何发现新特征

  • 理解特征,参考数据集文档
  • 探究问题所在的领域,获取领域知识
  • 参考前人的工作
  • 借助数据可视化

数学转化

  • 组合越复杂,模型学起来越困难
  • 可以通过指数或对数变换缓解数据偏斜

计数

  • 将一系列布尔值特征直接求和
  • 统计一系列特征中,大于某个值的特征数

    例如,空值为0,则可以通过.gt(0).sum(axis=1)统计大于0的个数

构造和拆解特征

  • 将具有明确结构的特征,如电话号码、地址、网址、日期时间等拆解成多个特征
  • 将简单特征进行拼接

分组转化

  • 利用聚合函数产生新特征
  • 只用训练集数据产生特征,然后合并到验证集上

关于创造特征的注意事项

  • 线性模型天然擅长学习加减,不擅长学习更复杂的关系
  • 对大多数模型来说,比例都很难学习
  • 线性模型和神经网络通常更擅长标准化的数据,神经网络尤其需要将特征值缩放到0附近,树模型有时候更擅长标准化的数据,但大多数时候不敏感
  • 树模型基本上能够拟合特征的任意组合,但对于特别重要的特征组合,明确将其创造出来仍然对模型有帮助,在数据有限的情况下尤其如此
  • 计数对树模型来说格外有效,因为树模型无法一次聚合多个特征

Clustering With K-Means

把聚类标签作为一个特征

  • 把特征之间复杂的相互关系转化成一些简单的块,模型可以一块一块地学习,而不是一次学习整个复杂的数据
  • 也可以把样本到每一类质心的距离作为特征

K-Means聚类

  • 使用欧式距离
  • n_init参数表示随机初始化的次数,返回每个点到质心的总距离最短的初始化结果
  • 对于n_clusters比较大的数据集,需要增大max_iter,对于复杂数据集,需要增大n_init
  • 需要对数据进行缩放

Principal Component Analysis

  • 需要对数据进行标准化,对于标准化的数据来说,variation表示相关性correlation;对于非标准化的数据来说,variation表示协方差covariance
  • 作为描述性技术使用:计算每个主成分的互信息分,由此决定创造哪些新特征
  • 把主成分作为特征使用:
    • 降维:适用于特征高度冗余的情况
    • 异常检测
    • 降噪
    • 解除相关性

Target Encoding

目标编码

  • 根据标签把类别特征转化成数字

平滑

  • encoding = weight * in_category + (1 - weight) * overall
  • weight = n / (n + m),n是该类别出现的次数,m是平滑系数;m越大,总体估计占的权重越大
  • 如果不同类别的样本平均值差别很大,则选择较大的平滑系数
  • 适用于类别非常多,不方便进行独热编码的情况
  • from category_encoders import MEstimateEncoder