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