导读:数据科学从业者们更倾向于选择用著名的算法来解决给定的问题,但仅仅靠算法并不能提供一个最优的解决方案,通过精心设计和选择的特征所建造的模型能够提供更好的结果。

此篇作者总结了很多常见且有效的特征转化的方法,有些方法附有简单说明。具体的应用方法可以在网络上搜索公开信息。

“任何一个有智力的笨蛋都可以把事情搞得更大,更复杂,也更激烈。往相反的方向前进则需要一点天分,以及很大的勇气。” –阿尔伯特·爱因斯坦

复杂的模型不易解释,难以调整。简单的算法配合更好的特征或者更多的数据,比脆弱的假设配合复杂的算法会得到更好的结果。

1.什么是好?

好的特征代表了灵活性、更简单的模型和更好的结果,不相关的特征则会影响模型的泛化性。因此特征选择和特征工程并非是互相排斥的,而是相辅相成的。有效的特征工程能够帮助我们提炼数据的代表。接着问题就来了,什么才是好的代表?

代表的好坏取决于里面所包含信息的好坏。

熵(Entropy,熵值越高,数据中所包含的信息越多),方差(Variance,方差越大,数据中所包含的信息越多),更好的分离映射(Projection for better separation,最高的方差所对应的映射包含更多得信息),特征对类别的关联(feature to class association)等。所有这些都解释了数据中所包含的信息。

特征工程是建模过程中很重要的一个步骤,但也很难实现自动化,它需要专业知识和很多数据的探索性分析。

2.常见做法

  1. 单一变量的基础转换:x, x^2,sqrt x ,log x,缩放

  2. 如果变量的分布是长尾的,应用Box-Cox转换(用log转换虽然快但不一定是一个好的选择)

  3. 你也可以检查残差(Residuals)或是log-odds(针对线性模型),分析是否是强非线性。

  4. 对于基数比较大的数据,对于分类变量,创造一个表示每种类别发生频率的特征是很有用的。当然,也可以用占总量的比率或是百分比来表示这些类别。

  5. 对变量的每一个可能取值,估计目标变量的平均数,用结果当做创造的特征。

  6. 创造一个有目标变量比率的特征。

  7. 选出最重要的两个变量,并计算他们相互之间、以及与其它变量之间的二阶交叉作用并放入模型中,比较由此产生的模型结果与最初的线性模型的结果。

  8. 如果你想要的解决方案更平滑,你可以应用径向基函数核(Kadial Basis function kernel) 。这就相当应用一个平滑转换。

  9. 如果你觉得你需要协变量(Covariates ),你可以应用多项式核,或者明确添加它们的协变量。

  10. 高基数特征:在预处理阶段,通过out-of-fold平均转换成数值变量。

3.两个变量组合而成的特征转换

以下为一些常见的由两个变量组合而成的特征转换:

  1. 加法转换

  2. 相对于基数的差值

  3. 乘法转换:交互效果

  4. 除法转换:缩放/归一化

  5. 对数值型特征设定阈值以获取其布尔值

  6. 笛卡儿积变换

  7. 特征向量积:所有特征的向量积

试想一个特征A,它有两个可能的值:{ A1,A2 } 。假设B是一个具有两种可能性{ B1,B2 }的另一特征。

那么, A和B之间的向量积(我们称之为AB)将采取以下值之一:

{ (A1 , B1),(A1 , B2),(A2 , B1),(A2 , B2) }

你基本上可以赋予这些”组合”你喜欢的任何名称。但要记住,每个组合都表示一个由A和B的相应值包含的信息之间的协同作用。

  1. 归一化/数据标准化变换
  • 在机器学习算法中提出的隐含假设(对朴素贝叶斯而言,在某种程度上是显性假设)之一是:该特征服从正态分布。不过,有时我们可能会发现该特征不遵循正态分布,而是对数正态分布。那么在这种情况下常见的手段之一是取特征值的对数(即表现出对数正态分布的那些特征值),使得它展现出正态分布。如果在使用中的算法做出了正态分布的隐含/显性假设的话,则这种转化,即将一个服从对数正态分布的特征转化为正态分布,可以帮助改善该算法的性能。
  1. 分位数分级转换 (Quantile Binning Transformation)
  2. 白化数据 (Whitening the Data)
  3. 窗体压缩化 (Windowing)

如果所有的点都分布在时间轴上,那么在同一个窗口里的先前的点往往包含丰富的信息。

  1. 最小-最大归一化:不一定保留顺序
  2. S型/正切/对数转换 (Sigmoid / Tanh / Log Transformations)
  3. 用特殊方法处理0:对于计数特征有可能很重要
  4. 去相关性/转换变量
  5. 重构数量
  6. 将不频繁的分类变量划分到新的/独立的类别中。
  7. 按顺序应用一系列转换。
  8. 独特的编码方式
  9. 靶值率编码 (Target rate encoding)
  10. 哈希技巧 (Hash Trick)

4.常见的多个变量的特征转换

以下为一些常见的多个变量的特征转换:

  1. 主成分分析 (PCA)

  2. 模型集成

  3. 压缩感知 (Compressed Sensing)

  4. “猜平均值”或是“猜通过变量X分段后的平均值”

  5. 处理映射(hack projection):

  6. 执行聚类(clustering)并使用点和聚类中心的距离作为一个特征

  7. 主成分分析/奇异值分解 (PCA/SVD)

    这是用来分析变量之间的相互关系和在信息损失最小的情况下执行降维的有效技术。找到透过数据中,拥有最大方差的轴。在下一个正交轴上重复该步骤,直到你用完了数据或维度。每个轴都代表着一个新特征。

39.稀疏编码(sparse coding)

选择基元:基于你能如何用一个基元来重建输入值和它有多稀疏来评估该基元;采取一些梯度步骤,以改进该评估。

  • 有效的稀疏编码算法
  • 深度自编码

40.随机森林:训练一部分决策树:使用每个叶子作为一个特征

原文:https://www.linkedin.com/pulse/feature-engineering-data-scientists-secret-sauce-ashish-kumar