Capture 1
对于机器学习来说,每个模型都比较喜欢定义比较好的数据源。在深度学习浪潮之前,基本都是传统机器学习模型作为AI界的主导地位,比如SVM,Linear Regression等等,模型的选择并不多,所以对于一个问题,我们更加注重说把特征工程作为整个workflow里面最重要的部分,即把原始的数据源转换成不同模型喜欢的数据形式,从而拟合出更好的效果。
而对于深度学习里面的神经网络来说,同样是一个数据集,并不需要手动去make特征工程,它只需要通过不同的线性层+非线性层不断地去训练拟合我们的目标值,学到合适的参数即可。
Capture 2
对于不同的数据类型,有不同的特征处理方法:
Tabular Data Features - 表格数据
-
Int/float 数值型数据:直接输入或者将其划分为多个bin区间
-
Categorical data 类别型数据:one-hot encoding
tips:对于一些出现频率较低的长尾类别数值可以划分为一类,便于后续统一转换。 -
datetime 时间类型数据:时间多尺度转换
👉year
👉Month
👉day_of_week
👉week_of_year
👉day_of_year -
Feature Combination 特征交叉:对于一些类别特征,可以通过两两之间组合得到一个新的类别特征。
[ c a t , d o g ] ∗ [ m a n , f e m a l e ] 👇 [ c a t , m a n ] + [ c a t , f e m a l e ] + [ d o g , m a n ] + [ d o g , f e m a l e ] [cat,dog] * [man,female]\\👇\\ [cat,man] +[cat,female] +[dog,man] +[dog,female] [cat,dog]∗[man,female]👇[cat,man]+[cat,female]+[dog,man]+[dog,female]
Text Features - 文本数据
-
Represent text as token features:将文本数据转换成词元,然后再进行后续处理:
- Bag of words (BOW) model:通过统计词元的次数,转换成一个dataframe
- Word Embeddings(Word2Vec):先预训练出一个词元模型,把每个词元表示为一个向量,这个向量包含一定的语义信息。比如,如果两个词元的向量的余弦距离较小,就说明这两个词元在语义上比较接近。当我们拿到每个词元的向量时,可以通过sum pooling或者mean pooling等操作,把最终计算的结果向量作为当前句子的向量表达。
- Bag of words (BOW) model:通过统计词元的次数,转换成一个dataframe
-
Pre-trained language models(Bert,GPT-3):在未见过的语料库上预训练出一个模型,同时很好地兼顾了序列信息,在其文本的理解上有独特的见解。
Image/Video Features - 图片、视频数据
- 对于图片、视频类型数据,基本都是通过预训练出一个神经网络的模型,获取相应的向量表达。比如可以通过Image Net里面获取一个预训练好的模型,将我们的图片样本输入到模型进行训练,然后拿到hidden_layer里面的最后一层作为当前图片样本的特征数据。
Summary
- 特征工程是数据与模型之间的桥梁,在深度学习之前,它在机器学习的workflow里占有主导地位。
- 对于文本,图片,视频类型数据,可以通过预训练好的模型获取我们所需要的数据信息。
- 而对于Tabular类型的数据,就需要手动进行构造特征工程,使得模型训练学习到更多维度的信息。
👉Learning Note from 《跟李沐学AI》!