数据处理

如果把重点放在数据的处理方式上,那么长期共存的方式大概有两种:

  • 特征学习(feature learning),又叫表示学习(representation learning)或者表征学习 。特征学习是从数据中自动抽取特征或者表示的方法,这个学习过程是模型自主的。
  • 特征工程(feature engineering),主要指对于数据的人为处理提取,有时候也代指“洗数据” 。特征工程的过程是人为的对数据进行处理,得到我们认为的、适合后续模型使用的样式。

综上,机器学习模型对于数据的处理可以被大致归类到两个方向1

  • 表示学习:模型自动对输入数据进行学习,得到更有利于使用的特征(可能同时做出了预测)。代表的算法大致包括: 深度学习,包括大部分常见的模型如cnn/rnn/dbn,也包括迁移学习等某些无监督学习算法,如主成分分析(PCA)通过对数据转化而使得输入数据更有意义,某些树模型可以自动的学习到数据中的特征并同时作出预测。
  • 特征工程:模型依赖人为处理的数据特征,而模型的主要任务是预测,比如简单的线性回归期待良好的输入数据(如离散化后的数据) 。

这个不是一个严谨的科学划分,是一种直观的理解。如果所使用的模型拥有对于数据的简化、特征表示和抽取能力,我们都可以认为它是有表示学习的特性。狭义的特征工程指的是处理缺失值、特征选择、维度压缩等各种预处理手段,而从更大的角度看主要目的是提高数据的表示能力。对于数据的人为提炼使其有了更好的表达,这其实是人工的表示学习。

传统的机器学习方法主要依赖人工特征处理与提取,而深度学习依赖模型自身去学习数据的表示。

深度学习的层层网络可以从数据中自动学习到有用的、高度抽象的特征,而最终目的是为了帮助分类层做出良好的预测。深度学习的一大特点是其对数据的分布式表示(distributed representation)(也和稀疏性表示等其他特性有关),最直观的例子可以是nlp中的word2vec,每个单词不再是割裂的而互相有了关联。类似的,不少网络中的参数共享就是分布式表示,不仅降低了参数量需求也提高对于数据的描述能力。仅看分类层的话,深度学习和其他的机器学习似乎没有天壤之别,但正因为有了种种良好的表示学习能力使其有了过人之处。

在数据量不够的时候,自动特征抽取的方法往往不如人为的特征工程。当使用者对于数据和问题有深刻的理解时,人工的特征工程往往效果更好。同时也值得注意,表示学习的另一好处是高度抽象化的特征往往可以被应用于相关的领域上,这也是我们常说的迁移学习(transfer learning)的思路。比如有了大量猫的图片以后,不仅可以用于预测一个物体是不是猫,也可以用于将抽取到的特征再运用于其他类似的领域从而节省数据开销。

从某个角度来看,表示学习有“嵌入式的特征选择”(embedded feature selection)的特性,其表示学习嵌入到了模型中。举个简单的例子,决策树模型在训练过程中可以同时学习到不同特征的重要性,而这个过程是建模的一部分,是一种嵌入式的特征选择。

首先对于模型选择有一定的帮助:当我们数据量不大,且对于数据非常理解时,人为的特征处理也就是特征工程是合适的。比如去掉无关数据、选择适合的数据、合并数据、对数据做离散化等。 当数据量较大或者我们的人为先验理解很有限时,可以尝试表示学习,如依赖一气呵成的深度学习,效果往往不错。