我正在参加一个 kaggle 比赛。该数据集有大约 100 个特征,并且都是未知的(就它们实际代表的内容而言)。基本上它们只是数字。
人们正在对这些特征进行大量的特征工程。我想知道一个人究竟是如何对未知的特征进行特征工程的?有人可以帮助我理解这一点以及一些关于如何对未知特征执行特征工程的提示吗?
我正在参加一个 kaggle 比赛。该数据集有大约 100 个特征,并且都是未知的(就它们实际代表的内容而言)。基本上它们只是数字。
人们正在对这些特征进行大量的特征工程。我想知道一个人究竟是如何对未知的特征进行特征工程的?有人可以帮助我理解这一点以及一些关于如何对未知特征执行特征工程的提示吗?
您不需要领域知识(数据含义的知识)即可进行特征工程(寻找更具表现力的数据构建方式)。
正如Tu N. 解释的那样,您可以找到“快速而肮脏”的功能组合,这些组合非常容易提供帮助。给定一个输出和一个单独的功能,您可以进行以下变换,. 快速检查转换的有用性是高于之间的相关性.
相关性警告:相关性并不能显示所有内容,并且取决于您使用的模型(高度非线性,例如 NN 或 RF)以及与其他变量的交互,相关性的变化可能毫无意义。
但是,如果您使用像逻辑回归这样的简单线性模型,则它是一个不错的性能指标。然而,正如Fokhruz Zaman所指出的,评估这种转换的最佳方法是构建一个带有和不带有转换特征的模型,并查看验证错误(在您的交叉验证折叠上)如何演变。
以这种方式很容易发现单特征转换。这些适用于大量数据,其中输入和输出之间更具表现力的关系可能在不同的范围内。例如,收入和“幸福”之间的关系似乎是对数的,但您永远不会直接记录参与者收入的对数。
寻找特征的组合更加困难。首先,如果您想测试每个添加的 2 个功能,并且您有功能,你有一个订单转换来测试。为了找到这样的转换,您可以将非线性模型(例如 NN 或 RF)应用于问题并尝试查看它正在学习什么。如果您可以识别 NN 中的中间层在做什么,您可以预先计算其结果并将其添加为新特征。它不需要再次计算它,它可能会尝试学习新的东西。
很难解释 NN 的内部表示,甚至很难解释随机森林中的特征重要性。一种更简单且可能更适合此目的的方法,该模型将使用决策树进行Boosting 。有很多实现 Boosting 的库,如果你像你的帖子所暗示的那样参加 Kaggle 比赛,XGBoost似乎被很多参与者使用,所以你可能会找到一些关于我将要描述的帮助/教程。
首先,仅使用 stumps 1 级决策树运行您的提升算法。Stumps 非常弱,但 Boosting 使它成为一个合理的模型。这将作为您的基线。根据您使用的库,您应该能够很容易地显示哪些是最常用的功能,并且您应该根据响应绘制它们(或者如果响应是分类的,则绘制直方图)以识别某些模式。这可能会让您对什么是好的单一特征转换有一个直觉。
接下来,使用 2 级决策树运行 Boosting 算法。这个模型比前一个复杂得多。如果两个变量加在一起比单独计算有更多的力量,这个模型应该优于你以前的模型(同样,不是在训练错误方面,而是在验证错误方面!)。基于此,您应该能够提取哪些变量经常一起使用,这应该会引导您进行潜在的多特征转换。
在相关材料上,我会推荐以下视频,因为它们很容易理解
您可以采用不同的特征组合,例如特征总和:feat_1 + feat_2 + feat_3
...,或这些特征的乘积。或者,您可以通过对数、指数、sigmoid 转换特征……甚至将数字特征离散化为分类特征。这是一个无限的探索空间。
无论增加交叉验证或测试集性能的组合或转换,您都应该使用它。
您能否就您的以下陈述提供更多具体示例?
The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.
如果不充分了解您的数据集和给定属性,我不确定如何进行特征工程!
表格数据是根据由变量或属性(列)组成的观察或实例(行)来描述的。属性可以是特征。
“与属性分开的特征的想法在问题的上下文中更有意义。特征是对您的问题有用或有意义的属性。它是观察的重要组成部分,以了解结构正在建模的问题…………
在计算机视觉中,图像是一种观察,但特征可能是图像中的一条线。
在自然语言处理中,文档或推文可以是观察,短语或字数可以是特征。
在语音识别中,话语可能是观察,但特征可能是单个单词或音素。"
请访问以下网址了解更多信息: