特征工程与特征选择架构性好文

者:马东什么

来源:https://zhuanlan.zhihu.com/

p/96420594

整理:深度传送门

偶然看到的一篇好文,有一些部分讲的不错,分享一下。

特征工程和选择是以最好的方式转换数据的艺术/科学,这涉及到领域专长、直觉和数学的优雅融合。这是一本指南。供初学者参考,最简单,但广泛使用的技术,为特征工程和选择。欢迎任何意见和承诺。

零、Basic Concepts

0.1 What is Machine Learning

定义了ml,老生常谈了,跳过。

0.2 Methodology

特征工程与特征选择架构性好文_第1张图片 整体总结的还是挺不错的一张思维导图。

可以有许多方法将组成ML工作流的任务划分为各个阶段。但一般来说,基本步骤与上面的图表相似。

0.3 Typical Tasks

特征工程与特征选择架构性好文_第2张图片

0.4 Terminology

Feature: also known as Attribute/ Independent Variable/ Predictor/ Input Variable. It's an individual measurable property/characteristic of a phenomenon being observed [wiki]. The age of a person, etc.

Target: also known as Dependent Variable/ Response Variable/ Output Variable. It's the variable being predicted in supervised learning.

Algorithm: the specifific procedure used to implement a particular ML technique. Linear Regression, etc.

Model: the algorithm applied to a dataset, complete with its settings (its parameters). Y=4.5x+0.8, etc. We want the model that best captures the relationship between features and the target.

Supervised learning : train the model with labeled data to generate reasonable predictions for the response to new data.

Unsupervised learning : train the model with un-labeled data to fifind intrinsic structures/ patterns within the data.

Reinforcement learning: the model is learned from a series of actions by maximizing a reward function, which can either be maximized by penalizing bad actions and/or rewarding good actions. Self driving, etc.

老生常谈了,不翻译了。

一、Data Exploration

1.1 Variables

特征工程与特征选择架构性好文_第3张图片

没啥用,看烂了都。

1.2 Variable Identifification

定义:标识每个变量的数据类型。

注:实际上,由于各种原因,我们可能存在混合类型的变量。例如,在信用评分中,“未支付状态”是一个通用变量,可以取值1、2、3,这意味着 客户在他们的帐户中错过了1-3次付款.如果客户违约,它也可以获得D值。在数据清理的某些步骤之后,我们可能不得不转换数据类型。

1.3 Univariate Analysis

单变量的描述性统计,给定了一个进行单变量分析的框架思路,挺好

特征工程与特征选择架构性好文_第4张图片

下面是一些可以给出变量的基本统计信息的方法:

特征工程与特征选择架构性好文_第5张图片

1.4 Bi-variate Analysis

两个或多个变量之间的描述性统计。

  • Scatter Plot

  • Correlation Plot

  • Heat Map

散点图,相关图,热力图(也是相关性)

特征工程与特征选择架构性好文_第6张图片


二、Feature Cleaning

2.1 Missing Values

Defifinition: no value is stored in a certain observation within a variable. 缺失值的定义

2.1.1 Why Missing Data Matters

  1. 当存在缺失值时,某些算法无法工作。

  2. 即使对于能够处理丢失数据的算法,如果不进行处理,模型也会导致不准确的结论。

研究缺失数据对不同ML算法的影响:http://core.ecu.edu/omgt/krosj/IMDSDataMining2003.pdf

很不错的一篇关于缺失值处理的综述性质的文章,后续搬到专栏里去。

2.1.2 Missing Mechanisms [1]

理解数据集中缺失值丢失的原因对于缺失值的处理来说非常重要,我们要根据不同缺失值的缺失机制选择不同的处理方法。

Missing Completely at Random

如果所有观测值的缺失概率相同,则变量完全随机丢失(MCAR)。当数据是完全随机丢失的时候,数据丢失与数据集中的任何其他值(无论是观测值还是缺失值)之间绝对没有任何关系。换句话说,这些缺失的数据点是数据的随机子集。

如果观测值的缺失值属于完全随机丢失,那么忽略这些情况就不会使所做的推论产生偏差。

Missing at Random

当缺失值的倾向与观测数据之间存在系统的关系时,就会出现随机丢失(MAR)。换句话说,观测丢失的概率仅取决于可用信息(数据集中的其他变量),而不取决于变量本身。

例如,如果男性比女性更有可能公开他们的体重,那么体重是MAR(基于可变的性别)。对于那些决定不披露体重的男性和女性,体重信息将随机丢失。但是,由于男性更倾向于公开,女性会比男性产生更严重的缺失现象。

在上述情况下,如果我们决定继续使用存在缺失值的特征,我们可能会受益于将性别纳入控制缺失观测值的权重偏差

Missing Not At Random - Depends on Unobserved Predictors

缺失取决于未被记录的信息,而这些信息也预测了缺失的值。例如,如果某一特定治疗引起不适,患者更有可能退出研究(而“不适”没有测量)。

在这种情况下,如果我们删除那些缺失的情况,数据样本将是有偏的。(比

如上面的例子,如果我么删除缺失样本则把引起不适的患者排除在建模样本之外了)

Missing Not At Random - Depends on Missing Value Itself

缺失情况取决于(可能丢失)变量本身。例如,收入较高的人不太可能透露这些信息。

2.1.3 How to Assume a Missing Mechanism(重点干货)

1、通过业务上的理解。在许多情况下,我们可以通过探究该变量背后的业务逻辑来判断特征缺失的机制。(比如欺诈分子常常在一些重要的特征上缺失,则此时缺失值意味着重大的缺失嫌疑,这是从业务上去理解的一个例子)

2、通过统计检验。将数据集划分为有/没有缺失值的数据集,并执行t检验以查看是否存在显著差异。如果有的话,我们可以假设缺失值不是随机的。(这是个好办法,不过也不一定要用到t检验,我们可以根据缺失特征对样本分群后查看两个数据集分布的差异,比如使用kaggle上的对抗性训练的trick)

但我们应该记住,我们很难100%地确定数据是属于上述的哪一种缺失的机制,因为未观察到的预测因子(潜伏变量)是未观察到的。

2.1.4 How to Handle Missing Data

考虑到下面的内容还是比较好的,手动放到excel表格翻译。

特征工程与特征选择架构性好文_第7张图片

在实际情况下,当难以确定缺失机制或几乎没有时间对每个缺失变量进行深入研究时,流行的方法是采用:

特征工程与特征选择架构性好文_第8张图片 特征工程与特征选择架构性好文_第9张图片 特征工程与特征选择架构性好文_第10张图片

有些算法,如XGBoost,将丢失的数据处理集成到其模型构建过程中,因此您不需要执行该步骤。然而,重要的是要确保您了解算法如何对待它们,并向业务团队解释。

(补充:差评,居然没有多重插补!《缺失值的灵活插补》,详细介绍了缺失值处理的来龙去脉,相应的python library 在github上有,自己手写实现也很简单,后续搬到专栏里吧)


2.2 Outliers

定义:离群点是一种观察,它与其他观察结果有很大的偏差,从而引起人们怀疑它是由一种不同的机制产生的。[3]

注意:不同的情境下对于缺失值的处理是非常不同的。例如,信用卡上的不寻常交易通常是欺诈行为的标志,当一个人的身高达到1600厘米时,很可能是由于测量误差,所以应该用其他的东西过滤掉或补充。

2.2.1 Why Outlier Matters

异常值的存在可能会使1、算法不能正常工作,2、将噪声引入数据集,3、使样本的代表性降低。

有些算法对异常值非常敏感,例如,adaboost可能将离群值视为一个困难样本,并对异常值施加巨大的权重。因此,产生了一个泛化能力差的模型。任何依赖均值/方差的算法都对离群值敏感,因为这些统计量受极值的影响很大。另一方面,一些算法对离群点具有更强的鲁棒性。例如,决策树在创建树的分支时往往忽略异常值的存在。通常情况下,树是通过询问变量x>=值t来划分的,因此,异常值将落在分支的每一侧,但它将被平等地视为其余的值,而不管 它的大小。

2.2.2 Outlier Detection

事实上,离群点分析和异常检测是一个巨大的研究领域。Charu的书“Outlier Analysis”[4](目前学习翻译中)为这个主题提供了一个很好的描述与学习。PyOD[5]是一个全面的Python工具包,包含该领域的许多高级方法。

这里列出的所有方法都是用于单变量异常点检测的。多元孤立点检测超出了本指南的范围。(一般特征工程阶段也比较少考虑多维的异常点检测。。。因为太麻烦而复杂了)

特征工程与特征选择架构性好文_第11张图片

下面列出了一些常见的简单的单变量异常检测,第一种相对来说最好,结合业务特征的理解,但是也最难,因为需要一定的业务经验;第二种就是传说中的均值+3倍标准差的方法,这种方法对于高斯分布的特征比较适合,不过均值和方差的计算会受到异常点的影响,这个其实问题不大,我们使用robust的均值和方差的计算方法就可以了,简单来说就是画图然后把明显特别极端的值删除之后计算;那么这里就到了第三点了,IQR,其实就是boxplot的原理,25%和75%的分位数的均值的3倍作为上下限的范围。最后一种中位数-方差法,为了第二种方法的敏感而存在的一种鲁棒性的处理方案,均值用中位数代替。

但是,除了这些方法之外,更重要的是要记住,业务场景才是最最重要的!这回指导您如何定义和处理这些异常值。你的调查结果的意义应该参与到特征工程中来 而不是单纯依赖于统计本身。

2.2.3 How to Handle Outliers

单变量异常值得处理和缺失值的处理非常类似,这里仅仅介绍一些新的。

离散化,这个在评分卡中很常用,缺失值和异常值直接放到一个单独的箱里。

异常值的截断或者降低带有异常值的样本的权重,具体可见:www.statisticshowto.datasciencecentral.com

处理数据中的异常值有许多策略,并且取决于业务场景和数据集,任何事情都可能是正确的,也可能是错误的。在决定离群点的性质之前,调查异常值的性质是很重要的。

2.3 Rare Values

定义:类别特征中出现次数很少的类别

在某些情况下,罕见的值(如异常值)可能包含有价值的数据集信息,因此需要特别注意。例如,交易中的罕见值可能表示欺诈(例如某些用户使用了一些非常稀少的交易方式进行交易)

2.3.1 Why Rare Value Matters

1、分类变量中的稀有值往往会导致过度拟合,特别是在基于树的方法中。

2、大量不常见的标签增加了噪音,信息很少,因此导致了过度拟合。

3、罕见的标签可能出现在训练集,但没有在测试集,因此导致过分适合的训练集。

4、罕见的标签可能出现在测试集,而不是在训练集导致模型无法评估这样的样本

2.3.2 How to Handle Rare Value

特征工程与特征选择架构性好文_第12张图片
  • 众数插补

  • 把稀少的类别单独合并为一类,比如合并为“others”,这也是kaggle上非常常用的操作手段。

视情况而定,我们可以采用不同的策略:

1、当变量中有一个占主导地位的类别(超过90%):观察稀有变量与目标之间的关系时,要么放弃该变量,要么保持原样。在这种情况下, 稀有变量通常对预测没有帮助.

2、如果类别的数量很少,保持原样。因为只有少数类别不太可能带来大的噪音。

3、当有较高的基数时:尝试上面表格中的两种方法。但是它不能保证比原始变量获得更好的结果

2.4 High Cardinality

定义:高基数类别特征

2.4.1 Why High Cardinality Matters

1、类别太多的类别特征往往比只有少数标签的变量有用,特别是在基于树的算法中。

2、变量中的大量标签可能会引入噪音,而且信息很少,从而使机器学习模型容易过度匹配。

3、有些标签可能只存在于训练数据集中,而不在测试集中,因此导致算法过度拟合训练集。

4、新的标签可能出现在测试集中,而训练集中不存在,因此算法无法对新的观察执行计算。

(基本和稀有类别类似)

2.4.2 How to Handle High Cardinality

特征工程与特征选择架构性好文_第13张图片

根据业务理解合并、将稀少的类别合并为一个类别、使用离散化的方法对类别特征重新分箱成新的类别特征。

差评,居然没有特征编码!

实际上,特征编码是处理高基数类别特征最常用的手段了,包括woe编码、target 编码甚至是简单的count编码,这些特征编码的本质都是使用类别的统计特征来代替原始的类别,并且进行编码之后实际上无形的进行了分箱,因为很多稀有类别的编码结果是完全相同或者大体接近的,进行编码之后然后重新进行分箱,这也是在比赛和工程上常见的一种操作。

三、Feature Engineering

3.1 Feature Scaling

特征标准化

3.1.1 Why Feature Scaling Matters

1、如果输入范围不同,某些算法无法正常工作比如逻辑回归,神经网络。

2、梯度下降的收敛速度会慢非常多甚至完全无法完成有效训练。梯度下降是Logistic回归、支持向量机、神经网络等常用的优化算法。

3、涉及KNN、聚类等距离计算的算法也会受到特征大小的巨大巨大的影响

注意:基于树的算法几乎是唯一不受输入大小影响的算法,我们可以很容易地从树的构建方式中看出这一点。在决定如何分割时,树 算法寻找诸如“是否特征值X>3.0”这样的决策,并计算拆分后子节点的纯度,因此特征的规模并没啥影响。

3.1.2 How to Handle Feature Scaling

特征工程与特征选择架构性好文_第14张图片

基本是最常见的一些方法了不做详细介绍了。log变换以及log变换的爸爸box-cox变换也是常用的一种手段。

作者很贴心的比较了面对异常值时三种方法的表现:

特征工程与特征选择架构性好文_第15张图片

正如我们所看到的,规范化-标准化和Min-max方法将把大部分数据压缩到一个狭窄的范围,而robust scaler在保持数据整体情况方面做得更好,尽管它不能从处理结果中移除异常值,但是请记住,清除/查找离群值是数据清理中的另一个主题,应该事先完成。(上诉三种标准化sklearn均有实现)

如何选择特征缩放方法的经验:

1、如果您的特性不是高斯型的,例如,有一个倾斜分布或有异常值,zscore的标准化不是一个好的选择,因为它将把大多数数据压缩到一个狭窄的范围。

2、然而,我们可以将特征转换为高斯类,然后使用规范化-标准化。这将在3.4节中讨论。

3、在执行距离或协方差计算时(聚类、PCA和LDA等算法),最好采用规范化-标准化,因为它将消除尺度对方差和协方差的影响。具体可见:

https://blog.csdn.net/zbc1090549839/article/details/44103801

4、Min-MaxScaling有着与标准化相同的缺点,而且新的数据可能不会被限制到[0,1],因为它们可能超出了原来的范围。一些算法,例如 深度蛇精网络更喜欢限制在0-1的输入,所以这是一个很好的选择。

下面是有关此主题的一些附加资源。

1、通过对三种方法的比较,可以发现三种方法在面对分布偏移的变量的差异。https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html#sphx-glr-auto-examples-preprocessing-plot-all-scaling-py

于PowerTransformer 和QuantileTransformer 之前没用过,后续添加进来;

2、http://sebastianraschka.com/Articles/2014_about_feature_scaling.html

关于标准化方法对pca的影响,后续研究降维算法系列的时候再看吧。

3.2 Discretize

定义离散化的定义不用多说了。资料太多了

3.2.1 Why Discretize Matters

1、通过将具有相似预测能力的相似属性分组,帮助提高模型性能

2、引入非线性,提高了模型的拟合能力。(关于这一点之前写过,具体的可百度,这里的非线性指的是离散化之后onehot从而引入非线性)

3、使用分组值增强可解释性

4、大大降低异常值的影响;

5、降低过拟合

6、允许连续变量之间的特性交互(第3.5.5节)(变成离散特征之后可以像类别特征一样交互)

3.2.2 How to Handle Discretization

特征工程与特征选择架构性好文_第16张图片

具体的之前介绍离散化综述的时候写过,上面是一些比较常用的手段,sklearn和toad都有实现。

一般情况下,离散化方法没有最佳选择。它实际上取决于数据集和下面的学习算法。在决定之前,仔细研究一下你的特征和背景。你也可以尝试不同的方法并比较模型的性能(一般 我就这么干。。。)。

3.3 Feature Encoding

3.3.1 Why Feature Encoding Matters

我们必须将分类变量字符串转换为数字,以便算法能够处理这些值。即使您看到一个算法可以接受分类输入,最有可能的情况是 算法中包含了编码过程。(lightgbm和catboost实际上在底层都进行了特征编码,lgb用了梯度编码,catboost则用了统计特征编码,具体的后续看需要展开把,catboost还没怎么深入研究过,不过datawhale有介绍,写的还是很详细的)

3.3.2 How to Handle Feature Encoding

特征工程与特征选择架构性好文_第17张图片 特征工程与特征选择架构性好文_第18张图片

在category_encoder的神库中这些编码方法均有实现,介绍和原理可见我之前总结的特征工程编码的文章。

注:如果在线性回归中使用独热编码,则应保留k-1二进制变量,以避免多重共线性。对于任何在训练过程中同时查看所有特性的算法来说,这都是正确的。包括支持向量机、神经网络和聚类。另一方面,基于树的算法需要整个集合。选择最佳拆分的二进制变量则不需要这种处理。

(其实这种程度的共线性对模型影响不是特别大的)

注意:不建议在树算法中使用一次热编码。一个热点将导致分割高度不平衡(因为原始分类功能的每个标签现在将是一个新的特征。) (E),结果是这两个子节点的纯度都不会有很好的提高。单一热特征的预测能力将比原始特征弱,因为它们已被破坏。分成很多块。

上述 关于为什么gbdt不适合onehot展开后的稀疏特征之前写过具体可知乎搜索。

3.4 Feature Transformation

3.4.1 Why Feature Transformation Matters

3.4.1.1 Linear Assumption

Regression

线性回归是根据不同的预测变量X1,X2,.Xn。它假定存在线性关系。在X(S)和Y之间数学上,我们可以把这个线性关系写成Y≈β0+β1X1+β2X2+。。。。+βnXn。

Classifification

同样,对于分类,Logistic回归假设变量与概率的对数呈线性关系。

Odds = p / (1 - p), where p is the probability of y = 1

log(odds) = β0 + β1X1 + β2X2 + ... + βnXn

Why it's important to follow linear assumption

如果机器学习模型假设预测器xs与结果Y之间存在线性依赖关系,则当不存在这种线性关系时,这个模型的性能会很差。在这种情况下,我们最好尝试另一个没有这样假设的(非线性)机器学习模型。

如果没有线性关系,而且我们必须使用线性/Logistic回归模型,那么数学变换/离散化可能有助于建立这种关系,尽管它不能保证 更好的效果

3.4.1.2 Variable Distribution

Linear Regression Assumptions

线性回归对预测变量X有以下假设:

1、与结果Y的线性关系

2、多元正态

3、无或小的多重共线性

4、同方差性,方差齐性

正态性假设意味着每个变量X都应服从高斯分布。

同步性,也称为方差的同质性,描述了误差项(即自变量之间的“噪声”或随机扰动)的一种情况。S(Xs)和因变量(Y)在自变量的所有值之间是相同的。

在同方差和/或正态假设(假设数据分布为主方差或高斯分布,而实际情况并非如此)中的违规行为可能导致模型性能较差。

剩下的机器学习模型,包括神经网络、支持向量机、基于树的方法和主成分分析(PCA),对自变量的分布不作任何假设。但是,在许多情况下,模型的性能可能受益于“类高斯”分布

为什么模型会受益于“类高斯”分布?在具有正态分布的变量中,可以用来预测Y的X观测值的变化范围较大,即 X的值“散布”在更大的范围内。

在上述情况下,原始变量的变换可以帮助该变量更多地呈现高斯分布的钟形


3.4.2 How to Handle Feature Transformation

我怀疑这篇文章的作者可能是个kaggle master

特征工程与特征选择架构性好文_第19张图片

当应用于倾斜分布时,log转换是有用的,因为它们倾向于扩展属于波动较低范围内的值,并且倾向于压缩或减少波动较高的范围,这有助于使倾斜分布尽可能地像正常分布一样。

平方根变换在这个意义上做了类似的事情。

Box-Cox 变换,log变换属于box-cox变换的一种特例,具体的后续展开,在前面的标准化方法里面有介绍,scipy和sklern中均有实现,包括Quantile transformation 后续具体展开介绍和原理研究。

我们可以用Q-Q图来检验变量在变换后是否是正态分布的(理论分位数上的45度直线)。下面是一个例子,展示了skLearning的方格图/Yeo-Johnson/分位数变换将数据从各种分布映射到正态分布的效果。https://scikit-learn.org/stable/auto_examples/preprocessing/plot_map_data_to_normal.html#sphx-glr-auto-examples-preprocessing-plot-map-data-to-normal-py

在“小”数据集(不足几百点)上,quantile转换器容易过度拟合。此时建议使用power变换。


3.5 Feature Generation

定义:以现有特性的组合创建新功能。这是将领域知识添加到DataSet中的一个很好的方法。

3.5.1 Missing Data Derived Feature

如第2.1节所述,我们可以创建新的二分类特征,表示原始特性上是否存在0/1值的缺失值。

3.5.2 Simple Statistical Derived Feature

通过对原始特性执行简单的统计计算来创建新特性,包括

特征工程与特征选择架构性好文_第20张图片

以呼叫日志为例,我们可以创建新的功能,如:呼叫次数、呼叫次数/呼叫输出、平均呼叫持续时间、每月平均呼叫持续时间、最大呼叫持续时间等。

3.5.3 Feature Crossing

在有了一些简单的统计衍生特征之后,我们可以把它们交叉在一起。用于交叉的通用特征包括:

时间、地区、商业类型等,当然远不止如此

以呼叫日志为例,我们可以有交叉功能,例如:夜间/白天的呼叫次数,不同业务类型下的呼叫次数(银行/出租车服务/旅行/医院)。在过去3个月中调用的次数,等等。第3.5.2节中提到的许多统计计算可以再次用于创建更多的特性。

特征工程与特征选择架构性好文_第21张图片

featuretools和tsfresh就是为了这种特征的交互产生新特征而设计的神库,有空总结一下使用的心得。

3.5.4 Ratios and Proportions

普通的技巧。例如,为了预测分行信用卡销售的未来表现信用卡销售/销售人员或信用卡销售/营销支出等比率将比仅使用在分行销售的信用卡绝对数量更有力。

实际上我们可以将这种特征衍生的方法归为连续特征的加减乘除中,一般来说,除是用的最多的。加减相对较少,因为不同尺度的特征加减基本没有意义但是乘除就有意义了。

3.5.5 Cross Products between Categorical Features

类别特征交叉,实际上就是两个两个类别特征合并成一个新的类别特征,考虑到计算量的问题一般来说最多到二阶交叉,特征交叉配合lgb处理类别特征的功能在工程实现上非常的简单迅速,具体可见kaggle ieee中的经典代码。

3.5.6 Polynomial Expansion

多项式特征,实际上就是连续特征的互相交互,具体可见sklearn中的 PolynomialFeatures,一般比较少用这个,暴力的特征交叉费时费力,很多时候效果也不一定好增加了太多工作量 ,但是不可否认在算力允许的条件下暴力并不是坏事。

3.5.7 Feature Learning by Trees

facebook的gbdt+lr的思路,当然sklearn中的rf的embedding也是实现一样的功能不过实践中gbdt+lr的效果往往好得多。

gbdt+lr的引入可以说是非常方便了,一方面通过gbdt引入了非线性大大提高了lr的表达能力(测试中基本二者表现能够持平),另一方面引入了lr的可解释性以及online learning的能力。

(gbdt本身的online learning 效果常常非常差)

3.5.8 Feature Learning by Deep Networks

从上面我们可以看到,手工生成特性需要付出很大的努力,而且可能不能保证良好的回报,特别是当我们有大量的特性需要处理时。用树学习特征可以看作是自动创建特征的早期尝试,随着深度学习方法从2016年左右开始流行,它们也取得了一些成果。Cess在这一领域,如自动编码器和RBM。他们被证明是以一种无人监督或半自理的方式自动地学习特征的抽象表示(一种压缩形式),而这反过来又支持最先进的结果。在语音识别、图像分类、目标识别等领域。然而,这些特征的可解释性有限,深入学习需要更多的数据才能提取出高质量的结果。

这方面在三个比赛中尝试过,有监督的dnn提取特征以及直接用autoencoder做特征提取,说老实话,在tabular结构化数据中的表现差强人意。

四、Feature Selection

定义:特征选择是选择相关特征的子集用于机器学习模型构建的过程。

数据越多,结果就越好,这并不总是事实。包含不相关的特性(那些对预测毫无帮助的特性)和冗余特性(在 )只会使学习过程不堪重负,容易导致过度适应。

通过特征选择,我们可以:

1、简化模型,使其易于解释

2、较短的训练时间和较小的计算费用

3、数据收集成本较低

4、避免维度的诅咒

5、减少过拟合增强泛化


我们应该记住,不同的特征子集为不同的算法提供了最佳的性能。因此,除了机器学习模型培训之外,这不是一个单独的过程。因此,如果 我们正在为线性模型选择特征,最好使用针对这些模型的选择程序,比如通过回归系数或Lasso进行重要性选择。如果我们选择gbdt或者rf,最好使用树派生的重要性。非常重要!这实际上是很多人的误区,这篇文章的作者说到我心坎里了)

特征工程与特征选择架构性好文_第22张图片

后续没有太多新的内容了,值得一提的是featurega是一个使用deap实现的基于遗传算法的特征选择库,具体效果没有实验过,本质就是把每一个特征当做一个超参数,然后通过类似调参的方式来选择最佳特征组合,具体的后续归并到自动化机器学习的专栏里,遗传算法说起来有太多的知识点要回归了。

feature shufflling,代表性的就是permutation和null importance了之前基本介绍过了。

rfe递归特征消除,目前在相对可接受时间和计算复杂度内最好的特征选择方法,缺点就是不适用于数据量非常大并且你的电脑性能比较差的情况。

干货 很多,整体框架梳理的也比较好,虽然有一些知识点没有介绍全,但是已经是很难得的总结文章了,给原作者点32个赞!

最后,附上英文原版全文链接:https://github.com/Yimeng-Zhang/feature-engineering-and-feature-selection

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习

往期精彩回顾




2019年公众号文章精选适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(第一部分)备注:加入本站微信群或者qq群,请回复“加群”加入知识星球(4500+用户,ID:92416895),请回复“知识星球”

喜欢文章,点个在看

你可能感兴趣的:(特征工程与特征选择架构性好文)