https://zhuanlan.zhihu.com/p/41521695
正因为数据表示的重要性,机器学习一般有两种思路来提升原始数据的表达
- 特征学习(feature learning),又叫表示学习(representation learning)或者表征学习,一般指的是自动学习有用的数据特征。
- 特征工程(feature engineering),主要指对于数据的人为处理提取,有时候也代指“洗数据”。
表示学习
模型自动对输入数据进行学习,得到更有利于使用的特征(*可能同时做出了预测)。代表的算法大致包括:
- 深度学习,包括大部分常见的模型如CNN_RNN_DBN等。
- 某些无监督学习算法,如主成分分析(PCA)及自编码器(autoencoder)通过对数据转化而使得输入数据更有意义。
- 某些树模型可以自动的学习到数据中的特征并同时作出预测。
模型选择
什么时候用「手工提取」什么时候用「表示学习」。一种简单的看法是,要想自动学习到数据的良好表达,就需要大量的数据。这个现象也解释了为什么「特征工程」往往在中小数据集上表现良好,而「表示学习」在大量复杂数据上更有用武之地。
比如我们会假设数据分布,会假设映射函数的性质,也会假设预测值与输入值间的关系。这一切假设其实并非凭空猜想,而是基于我们对于问题的理解,从某种角度来看,这是一种先验,是贝叶斯模型。在中小数据集上的机器学习往往使用的就是强假设模型(人类知识先验)+一个简单线性分类器。当数据愈发复杂,数据量逐渐加大后,我们对于数据的理解越来越肤浅,做出的假设也越来越倾向于随机,那么此时人工特征工程往往是有害的,而需要使用摆脱了人类先验的模型,比如深度学习或者集成模型。
模型选择的过程其实也是在衡量我们对于问题及数据的理解是否深刻,是在人类先验与数据量之间的一场博弈。从这个角度来看,深度学习首先革的是传统机器学习模型的命:最先被淘汰的不是工人,而是特定场景下的传统机器学习模型。
数据的粒度
数据的粒度可以理解为数据的细分程度。随着细分程度的改变,那么数据量也会有明显的变化。数据的粒度越细,数据量越大。
过于具体的数据缺失了特征,有效的特征仅在某个特定的粒度才存在。打个比方,人是由原子、分子、细胞、组织、器官构成,但在分子层面我们不一定能分辨它是人,只有到达一定的粒度才可以。因此,数据收集的第一个重点是搞清楚,在什么粒度可以解决我们的问题,而不是盲目的收集一大堆数据,或者收集过于抽象的数据。
到底需要多少数据?
数据量与特征量的比例
谈论数据量,不能光说有多少条数据n,一定也要考虑数据的特征数m。
人们讨论数据量,往往讨论的是n,也就是有多少条数据。但这个是不准确的,因为更加适合的评估应该是n/m,也就是样本量除以特征数,原因很简单。如果你只有100条数据,但只有2个特征。如果用线性函数来拟合,相当于给你100个点来拟合到二次函数上,这个数据量一般来说是比较充裕的。但还是100个数据点,每个数据的特征数是200,那么很明显你的数据是不够的,过拟合的风险极高。
特征间的相关性和有效性
数据间重复性低:包括样本间重复性比较低,特征间重复性比较低,即特征间线性无关
数据的有效性:此处的有效性指的是你的变量对于解决问题有帮助,而不是完全无关或者关联性极低的数据。
数据是否越多越好?
数据比模型更重要,数据重要性 >> 模型重要性。机器学习模型的表现高度依赖于数据量,选择对的模型只是其次,因为巧妇难为无米之炊。
数据不是越多越好,随机数据中也可能因为巧合而存在某种关联。
数据量与模型选择
数据量很小,用朴素贝叶斯、逻辑回归或支持向量机
数据量适中或者较大,用树模型,优先 xgboost和lightgbm
数据量较大,尝试使用神经网络
所以说到底,依然不存在定式,而依赖于经验和理解。