如何对未知特征执行特征工程?


19

我正在参加kaggle比赛。数据集包含约100个要素,所有要素都是未知的(就其实际表示而言)。基本上,它们只是数字。

人们正在对这些功能执行许多功能工程。我想知道一个人究竟能对未知的特征执行特征工程吗?有人可以帮助我理解这一点,以及一些有关如何对未知特征执行特征工程的提示吗?

Answers:


19

您不需要领域知识(即您的数据含义的知识)即可进行功能工程(查找框架中更具表现力的方式)。


正如Tu N.解释的那样,您可以找到功能的“快速而肮脏”的组合,这些组合可能非常容易帮助。给定输出和单个特征,可以进行以下变换,。快速检查转换的有效性是之间的相关性是否高于之间的相关性。X X '{ é X日志X X 2X 3的tanh X } { Ý X ' } { ÿ X }ÿXX{ËX日志XX2X3X}{ÿX}{ÿX}

关于关联的警告:关联不会显示所有内容,并且取决于您使用的模型(高度非线性,例如NN或RF)以及与其他变量的交互作用,关联的变化可能没有任何意义。

但是,如果您使用诸如Logistic回归之类的简单线性模型,则这是性能的确定指标。正如Fokhruz Zaman所指出的那样,评估这种转换的最佳方法是建立一个带有或不带有您转换后的特征的模型,并查看(在交叉验证时)验证误差的演变情况。

这样很容易发现单一功能的转换。这些适用于大量数据,其中输入和输出之间更具表达力的关系可能具有不同的规模。例如,收入和“幸福”之间的关系似乎是对数的,但是您永远不会直接记录参与者收入的对数。


查找功能组合比较困难。首先,如果要测试每个添加的2个功能,并且您具有功能,测试转换的顺序。为了找到这样的变换,您可以对问题应用非线性模型(例如NN或RF),并尝试查看它正在学习的内容。如果可以确定NN中的中间层在做什么,则可以预先计算其结果并将其添加为新功能。它不需要再次计算,并且可能会尝试学习新知识。D 2dd2

可能难以解释NN的内部表示,甚至难以解释随机森林中的特征重要性。为此目的,一种更简单,可能更合适的方法是使用决策树进行增强。有很多实现Boosting的库,如果您似乎暗示着您参加Kaggle竞赛,那么XGBoost似乎被很多参与者使用,因此您可能会找到一些关于我将要描述的帮助/教程。

首先,使用树桩(1级决策树)运行提升算法。树桩非常薄弱,但是Boosting使它成为一个合理的模型。这将作为您的基准。根据所使用的库,您应该能够很容易地显示出最常用的功能,并且应根据响应对它们进行绘制(如果响应是分类的,则可以进行直方图绘制)以识别某种模式。这可能使您对什么是好的单个功能转换有一个直观的认识。

接下来,使用2级决策树运行Boosting算法。这个模型比以前的模型复杂得多。如果将两个变量加在一起比单独使用具有更大的功效,则该模型应优于您先前的模型(同样,不是训练错误,而是验证错误!)。基于此,您应该能够提取经常一起使用的变量,并且这将导致您进行潜在的多功能转换。


在相关材料上,我建议以下视频易于观看


4

您可以采用不同的特征组合,例如特征总和:feat_1 + feat_2 + feat_3...或这些特征的乘积。或者,您可以通过对数,指数,S形...变换特征,甚至将数字特征离散化为分类特征。这是一个无限的探索空间。

无论采用哪种组合或转换来提高交叉验证或测试集的性能,都应使用它。


2
对于“无论哪种组合或转换都可以提高交叉验证或测试集性能,都应该使用它。” 盲目尝试,直到某些东西可以改善您的性能指标,这可能会导致发现没有意义的关系,并导致过度拟合。这实际上可能会损害以后的新观测结果的性能。
Hersheezy

1

您能否以具体示例进一步说明以下内容?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

我不确定在不了解数据集和给定属性的情况下如何进行特征工程!

表格数据是根据由变量或属性(列)组成的观察值或实例(行)来描述的。属性可以是功能。

“特征的概念与属性分开,在问题的上下文中更有意义。特征是对您的问题有用或有意义的属性。它是用于了解特征结构的观察的重要部分。正在建模的问题。

在计算机视觉中,图像是观察值,但特征可能是图像中的线条。

在自然语言处理中,文档或推文可能是观察对象,而短语或字数可能是功能。

在语音识别中,发声可能是一种观察,但功能可能是单个单词或音素。”

请访问以下网址以获取更多信息:

探索功能工程,如何设计功能以及如何精通功能


OP的属性已匿名化,无法使用领域知识。这在Kaggle比赛中非常普遍,但是功能工程的形式仍然有限。通常,新功能是批量创建然后进行测试,而不是使用主题知识来指导其生成。例如:kaggle.com/c/bnp-paribas-cardif-claims-management/data
Neil Slater

正如尼尔所说,这些功能都是匿名的,这就是我从那句话中得出的意思。
user2409011 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.