文章目录
什么是特征工程
- 特征工程(Feature Engineering)特征工程是将原始数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。
- 特征工程简单讲就是发现对因变量y有明显影响作用的特征,通常称自变量x为特征,特征工程的目的是发现重要特征。
- 如何能够分解和聚合原始数据,以更好的表达问题的本质?这是做特征工程的目的。 “feature engineering is manually designing what the input x’s should be.” “you have to turn your inputs into things the algorithm can understand.”
- 特征工程是数据挖掘模型开发中最耗时、最重要的一步。
在深度学习(DL)出现以前,特征工程对于机器学习(ML)至关重要。 深度学习可以自动提取特征(例如CNN用于提取图像特征),让特征提取变得简单,但是比较消耗数据和算力资源。而在传统机器学习中,需要手动提取特征,这也成为了机器学习的核心工作。
常见类型数据的特征工程
表格数据特征(Tabular Data Feature)
-
Inf/float:直接使用,或者将数据划分为n个区间。举例来说,在我们人看来100万和101万其实没太大区别(我们不需要如此细粒度的数据),但是对机器来说就是完全不一样的东西,因此可以把他们都划分在100-110万之间。
-
类别数据(Categorical data):独热编码(One-hot Encoding)。举例来说,我们要对房子进行分类,如果有100类,可能只要前面10种比较常见,后面的的可能是噪音或者不常见的,那些长尾的类型全部可以变成
Unknown
类型。 -
时间数据(Date-time):一个时间数据类型可以展开表示成以下的向量。可以看到有
day_of_year
表示一年的第几天,week_of_year
表示一年的第几个星期等。因为人在一年的不同时间的行为是不一样的,可以作为重要的特征。 -
特征结合(Feature combination):我们还可以将不同特征进行交叉,把[cat, dog]e和[male, femal]交叉相乘,产生新的4个类别,再对新的类别进行独热编码。特征结合的往往是我们认为具有相关行的特征。
- (cat, male)⇒[1, 0, 0, 0]
- (cat, female)⇒ [0, 1, 0, 0]
- (dog, male)⇒[0, 0, 1, 0]
- (dog, female)⇒[0, 0, 0, 1]
文本特征(Text Feature)
- 将文本用词元特征(token features)表示
-
词袋(Bag of Words, BoW)模型:先把每个词用one-hot encoding表示,然后全部相加。局限在于我们需要仔细地构建词典,不能太大也不能太小;并且时序信息会丢失。
-
词嵌入(Word Embeddings) :例如Word2vec。将词嵌入到向量空间中,使得相似的词语在空间中的距离较近。
-
预训练通用语言模型(Pre-trained universal language models):例如BERT,GPT-3。目前依靠巨大的transformer模型,在没有标注的数据上通过自监督学习来训练,能够抽取较好的时序信息。效果去前面的方法好,但是训练成本较大。
-
图片/视频特征(Image/Video Features)
- 传统上采用手动提取特征,例如SIFT。
- 目前都依靠预训练好的深度神经网络来实现特征提取。
总结
- 特征是机器学习中相当重要的部分
- 目前使用深度学习来抽取特征已经是主流了。但在Tabular data上使用深度学习还有点困难,因为没有较大的公用的Tabular data数据集。