简单关键的特征工程

范围

数据就是由特征组成的,数据即特征、特征即数据。

横轴代表n个样本,纵轴代表m个特征
整个DataFrame对模型来说,也就是个矩阵
模型试图从矩阵中找到某些规律/模式
特征工程通过一些已知的技术手段,试图让这个提取模式的过程更简单、方便、直接。
对能表达任意函数的深度学习来说,算力越强、数据越多,对特征工程的依赖就越少。

特征类型

  1. 连续特征
    也成数量特征,比如房价、温度、速度等变量,能以均值、方差、标准差、最大值、最小值等统计量度量。
  2. 离散特征
    分为两种:
    2.1 有序特征,比如房屋门牌号、排行榜排名等, 能以中位数度量;
    2.2 是属性特征,比如商品类别、新闻类别等,能以众数度量。

Peter flach 《Machine Learning》

特征预处理

包括处理缺失值(Missing Values)、处理干扰数据(Noisy Data)、数据归一化及编码。

  • 缺失值
  • 缺失值的第一种处理方式是把单变量插补(Univariate Imputation)。
    可以理解成特征之间是相互独立的,缺失值只和当前特征有关系,常见的插补方法有均值、中位数、常数、最高频等。

    比如针对连续变量的均值:

    针对离散变量的最高频替代:

    scikit-learn 文档

    另一种方式是多变量插补(Multivariate Imputation),将缺失的特征当作目标变量Y,将其它特征当作输入特征X,然后采用机器学习的方式,预测缺失值。
    比如决策树、随机森林等方法。

    MissForest

    scikit-learn 文档

    或者采用KNN方法,通过近邻预测缺失值。

    MissForest

  • 去燥
  • 大的思想就是发现异常,删除数据
    对于特征异常,比较粗糙的作法就是统计特征分布,设定最大、最小区间,然后归一化;对于输出(Y)异常,可以采用多训练几个模型,投票删除一直错误分类的数据。

    比较正式的方法包括3σ准则、箱线图及异常检测方法。

    3σ准则:针对正态分布的数据,大于3个标准差的认为是异常,占比约为0.3%。

    箱线图:四分位[Q1, Q3]区间外,大于1.5*IQR为异常数据。

    one-class SVM:通过常见的异常检测模型检测异常。

    scikit-learn 文档

    DBSCAN:通过基于密度的聚类方法,发现非核心样本,标记异常点。
    下图示例,边缘黑点可以认为异常点。

    scikit-learn 文档

    异常本身没有严格的定义,通常情况下,数据并不完整,分布也就有偏差,可以通过尝试调节范围测试模型本身结果来确定异常处理细节。

  • scale
  • 以scikit-learn官方文档为例介绍,数据缩放的各种方法和效果。
    原始数据如下,是一个房价数据集的两个维度,横轴是街区收入中位数,纵轴是街区户数。
    左图代表全量数据,右图代表放大后的主要区域,分布分别与坐标轴对应。

    https://scikit-learn.org/dev/auto_examples/preprocessing/plot_all_scaling.html

    标准化/Standardization/z-scores,以标准分布后距中心的标准差个数衡量:

    归一化/Normalization

    Max-Abs Normalization:

    基于四分位和中位数的缩放,减去中位数,缩放至IQR(四分位Q1和Q3之间距离),由于基于顺序映射,对异常值不敏感:

    L2 Normalization,将数据映射到单位圆上;
    类似地,L1 Normalization分母为L1范数,绝对值之和,映射到菱形上。

    Box-Cox变换、Yeo-Johnson变换等PowerTransformer,使数据更接近高斯分布,可以一定程度上减小不可观测的误差和预测变量的相关性。

    更直观的PowerTransformer示意

    特征转换

    离散化就是将连续特征转换为离散特征,整体思想就是将连续变量分割成各个可数的段(bins),然后将bins视为离散取值空间。
    比如可以根据连续变量取值范围均匀划分若干段、或者聚类后的类别分段:

    scikit-learn 官方文档

    离散特征的标定一般采用概率统计来表达,最终离散特征可以通过one-hot编码,输入到神经 络中。

    特征选择

    目的是对原始输入数据DataFrame进行瘦身,可以从行的角度减少冗余样本,也可以从列的角度压缩特征空间,减少特征间的线性相关。

    特征选择的完美结果就是选择或生成的特征是相互正交且完备的。

    比较简单的处理方法就是直接删除原始冗余特征:

    1. 分析特征间的线性相关性,删除相关性强的冗余特征。
      可采用的指标有皮尔逊相关系数、独立检验、互信息等。
    2. 分析模型各特征的重要性,删除重要性低的特征。

    比较通用的从矩阵特征向量角度处理的降维方法主要包括PCA、SVD、FA等。

  • Principal Component Analysis:主成分分析。
    投影之后方差最大化。
  • 周志华 《机器学习》

  • Singular Value Decomposition:奇异值分解。
  • Ian Goodfellow、Yoshua Bengio、Aaron Courville 《Deep Learning》

    由PCA的计算过程可知,PCA计算的特征向量正是SVD的左奇异向量,也就是说直接通过SVD也能拿到特征值及特征向量,但SVD的近似计算并不需要计算整个样本的协方差矩阵,速度更快。

  • Factor Analysis:因子分析。
  • Andrew Ng CS229

    PCA的最优化部分其实是样本与均值的平方差,默认样本方差是一致的。
    FA不要求样本方差一致,可以认为PCA是FA的特例;在FA框架下,当方差一致时,称之为Probabilistic PCA

    scikit-learn 文档,Rank TRUTH = 10

    当噪声是同方差时,PPCA、FA均能成功找到低维空间(CV=10=TRUTH),PPCA似然分数稍高;
    但当噪声异方差时,PPCA性能大大下降,而且找到的低维空间远远大于真实的RANK。

    声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

    (0)
    上一篇 2020年7月7日
    下一篇 2020年7月7日

    相关推荐