如何进行特征消除?

时间:2018-08-20 18:32:02

标签: python machine-learning data-science modeling feature-selection

我一直在研究几个数据集,以基于它们建立预测模型。但是,在消除功能时,我有些困惑。

第一个是 Boston Housing 数据集,第二个是 Bigmart Sales 数据集。我将把问题集中在这两个问题上,但是我也希望得到相对笼统的答案。

波士顿住房局:我建立了一个相关系数矩阵,并消除了相对于目标变量 medv 绝对相关系数小于0.50的特征。那给了我三个特点。但是,我也确实了解到,相关矩阵可能具有很高的欺骗性,并且不能捕获非线性关系,并且事实上,诸如crim,indus等特征与medv具有非线性关系,并且直观上它根本感觉不到马上将其丢弃。

Bigmart销售:在Python中使用OneHotEncoding后创建了大约30多种功能。我在构建线性回归模型时给出了一种向后消除的方法,但是我不确定在为该数据集创建决策树模型时如何应用向后消除(不确定是否可以将其实际应用于完全是决策树。

如果我能对上述两种情况的特征消除方法有所了解,那将有很大的帮助。如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

这是一个非常普遍的问题。我认为不可能以StackOverFlow格式回答您的问题。

对于每个ML /统计模型,您需要不同的特征消除/特征工程方法:

  • 线性/逻辑/ GLM模型要求删除相关特征

  • 对于神经网络/增强树,删除特征将使模型具有良好的性能

即使对于一种类型的模型,也没有唯一的最佳方法来进行特征消除

如果您可以在问题中添加更多具体信息,则可以进行详细讨论。

答案 1 :(得分:1)

这是一个有趣的问题,没有适用于所有领域的明确答案(No Free Lunch Theorems)。就是说,有许多指导原则通常在解决实际问题中是成功的。这些准则也可以在您明确提到的特定数据集中正常工作。

与其他所有内容一样,必须始终考虑消除功能的目的。没有一个目标或一组目标,任何答案都是有效的。有了目标,您不仅可以磨练一个好的答案,而且可以为您可能未曾考虑过的其他想法打开大门。通常,出于以下四个原因之一来完成功能消除:

  1. 准确性提高
  2. 泛化程度提高
    • 减少偏见
    • 减少的方差
  3. 降低了计算成本
  4. 易于解释

当然还有其他原因,但是这些涵盖了主要的用例。对于这些指标中的任何一个,选择保留哪些指标的显而易见的方法(而且很糟糕-永远不要这样做)是尝试模型中的所有组合并查看会发生什么。在Boston Housing数据集中,这产生了2 ^ 13 = 8192个可能要测试的特征组合。组合增长是指数级的,这种方法不仅可能导致生存偏差,而且对于大多数人和大多数数据来说太昂贵了。

除非对所有可能的选择进行全面检查,否则必须使用某种启发式来尝试找到相同的结果。我会提到几个:

  • 对模型进行n次训练,每次都删除一个特征(每次都删除一个不同的特征)。如果模型的性能不佳,则表明删除的功能很重要。

  • 使用所有功能一次训练模型,并一次随机扰动每个输入一个功能(如果您不想在每个输入上浪费时间,可以随机进行此操作)。扰动时导致分类错误最多的特征就是最重要的特征。

  • 正如您所说,对目标变量执行某种相关性测试,以确定特征的重要性,并使用互相关性来删除重复的线性信息。

这些不同的方法具有不同的假设和目标。从计算的角度来看,特征删除非常重要(许多机器学习算法在特征数量上是二次方或更差的),从这个角度出发,目标是在删除尽可能多的信息的同时尽可能保持模型的行为(例如,尽可能的复杂)。在“波士顿住房”数据集中,您的互相关分析可能会将查尔斯河临近度,一氧化二氮浓度和平均房间数作为最相关的变量。在这三个之间,您几乎可以捕获线性模型可以在数据上获得的所有精度。

要指出的一件事是,按照定义,功能删除会删除信息。仅出于几个原因,这可以提高准确性和泛化性。

  • 通过删除冗余信息,该模型对这些功能的偏见较小,并且能够更好地进行概括。
  • 通过删除嘈杂信息,该模型可以将其精力集中在具有较高信息含量的功能上。 请注意,这比像线性回归这样的模型对神经网络等不确定性模型的影响更大。线性回归总是收敛于一个唯一的解(在特殊情况下,有多个解的概率为0%时除外)。

当您在算法中添加许多功能时(例如,一个生物有5万个不同的基因),从某种意义上说,其中的某些功能不会携带任何信息。因此,根据定义,它们具有的任何方差都是噪声,模型可能会无意间拾取这些噪声,而不是我们想要的信号。去除特征是该领域的一种常见策略,可以显着提高准确性。

与拥有13个精心策划的要素的Boston Housing数据相反,所有要素均带有信息(基于关于目标变量的粗略散点图)。这种特殊的推理不太可能影响准确性。而且,没有足够的功能来使重复信息带来很大的偏差。

最重要的是,有数百个数据点覆盖了大部分输入空间,因此,即使我们确实存在偏差问题或无关功能,也有足够多的数据可以忽略不计。也许足以使Kaggle的第一或第二名获奖者成败,但不足以在出色的分析和出色的分析之间做出区分。

特别是,如果您最上面使用的是线性算法,则较少的功能可以大大有助于模型的可解释性。如果将模型限制为这三个变量,则很容易告诉一个人您知道该地区的房屋很昂贵,因为它们都是海滨地区,很大,而且草坪很好(一氧化二氮表示肥料使用情况)

删除要素只是要素工程的一小部分,另一个重要技术是要素的添加。添加特征通常等于低阶多项式的交互(例如,age变量与medv变量的相关性很弱,但是如果平方,则数据会变直一些并改善相关性。)

只需很少的领域知识,就可以极大地帮助您添加(或删除)功能。我对住房一无所知,因此在这里我无法提供很多帮助,但是在其他领域(如信用度)中,您可以轻松地将债务和收入特征结合起来,以将债务与收入之比作为一个特征。重塑这些功能,使它们与您的输出线性相关并代表域中的具有物理意义的数量,这是获得准确性和通用性的重要部分。

关于可概括性和领域知识,即使使用简单的线性模型,也必须能够解释功能为何如此重要,这一点很重要。仅仅因为数据表明一氧化二氮在测试装置中很重要,并不意味着它也会在训练装置中承担任何可预测的重量。尤其是随着功能数量的增加和数据量的减少,您会期望这种关联纯粹是偶然发生的。具有物理解释(一氧化二氮对应于漂亮的草坪)可以使人们确信该模型没有学习虚假的相关性。