简介
特征工程本质上可以理解成数据预处理,其目的是最大限度地从原始数据中提取特征以供算法和模型使用,从而提高模型的准确率等指标。处理的数据中的特征直接影响到正在使用的模型以及能达到的最好的结果。当模型和特征都确定之后,通过调参带来的收益微乎其微,似乎已经到达模型的上限了。但是如果此时发现了更好的特征,只更换特征的情况下,效果会有很大的提升,这不是靠调参能够得到的。
特征工程总览:
特征工程的位置
在近一步讨论特征工程的细节之前,我们先明确一下机器学习或者说深度学习模型的工作管道。这会帮助我们了解一项任务,从问题提出到问题解决的全过程。机器学习的一般流程大概如下:
问题定义 -> 准备数据 -> 提取特征 -> 评估模型 -> 结果
上图中红框内就是特征工程需要关心的部分,即如何从原始数据中提取有用的特征信息。
特征工程的重要性
特征工程的目的就是找到更好的特征来表征原始数据中的固有结构,因为更好的特征一般具有以下的属性。
-
良好的特征意味着更好的灵活性
即便我们选择了一个相对较差的模型,但是由于良好的特征加持,我们依旧可以获得较好得到结果。因为大部分模型其实都可以很好地利用数据中良好的结构信息。良好的特征可以使我们使用更加简单的的模型,这样更容易训练,也更容易理解和维护。 -
良好的特征意味着更简单的模型
如果我们提取出了较好的特征,其实它已经具备足够强的表达能力,可以为我们节省大量在模型选择和参数调优上的时间。 -
良好的特征意味着更好的结果
对于Kagglers,或者参加其他比赛的同学来说,大家使用的算法都大同小异,大部分时间都花在了特征工程上面。
特征类型
我们知道由于特定的机器学习或深度学习的任务不同,对应所需要的数据集也不同。不过数据的类型还是可以总结出来,一般来说无非就以下几种类型:
-
图像
-
文本
-
音频
-
视频
…
以文本数据举例,如果我们将其细分一下,其实还可以分为许多类型。比如有: -
数值数据(整数,浮点数)
-
单词、句子、段落数据(字符串,单词)
-
类别数据(字符串,数字)
要知道我们的模型的输入只能是数值类型,对于不是数值类型的特征,我们需要通过一系列方法来将其转换成模型和算法能接受的数据类型。这里面又包含了很多方法,比如One-hot编码,词袋模型,Word2Vec等等等等。
参考资料链接:https://www.jianshu.com/p/172677f4ea4c